Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Это зависит от того, какой 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() после, функция была объявлена. Вот почему я написал ниже код функции, а не выше.

Ответ 2

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

Note:

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

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