PHP ошибка Permission denied в register_shutdown_function

Решили мы себе под конец скрипта зарегистрировать некую shutdown функцию и чего-либо записать в файл. Пишем и упорно получаем ошибку доступа. Ну вот предположим код:

function shutdown () {
    $open = fopen('logfile.log', 'a+');
    flock($open, LOCK_EX);
    fwrite($open, "данные");
    flock($open, LOCK_UN);
    fclose($open);
}

register_shutdown_function('shutdown');

Permission denied ошибка при записи обеспечена.

Сделав var_dump(shell_exec(‘pwd’)); внутри функции получим / — внезапно корневой каталог, прав на запись в который естественно нет. В общем, пока въехал, мне понадобилось проверить конфиги nginx, fpm настройки, phpinfo(). Потом решил посмотреть pwd вне функции. И лишь когда я увидел, что вне функции директория такая, как должна собственно быть, в памяти всплыл этот комментарий с php.net просмотренный как обычно мельком.

register_shutdown_function()
register_shutdown_function()

Так вот, не только Apache грешит этим, но и nginx. Однако «магические» константы, такие как __DIR__ и __FILE__ внутри register_shutdown_function() остаются прежними, также как и серверная DOCUMENT_ROOT, поэтому как выход — на основе их юзать абсолютные пути.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *