Запись в файл с помощью 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'); } 

Кажется, не работает. BTW я на PHP 5.3.5.

Это зависит от того, какой SAPI вы используете. На странице документации для register_shutdown_function () указано, что на определенных серверах, таких как Apache, меняется рабочий каталог скрипта.

Файл записывается, но не там, где находится ваш .php файл ( DocumentRoot ), но в папке сервера Apache ( ServerRoot ).

Чтобы этого не произошло, вам нужно что-то вроде hotwire изменить рабочую папку. Как только ваш скрипт начнет выполнение (в первых нескольких строках), вам нужно как-то сохранить реальную рабочую папку. Создание константы с помощью define() идеально подходит для этого.

 define('WORKING_DIRECTORY', getcwd()); 

И вам нужно изменить часть функции shutdown следующим образом:

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

Таким образом, рабочая папка будет немедленно заменена на реальную, когда вызывается функция, и файл test.txt появится в папке DocumentRoot .

Некоторая модификация: лучше объявить register_shutdown_function() после того, как функция была объявлена. Вот почему я написал ее под кодом функции, а не над ней.

проверьте это: ( отсюда )

 Note: Working directory of the script can change inside the shutdown function under some web servers, eg Apache. 

проверьте его с помощью getcwd();