Dipende che SAPI che si sta utilizzando. Il documentation page for register_shutdown_function() afferma che sotto determinati server, come Apache, la directory di lavoro dello script cambia.
Il file viene scritto, ma non dove il file è .php
(DocumentRoot), ma nella cartella del server Apache (ServerRoot).
Per evitare ciò, è necessario eseguire una sorta di hotwire per modificare la cartella di lavoro. Proprio quando lo script inizia a eseguire (nelle prime righe), è necessario archiviare in qualche modo la cartella di lavoro reale. Creare una costante con define()
è perfetto per questo.
define('WORKING_DIRECTORY', getcwd());
Ed è necessario modificare la parte funzione di spegnimento in questo modo:
function my_shutdown()
{
chdir(WORKING_DIRECTORY);
file_put_contents('test.txt', 'hello', FILE_APPEND);
error_log('hello', 3, 'test.txt');
}
register_shutdown_function('my_shutdown');
In questo modo, la cartella di lavoro sarà immediatamente essere cambiato di nuovo a quella reale quando la funzione viene chiamata, e il test.txt
il file verrà visualizzato nella cartella DocumentRoot.
qualche modifica: E 'meglio chiamare register_shutdown_function()
dopo la funzione è stata dichiarata. Ecco perché l'ho scritto sotto il il codice funzione, non sopra di esso.
Quindi, questa risposta ha funzionato? Spero di sentire i tuoi risultati. – Whisperity
Sì scusa per l'aggiornamento in ritardo – IMB
La versione di Apache è importante? Secondo alcuni commenti sulla documentazione della funzione sembra così. Ho due server web e uno funziona e l'altro no. Quello che fa è Apache/2.2.24 (Unix) su un Mac. L'altro che non lo è è Apache/2.4.9 (Ubuntu) in Ubuntu 14.04. –