Невозможно установить параметр error_log в PHP с помощью ini_set

Я запускаю PHP 7 на Ubuntu Xenial и столкнулся с странной ситуацией с WordPress. Я пытался включить WP_DEBUG_LOG, но он не записывался в файл журнала отладки.

Я написал небольшой тестовый пример и не могу понять, почему это происходит. Я не изменяю конфигурацию по умолчанию для safe_mode или open_basedir, которые, по моему мнению, могут быть виноваты при поиске в Google.

Сценарий

<?php
header('Content-Type: text/plain');
define('DEBUG_LOG', '/www/wp-content/debug.log');

echo "PHP Version: " . phpversion() . "\n";
echo "PHP SAPI: " . php_sapi_name() . "\n";

echo "safe_mode: "; var_dump(ini_get('safe_mode'));
echo "open_basedir: "; var_dump(ini_get('open_basedir'));
echo "error_log: "; var_dump(ini_get('error_log'));

echo "Permissions: " . substr(sprintf('%o', fileperms(DEBUG_LOG)), -4) . "\n";
file_put_contents(DEBUG_LOG, "Direct Write\n", FILE_APPEND);

echo "Setting log_errors: "; var_dump(ini_set('log_errors', true));
echo "Setting error_log: "; var_dump(ini_set('error_log', DEBUG_LOG));

error_log('Testing error_log');

die(file_get_contents(DEBUG_LOG));

Выход

PHP Version: 7.2.5-1+ubuntu16.04.1+deb.sury.org+1
PHP SAPI: fpm-fcgi
safe_mode: bool(false)
open_basedir: string(0) ""
error_log: string(22) "/var/log/php_error.log"
Permissions: 0777
Setting log_errors: string(1) "1"
Setting error_log: bool(false)
Direct Write

Прямая запись с file_put_contents работает, а вот с error_log - нет, очевидно, потому что вызов ini_set('error_log') возвращает false.

Что еще могло вызвать это?

Обновлено: понедельник, 4 июня, 16:40:35 CDT 2018

Благодаря комментариям здесь я обнаружил, что использовал php_admin_value в моей конфигурации PHP-FPM, что делает настройку неизменной.

Any directive type set with php_admin_value can not be overridden by .htaccess or ini_set().

http://php.net/manual/en/configuration.changes.php

У вас есть error_log в разделе HOST или PATH в php.ini? Это может испортить ini_set ().

Michael W. 04.06.2018 19:19

Какая ОС? /www/wp-content/debug.log кажется мне недопустимым путем. Должно быть что-то вроде /var/www/html/wp-content/debug.log или /var/www/wp-content/debug.log

Alex 04.06.2018 20:36

Alex - Ubuntu Xenial - путь произвольный, но все он принадлежит www-data.

jmhobbs 04.06.2018 20:58

Майкл - У меня есть собственный путь в конфигурации моего пула FPM, php_admin_value[error_log] = /var/log/php_error.log. Я попробую это очистить, спасибо.

jmhobbs 04.06.2018 20:58

@MichaelW. вот и все! Хотите дать ответ, чтобы я мог его принять?

jmhobbs 04.06.2018 22:36

Ключевым моментом здесь было то, что я использовал неизменяемый php_admin_value, а не php_value, который не является неизменным. > Любой тип директивы, установленный с помощью php_admin_value, не может быть переопределен с помощью .htaccess или ini_set (). php.net/manual/en/configuration.changes.php

jmhobbs 04.06.2018 23:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
588
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ini_set () работает глобально, но не все настройки работают

ini_set () работает с глобальными настройками в php.ini. Некоторые серверы настроены так, чтобы значения были установлены в параметрах HOST или PATH. ini_set () не может изменить эти конкретные значения.

Другие вопросы по теме