2012-06-02 19 views
12

¿Es posible hacer lo siguiente?Escribir en el archivo 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'); 
} 

Parece que no funciona. BTW estoy en PHP 5.3.5.

Respuesta

19

Depende lo que SAPI que está utilizando. El documentation page for register_shutdown_function() indica que en ciertos servidores, como Apache, el directorio de trabajo del script cambia.

El archivo se escribe, pero no en su archivo es .php (DocumentRoot ), pero en la carpeta del servidor Apache (ServerRoot ).

Para evitar esto, necesita algún tipo de conexión directa a la carpeta de trabajo. Justo cuando su secuencia de comandos comienza a ejecutar (en las primeras líneas), de alguna manera debe almacenar la carpeta de trabajo real. Crear una constante con define() es perfecto para esto.

define('WORKING_DIRECTORY', getcwd()); 

Y tiene que modificar la parte función de apagado como esto:

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'); 

De esta manera, la carpeta de trabajo al instante se cambiará de nuevo a la real cuando la función es llamada, y el test.txt archivo aparecerá en la carpeta DocumentRoot.

algunas modificaciones: Es mejor llamar register_shutdown_function()después la función ha sido declarada. Es por eso que lo escribí debajo de el código de función, no encima de él.

+0

Entonces, ¿funcionó esta respuesta? Espero escuchar sus resultados – Whisperity

+0

Sí, lo siento por la actualización tardía – IMB

+0

¿La versión de Apache es importante? De acuerdo con algunos de los comentarios sobre la documentación de la función, parece que sí. Tengo dos servidores web y uno funciona y el otro no. El que lo hace es Apache/2.2.24 (Unix) en una Mac. El otro que no es Apache/2.4.9 (Ubuntu) en Ubuntu 14.04. –

1

cheque esto: (de here)

Note: 

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

comprobarlo con getcwd();

Cuestiones relacionadas