Можно ли сделать следующее?
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.
Можно ли сделать следующее?
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, изменяется рабочий каталог script.
Файл записывается, но не там, где находится ваш файл .php
(DocumentRoot), но в папке сервера Apache (ServerRoot).
Чтобы предотвратить это, вам нужно что-то вроде hotwire изменить рабочую папку. Просто, когда ваш script начинает выполнение (в первых нескольких строках), вам нужно как-то сохранить реальную рабочую папку. Создание константы с помощью 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, e.g. Apache.
проверьте его с помощью getcwd();