Domanda
Sono bloccato e ha bisogno di una mano. Spero che qualcuno possa aiutare?
Qualcuno ha qualche idea del perché sto ottenendo "scrittura non riuscita" in questo codice?
$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);
Grazie in anticipo.
Soluzione
Utilizzando l'operatore OR quando si crea il handle di file, si restituisce un valore booleano a seconda dell'operazione. Così $ write_handle conterrà vero o falso, al posto della risorsa file. Un modo migliore per aprire un file per la scrittura e testare che era successo sarebbe questo:
$write_handle = fopen($write_file, 'w');
if ($write_handle === false)
{
die('Could not open file ' . $write_file);
}
Inoltre, è possibile utilizzare la funzione file_put_contents
()
che gestisce le fopen (), fwrite () e fclose () per voi. Ho solo raccomandare questo se si sta eseguendo una sola scrittura per lo stesso file, in quanto sarà un sacco di spese generali, e se non si passa la bandiera FILE_APPEND
, sarà svuotare il file per ogni scrittura.
Altri suggerimenti
ho visto usato in tutto il mondo, ma il problema è il || die ( "couln't users_v2 aperta!");
Per prima cosa ho aggiunto:
error_reporting(E_ALL);
per vedere che cosa PHP è di reporting per gli errori.
$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");
fclose($write_handle);
Restituisce un invalido maniglia flusso di errore e file di manico di 1. Senza di essa l'handle di file restituito è "Resource id # x".
La modifica della linea:
$write_handle = fopen($write_file, "w"); // || die("Couln't open users_v2!");
e il tuo codice funziona bene. Gonna go inviare questo su php.net ora.