Как включить отображение ошибок PHP только в подпапке? - PullRequest
16 голосов
/ 20 сентября 2008

Я не хочу, чтобы PHP отображались ошибки / html, но я хочу, чтобы они отображались в /html/beta/usercomponent. Все настроено так, что ошибки вообще не отображаются. Как я могу получить ошибки, которые будут отображаться только в этой папке (и ее подпапках)?

Ответы [ 4 ]

28 голосов
/ 20 сентября 2008

В .htaccess:

php_value error_reporting 2147483647

Это число, согласно документации, должно разрешать ошибки «все» независимо от версии, если вы хотите более детальную настройку, вручную ИЛИ значения вместе или запускать

php -r 'echo E_ALL | E_STRICT ;'

, чтобы позволить php вычислить значение для вас.

Тебе нужно

AllowOverride All

в основной конфигурации apaches для включения файлов .htaccess.

Подробнее об этом можно прочитать здесь:


Уведомление Если вы используете Php-CGI вместо mod_php, это может работать не так, как объявлено, и все, что вы получите, - это внутренняя ошибка сервера, и у вас не останется ничего, кроме включения это либо для всего сайта на основе сценариев с

error_reporting( E_ALL | E_STRICT ); 

или аналогичные конструкции до возникновения ошибки.

Мой совет: отключить отображение ошибок пользователю и активно использовать функцию php error_log.

display_errors = 0
error_logging = E_ALL | E_STRICT 
error_log = /var/log/php 

Если у вас есть проблемы с тем, что это слишком шумно, это не означает, что вам нужно просто выборочно снимать отчеты об ошибках, это знак, что кто-то должен исправить код.


@ Roger

Да, вы можете использовать его в конструкции <<code> Directory> и в конфигурации apache, однако .htaccess в этом случае эквивалентен и делает его более переносимым, особенно если у вас есть несколько рабочих извлекаемых копий одна и та же кодовая база, и вы хотите распространить это изменение на все из них.

Если у вас несколько виртуальных хостов, вам понадобится конструкция в соответствующем определении виртуальных хостов, в противном случае да

  <Directory /path/to/wherever/on/filesystem> 
      <IfModule mod_php5.c>
         php_value error_reporting 214748364
      </IfModule>
  </Directory>

Дополнительные команды "ifmodule" являются просто сетью безопасности, поэтому вышеупомянутая проблема с умирающим apache, если у вас нет mod_php, не возникнет.

4 голосов
/ 20 сентября 2008

вы можете сделать это, используя переменную Environment. таким образом, вы можете иметь больше возможностей, чем просто включать / выключать отчеты об ошибках для специального каталога. в своем коде, где бы вы ни захотели изменить какое-либо поведение для определенного набора каталогов или режимов работы, проверьте, установлена ​​ли переменная среды или нет. как это:

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 голосов
/ 20 сентября 2008

Самый простой способ - управлять отчетами об ошибках из файла .htaccess. Но это при условии, что вы используете Apache, а скрипты в / html / beta / usercomponent вызываются из этого каталога и не включаются откуда-либо еще.

.htacess

php_value error_reporting [int]

Вам необходимо составить целочисленное значение самостоятельно из списка, как описано в документации error_reporting , поскольку такие константы, как E_ERROR, не определяются, когда Apache интерпретирует .htaccess.

Это простой побитовый флаг, поэтому значение 12, например, будет E_WARNING + E_PARSE + E_NOTICE.

0 голосов
/ 20 сентября 2008

Я не верю, что есть простой ответ на этот вопрос , но я бы определенно хотел оказаться неправым.

edit: оказывается, этим можно управлять из файлов .htaccess. Спасибо людям! :)

Вы можете использовать error_reporting () http://docs.php.net/manual/en/function.error-reporting.php, чтобы переключить настройку сценария на основе сценария. Если у вас есть один скрипт, который включается каждый раз в / html / beta / usercomponent, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...