2012-06-02 30 views
12

È possibile eseguire quanto segue?Scrivi su file con register_shutdown_function

register_shutdown_function('my_shutdown'); 
function my_shutdown() 
{ 
    file_put_contents('test.txt', 'hello', FILE_APPEND); 
    error_log('hello', 3, 'test.txt'); 
} 

Non sembra funzionare. BTW sono su PHP 5.3.5.

risposta

19

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.

+0

Quindi, questa risposta ha funzionato? Spero di sentire i tuoi risultati. – Whisperity

+0

Sì scusa per l'aggiornamento in ritardo – IMB

+0

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

1

controllo questo: (da here)

Note: 

Working directory of the script can change inside the shutdown function 
under some web servers, e.g. Apache. 

verificare con getcwd();