error_reporting VS .htaccess - странное поведение...

GoryachkoRA

Новичок
Привет,

PHP запущен как сервис, версия XAMPP (1.7.7) {Apache 2.2.21 + MySQL 5.5.16 + PHP 5.3.8 (VC9 X86 32bit thread safe)}

запускаемый файл index.php намеренно с ошибкой:
PHP:
<?php echo $a; ?>
установки php.ini:
error_reporting = E_ALL
display_errors = off
log_errors = off
log_errors_max_len = 1024
track_errors = on
;error_log = php_err.log 'строка закомментирована
файл .htaccess в корне сайта:
#php_value error_reporting "E_ALL | E_STRICT"
php_flag log_errors on
php_value error_log logs/php_err.log
php_value log_errors_max_len 10240
php_flag display_errors on

Options -Indexes
AddDefaultCharset utf-8
Папка /logs/ присутствует, туда пишутся логи Apache - никаких проблем. Зато PHP странно себя ведет:
если раскомментировать строку #php_value error_reporting "E_ALL | E_STRICT" - перестает выдавать сообщения об ошибке в браузер, не пишет (и не создает, если его нет) файл лога. Стоит поставить коммент перед опцией - все работает, лог пишется, ошибка вываливается. На все остальные флаги - реагирует.

Пробовал ставить просто "E_ALL", пробовал писать без ковычек (тогда выпадает ошибка 500, т.е. значения php_value с пробелами в .htaccess надо в любом случае писать в ковычках!)

Это правильная реакция? Если да - объясните, плиз, почему?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
если раскомментировать строку #php_value error_reporting "E_ALL | E_STRICT" - перестает выдавать сообщения об ошибке в браузер, не пишет (и не создает, если его нет) файл лога. Стоит поставить коммент перед опцией - все работает, лог пишется, ошибка вываливается. На все остальные флаги - реагирует.

Пробовал ставить просто "E_ALL", пробовал писать без ковычек (тогда выпадает ошибка 500, т.е. значения php_value с пробелами в .htaccess надо в любом случае писать в ковычках!)

Это правильная реакция? Если да - объясните, плиз, почему?
Потому что апач понятия не имеет о константах E_ALL, E_STRICT и любых других из пхп. В этом поле нужно указать числовое значение этой константы.
 

GoryachkoRA

Новичок
Вот как... нашел примеров 7 задания этого параметра через .htaccess, но ни в одном не было битовой маски. Всегда словестные значения. Выходит, для моего случая нужно было исправить на php_value error_reporting 32767. И действительно, все заработало.

Спасибо, флоппик!
 

флоппик

promotor fidei
Команда форума
Партнер клуба
http://www.php.net/manual/ru/errorfunc.configuration.php#ini.error-reporting
Замечание: PHP константы за пределами PHP
Использования PHP констант за пределами PHP, например в файле httpd.conf, не имеет смысла, так как в таких случаях требуются целочисленные значения (integer). Более того, с течением времени будут добавляться новые уровни ошибок, а максимальное значение константы E_ALL соответственно будет расти. Поэтому в месте, где предполагается указать E_ALL, лучше задать большое целое число, чтобы перекрыть все возможные битовые поля. Таким числом может быть, например, 2147483647 (оно включит все возможные ошибки, не только E_ALL).
 
Сверху