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.
Entonces, ¿funcionó esta respuesta? Espero escuchar sus resultados – Whisperity
Sí, lo siento por la actualización tardía – IMB
¿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. –