Мне не нужны ошибки PHP
для отображения /html, но я хочу, чтобы они отображались в /html/beta/usercomponent
. Все настроено так, что ошибки вообще не отображаются. Как я могу получить ошибки только для отображения в одной папке (и ее подпапках)?
Как включить отображение ошибок PHP только в подпапке
Ответ 1
В .htaccess
:
php_value error_reporting 2147483647
Этот номер, согласно документации, должен включать ошибки "все" независимо от версии, если вы хотите более подробный параметр, вручную или значения вместе или запустите
php -r 'echo E_ALL | E_STRICT ;'
чтобы php вычислил значение для вас.
Вам нужно
AllowOverride All
в главной конфигурации apaches, чтобы включить файлы .htaccess.
Подробнее Чтение этого можно найти здесь:
Примечание Если вы используете Php-CGI вместо mod_php, это может работать не так, как было объявлено, и все, что вы получите, является внутренней ошибкой сервера, и вы останетесь без особого выбора, кроме позволяя ему либо общесистемно на основе script с
error_reporting( E_ALL | E_STRICT );
или аналогичные конструкции до возникновения ошибки.
Мой совет - отключить отображение ошибок пользователю и использование функции php error_log.
display_errors = 0
error_logging = E_ALL | E_STRICT
error_log = /var/log/php
Если у вас есть проблемы с слишком сильным шумом, это не признак того, что вам нужно просто отбирать отчет об ошибках выборочно, это знак, который должен исправить код.
@Roger
Да, вы можете использовать его в конструкторе <
в конфигурации apaches тоже, однако .htaccess в этом случае эквивалентен и делает его более переносимым, особенно если у вас несколько копий рабочей копии одной и той же кодовой базы, и вы хотите распространить это изменение на все из них. Directory >
Если у вас несколько виртуальных хостов, вы захотите построить конструкцию в соответствующем определении виртуальных хостов, иначе yes
<Directory /path/to/wherever/on/filesystem>
<IfModule mod_php5.c>
php_value error_reporting 214748364
</IfModule>
</Directory>
Дополнительные команды "ifmodule" - это просто защитная сетка, поэтому вышеуказанная проблема с угасанием apache, если у вас нет mod_php, не будет.
Ответ 2
Самый простой способ - управлять сообщением об ошибках из файла .htaccess. Но предполагается, что вы используете Apache, и скрипты из /html/beta/usercomponent вызываются из этого каталога и не включаются из других источников.
.htacess
php_value error_reporting [int]
Вам нужно будет составить целочисленное значение из списка, как описано в документации error_reporting, поскольку константы, такие как E_ERROR, не являются определяется, когда Apache интерпретирует .htaccess.
Это простой побитовый флаг, поэтому значение 12, например, будет E_WARNING + E_PARSE + E_NOTICE.
Ответ 3
вы можете сделать это, используя переменную среды. таким образом, у вас может быть больше вариантов, чем просто включение/отключение отчетов об ошибках для специального каталога. в вашем коде, где бы вы ни захотели изменить какое-либо поведение для определенного набора режимов или режимов работы, проверьте, установлена ли переменная среды или нет. например:
if ($_ENV['MY_PHP_APP_MODE'] == 'devel') {
// show errors and debugging info
} elseif ($_ENV['MY_PHP_APP_MODE'] == 'production') {
// show some cool message to the user so he won't freak out
// log the errors and send email to the admin
}
и когда вы запускаете приложение в своей среде разработки, вы можете установить переменную env в файле .htaccess следующим образом:
setenv MY_PHP_APP_MODE devel
или когда вы находитесь в производстве evn:
setenv MY_PHP_APP_MODE production
тот же метод применяется к вашей ситуации. в каталогах, где вы хотите сделать что-то особенное (включите отчет об ошибках), установите некоторую переменную env и в свой код, проверьте это.
Ответ 4
Я не верю, что есть простой ответ на этот, но я, конечно, хочу, чтобы меня доказали неправильно.
edit: получается, что это можно контролировать из файлов .htaccess. Спасибо людям!:)
Вы можете использовать error_reporting() http://docs.php.net/manual/en/function.error-reporting.php, чтобы переключить настройку на основе script на script. Если у вас есть один script, который включается каждый раз в /html/beta/usercomponent, это будет делать трюк.