Контроль уровня журнала ошибок PHP: htaccess против php.ini против кода и виртуального хоста - PullRequest
0 голосов
/ 11 мая 2018

У меня есть виртуальный хост на локальном сервере WAMP, где я установил файл журнала.

Я хотел изменить уровень ошибок в моем журнале PHP только на предупреждения и ошибки.

Лучший способ должен быть .htaccess, я пробовал это решение:

Как отключить уведомление и предупреждение в PHP в файле .htaccess?

Не работает (пробовал и других тоже).

В конце перешел к файлу php.ini, однако есть менее гибкие параметры.

1) Каковы приоритеты инструкций ошибки этого уровня? (php.ini против htaccess против кода) Я думаю, что порядок?

2) Почему не работает в .htaccess? Я просто установил его поверх .htaccess, и он не работал.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018
  1. Почему не работает в .htaccess?

Возможность установки флагов PHP в .htaccess зависит от того, как PHP установлен на вашем сервере. PHP должен быть установлен как модуль Apache.

Однако, начиная с PHP 5.3, конфигурационные файлы PHP для каждого каталога поддерживаются в виде .user.ini файлов (обратите внимание на префикс точки). Они принимают ту же форму, что и файлы php.ini, но работают в каждом каталоге в коде пользовательского пространства.

Например:

; All errors and warnings only
error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED
  1. Каковы приоритеты инструкций по ошибкам этого уровня? (php.ini против htaccess против кода) Я думаю, что порядок?

Да, этот заказ (.htaccess или .user.ini). За исключением того, что некоторые настройки могут быть установлены только выше по цепочке, например. в php.ini.

0 голосов
/ 11 мая 2018

Рекомендую использовать переменную среды httpd .

Это может служить флагом для информирования вашего веб-приложения об окружающей среде. Скажем, у вас был продукт с белой этикеткой, там он может быть полезен, например, при настройке конфигурации, которую следует использовать с конкретным vhost.

<VirtualHost *:80>
  DocumentRoot "/srv/www/foo/public"
  ServerName foo.com

  <Directory /srv/www/foo/public>

    # production | development | staging
    SetEnv APPLICATION_ENV development
    ...

И тогда в вашем PHP-коде вы получите к нему доступ:

<?php
define('APPLICATION_ENV_LOCAL', 'local');
define('APPLICATION_ENV_DEVELOPMENT', 'development');
define('APPLICATION_ENV_STAGING', 'staging');
define('APPLICATION_ENV_PRODUCTION', 'production');

$app_env = (getenv('APPLICATION_ENV')) ? getenv('APPLICATION_ENV') : false;
if (empty($app_env) || ! in_array($app_env, array(APPLICATION_ENV_LOCAL, APPLICATION_ENV_DEVELOPMENT, APPLICATION_ENV_STAGING, APPLICATION_ENV_PRODUCTION))) {
    throw new Exception("APPLICATION ENV IS NOT SPECIFIED OR IS INVALID.");
}

То, что я бы сделал, - это совершенно отдельные файлы типа config / INI, которые я включаю в зависимости от среды. Они могут определять поведение сообщений об ошибках, поддерживать различные соединения с базой данных, все остальное зависит от среды приложения.

...