Можно ли сделать следующее?
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();