Pergunta

Eu estou preso e precisa de uma mão. Espero que alguém pode ajudar?

Alguém tem alguma idéia por que estou recebendo "escrita falhou" neste código?

$write_file = "/usr/home/public_html/php/users_v2.sql";
$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");

if (is_writeable($write_file)) {
    if ($write_handle === FALSE) echo 'Failed handle?!';
    if (fwrite($write_handle, "Hi\n") === FALSE) echo "Failed write!\n";
}

fclose($write_handle);

Agradecemos antecipadamente.

Foi útil?

Solução

Ao utilizar o operador OR ao criar seu identificador de arquivo, você está retornando um valor booleano, dependendo da operação. Então $ write_handle conterá verdadeiro ou falso, em vez do recurso de arquivo. A melhor maneira de abrir um arquivo para escrita e teste que ele foi bem sucedido seria esta:

$write_handle = fopen($write_file, 'w');
if ($write_handle === false)
{
    die('Could not open file ' . $write_file);
}

Além disso, você pode usar a função file_put_contents () que lida com o fopen (), fwrite () e fclose () para você. Eu só recomendo isso se você estiver executando apenas uma gravação para o mesmo arquivo, como ele vai ser um monte de sobrecarga, e se você passar o sinalizador FILE_APPEND, ele vai esvaziar o arquivo para cada gravação.

Outras dicas

Eu já vi isso usado em todos os lugares, mas o problema é o || die ( "Coul não users_v2 aberto!");

Primeiro eu adicionei:

error_reporting(E_ALL);

para ver o php está relatando erros.

$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");
fclose($write_handle);

Retorna um erro e arquivo alça fluxo identificador inválido de 1. Sem ele o identificador de arquivo retornado é "Resource id # x".

Alterar a linha para:

$write_handle = fopen($write_file, "w"); // || die("Couln't open users_v2!");

e seu código funciona bem. Gonna Go postar isso em php.net agora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top