Вопрос: Изменение отчетов об ошибках php, чтобы скрыть предупреждения только для определенного сайта [Debian | Ubuntu]


Представьте себе пару sites-enabled Доступна с /etc/apache2/sites-available, (Только дистрибутивы на основе Debian работают так.)

Можно ли отключить звук warning сообщения из php-скриптов из конкретный сайт, не касаясь htdocs?

Как правило, существует несколько решений для решения следующих задач:

  1. Добавьте error_reporting() директива, например. error_reporting(E_ERROR); для исполняемых скриптов.
  2. Установите php_flags в .htaccess таких файлов: php_flag display_errors off
  3. использование ini_set внутри скриптов:

    ini_set('display_errors', 'Off');
    ini_set('display_startup_errors', 'Off');
    error_reporting(0);
    
  4. Prepend @ к функциям, которые вызывают предупреждения или ошибки.

  5. + Изменить php.ini на самом деле сказать
    error_reporting = E_ALL ^ E_WARNING
    display_errors = 1 

Тем не менее, все это означает касание htdocs или изменение в глобальном масштабе. Представьте себе htdocs устанавливаются только для чтения. Как я могу подавить предупреждения (или уведомления) только для определенных сайтов?

Я предполагаю, что Debian / Ubuntu имеет a2ensite по какой-то причине, и я надеюсь, что смогу их изменить. Eсть log_level директиву в конфигурации «доступный сайт», но это обрабатывает количество зарегистрированных сообщений. Не сообщения, выводимые скриптами php.

Ручное добавление разделов в php.ini или apache2.conf или httpd.conf также будет работать. Если это возможно.

Смотрите также:


5
2018-05-21 13:54


Источник




Ответы:


Если у вас есть доступ к конфигурациям Apache vhost, вы также можете использовать директивы php_flag внутри виртуального хоста в каталоге, доступном для сайтов. Таким образом, они применяются только к этому призму.

Добавьте что-то подобное в свой виртуальный хост:

<IfModule mod_php5.c>
    php_admin_flag display_errors off
</IfModule>

РЕДАКТИРОВАТЬ:

Если вы хотите отобразить только фактические ошибки, вы можете использовать директиву php error_reporting с целочисленным значением, которое описывает типы уровней ошибок, которые вы хотите отобразить:

<IfModule mod_php5.c>
    php_admin_flag display_errors on
    php_admin_value error_reporting 22517
</IfModule>

Это эквивалентно настройке

error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED;

в php.ini. Более возможные значения, например, здесь:

https://web.archive.org/web/20131009000719/http://www.websitefactors.co.uk/php/2013/01/php-error-reporting-settings

Калькулятор калькуляции ошибок:

http://www.bx.com.au/tools/ultimate-php-error-reporting-wizard


10
2018-05-21 15:34



Да, это то, что я ищу. Конфигурация vhost зависит от сайта и внутри /etc/apache2/sites-available, Знаете ли вы какие-либо обман, чтобы изменить это, чтобы на самом деле отображались ошибки, но предупреждений нет? - Redsandro
Я отредактировал свой ответ. - etagenklo
Это [Магазин шоппинга] потрясающий! Принято. - Redsandro


Я добавил :

<IfModule mod_php5.c>
 php_admin_flag display_errors on
 php_admin_value error_reporting 30711
</IfModule>

в / etc / apache2 / sites-enabled / work и все работает отлично.

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


1
2018-02-25 03:50



Не могли бы вы объяснить смысл 30711? Я предполагаю, что это or'ed битмаска констант сообщения об ошибках E_ *. Если это так, это ужасная практика, чтобы написать ее так же, как и вы. - Andrew Schulman


Невозможно сделать это без использования .htaccess или применения конфигурации по всему миру. Apache не может «видеть» файлы вне корневой папки (htdocs), а файлы .htaccess работают только в папке сайта. php_flag также не работает вне .htaccess.

Таким образом, в принципе, это невозможно сделать на сайтах без некоторые модификация или файл .htaccess.


0
2018-05-21 15:04



Фактически, Apache точно знает, на каком сайте мы говорим, потому что мы можем указывать разделы для определенных каталогов в конфигурации. Ответ от etagenklo близок к тому, чтобы делать именно это. :) Просто нужно найти способ изменить его, чтобы он применялся к предупреждениям. - Redsandro