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.
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.