PHP - Error de grabación
Pregunta
Estoy atascado y en la necesidad de una mano. Espero que alguien pueda ayudar?
Alguien tiene alguna idea de por qué estoy recibiendo "escritura fallido" en este 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);
Gracias de antemano.
Solución
Al utilizar el operador O al crear el identificador de archivo, devuelve un valor booleano dependiendo de la operación. Así $ write_handle contendrá verdadera o falsa, en lugar del recurso de archivo. Una mejor manera de abrir un archivo para escribir y probar que era un éxito sería la siguiente:
$write_handle = fopen($write_file, 'w');
if ($write_handle === false)
{
die('Could not open file ' . $write_file);
}
Además, se puede usar la función file_put_contents
()
que se ocupa de los fopen (), fwrite () y fclose () para usted. Sólo recomiendo esto si se está ejecutando una sola escritura en el mismo archivo, ya que será una gran cantidad de gastos generales, y salvo que se pasa la bandera FILE_APPEND
, se vaciará el archivo para cada escritura.
Otros consejos
he visto que se usa en todas partes, pero el problema es el || die ( "users_v2 abierta Couln't!");
Primero añadí:
error_reporting(E_ALL);
para ver lo que php se informa de los errores.
$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");
fclose($write_handle);
devuelve un error y el archivo de mango mango de transmisión no válida de 1. Sin ella el identificador de archivo devuelto es "# x Identificación de recursos".
Cambio de la línea a:
$write_handle = fopen($write_file, "w"); // || die("Couln't open users_v2!");
y el código funciona bien. Va a ir este post en php.net ahora.