Программы

Как скрыть все ошибки PHP с помощью.htaccess. Снижение нагрузки на сервер Самостоятельный help report php

Как скрыть все ошибки PHP с помощью.htaccess. Снижение нагрузки на сервер Самостоятельный help report php

Из этой статьи вы узнаете, как настроить авторизацию в Analytics Reporting API версии 4.

Примечание. Цель этих кратких руководств – помочь пользователю выполнить с помощью . Поскольку эти библиотеки постоянно обновляются, информации о последних изменениях здесь может не быть. Если вы не нашли нужные сведения, ознакомьтесь с и .

1. Включите API

Перед началом работы с Analytics Reporting API версии 4 используйте , чтобы создать проект в Google API Console, включить API и зарегистрировать учетные данные.

Создание учетных данных

Примечание. По запросу нажмите Создать новый закрытый ключ . Для параметра Тип ключа выберите значение JSON , а затем сохраните сгенерированный ключ как client_secrets.json . Он понадобится вам позже.
  1. Откройте . При необходимости выберите проект.
  2. Нажмите Создать сервисный аккаунт .
  3. Укажите название аккаунта и выберите Создать новый закрытый ключ . Затем нажмите кнопку Сохранить .

Система создаст новую пару ключей (открытый и закрытый), которая будет сохранена на ваш компьютер. Эта копия является единственной, и вы должны самостоятельно обеспечивать ее сохранность .

Добавьте в Google Аналитику сервисный аккаунт

У нового сервисного аккаунта будет адрес электронной почты такого типа:

[email protected]

Используйте этот адрес, чтобы добавить пользователя в представление Google Аналитики, к которому вам нужен доступ через API. Для выполнения задач, описанных в этом руководстве, потребуется только разрешение на чтение и анализ .

2. Установите клиентскую библиотеку

composer require google/apiclient:^2.0

3. Настройте пример

Вам нужно создать файл HelloAnalytics.php с кодом этого примера.

  • Скопируйте или исходный код ниже, а затем добавьте его в файл HelloAnalytics.php .
  • Перенесите загруженный ключ service-account-credentials.json в тот каталог, где находится код примера.
  • Измените значение VIEW_ID . Чтобы найти этот параметр, воспользуйтесь инструментом Account Explorer .

HelloAnalytics.php

setApplicationName("Hello Analytics Reporting"); $client->setAuthConfig($KEY_FILE_LOCATION); $client->setScopes(["https://www.googleapis.com/auth/analytics.readonly"]); $analytics = new Google_Service_AnalyticsReporting($client); return $analytics; } /** * Queries the Analytics Reporting API V4. * * @param service An authorized Analytics Reporting API V4 service object. * @return The Analytics Reporting API V4 response. */ function getReport($analytics) { // Replace with your view ID, for example XXXX. $VIEW_ID = ""; // Create the DateRange object. $dateRange = new Google_Service_AnalyticsReporting_DateRange(); $dateRange->setStartDate("7daysAgo"); $dateRange->setEndDate("today"); // Create the Metrics object. $sessions = new Google_Service_AnalyticsReporting_Metric(); $sessions->setExpression("ga:sessions"); $sessions->setAlias("sessions"); // Create the ReportRequest object. $request = new Google_Service_AnalyticsReporting_ReportRequest(); $request->setViewId($VIEW_ID); $request->setDateRanges($dateRange); $request->setMetrics(array($sessions)); $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); $body->setReportRequests(array($request)); return $analytics->reports->batchGet($body); } /** * Parses and prints the Analytics Reporting API V4 response. * * @param An Analytics Reporting API V4 response. */ function printResults($reports) { for ($reportIndex = 0; $reportIndex < count($reports); $reportIndex++) { $report = $reports[ $reportIndex ]; $header = $report->getColumnHeader(); $dimensionHeaders = $header->getDimensions(); $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries(); $rows = $report->getData()->getRows(); for ($rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { $row = $rows[ $rowIndex ]; $dimensions = $row->getDimensions(); $metrics = $row->getMetrics(); for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) { print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n"); } for ($j = 0; $j < count($metrics); $j++) { $values = $metrics[$j]->getValues(); for ($k = 0; $k < count($values); $k++) { $entry = $metricHeaders[$k]; print($entry->getName() . ": " . $values[$k] . "\n"); } } } } }

4. Запустите пример

Запустите пример, используя следующий код:

Php HelloAnalytics.php

Когда вы выполните все шаги, на экране появится количество сеансов в выбранном представлении за последние семь дней.

Примечание. Для успешного выполнения примера вам понадобится как минимум один ресурс и одно представление Google Аналитики.
1. Убедитесь, что вы видите сообщения об ошибках, если они возникают.
Для этого надо добавить в начало скрипта 2 строчки
ini_set ("display_errors" , 1 );
error_reporting (E_ALL );

Хотя в некоторых случаях это всё равно не поможет. Тогда смотрите ошибки в логах веб-сервера.
Ещё можно добавить в файл.htaccess строчку
php_flag display_errors 1
Обязательно убрать всех собак (@) из кода!
Если апач выдаёт ошибку 500 - значит надо смотреть текст ошибки в логе ошибок веб-сервера.

2. Если возникают проблемы с функциями MySQL (например "supplied argument is not a valid MySQL result resource") - это значит, что mysql_query() выполнилась с ошибкой. Чтобы всегда быть в курсе таких ошибок, функцию mysql_query надо вызывать так:

$sql = "SELECT * FROM table" ;
$res = mysql_query ($sql ) or trigger_error (mysql_error (). " in " . $sql );

Если используется mysqli, то перед коннектом написать 1 строчку:
mysqli_report (MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );

3. При работе с изображениями , чтобы увидеть сообщение об ошибке, обязательно надо догадаться отключить вывод заголовка, говорящего браузеру, что дальше идет картинка.
И, естественно, обращаться к скрипту напрямую, а не через тег !

4. При проблемах в аплоаде в первую очередь смотрите массив $_FILES (print_r ($_FILES ); ). Описания ошибок из $_FILES["filename"]["error"] есть в мануале .

6. Закомментируйте строчку с header("Location:"), если ищете обшибку в обработчике POST запроса

7. При отладке AJAX запросов смотрите ответ сервера в FireBug-e и его аналогах (кнопка F12 в любом браузере), вкладка Network - Preview.

8. И САМОЕ ВАЖНОЕ: запуская скрипт, смотрите не то, что показывает браузер, а ИСХОДНЫЙ HTML код! .

Получив сообщение об ошибке, вы можете его прочитать и исправить.
Если не справились - пишите на форум. При этом КОПИРУЙТЕ сообщение об ошибке, и КОПИРУЙТЕ небольшой - 3-5 строк - кусок кода, на который указывает ошибка. Повторяю - КОПИРУЙТЕ! никакой отсебятины!

Если вы всё равно не нашли ошибку - читайте дальше:

Запомните - на пхп вы работаете только со СТРОКАМИ! HTML страница, которую вы создаёте скриптом - это для пхп всего лишь набор строк! Ему без разницы, что в этом наборе - теги img, script или frame. Пхп за вас не сделает переводы строк, не нарисует яваскрипт. Если вы не знаете яваскрипта - то не пытайтесь создавать программу на нём с помощью PHP.
Открывая соединение с удалённым хостом, вы посылаете строку в сокет, вы получаете строку из сокета. Пхп ничего не понимает в этих строках и за вас диалог вести не будет! Это ВЫ должны чётко понимать, что вы хотите послать в сокет, и что получить! Поэтому возьмите программу telnet, соединитесь с нужным хостом и пробуйте сначала САМИ сделать то, что хотите заставить сделать пхп.
Если у вас не работает скрипт с сокетами - бегом в телнет смотреть, что происходит!
SQL запрос - это СТРОКА. Вы должны себе чётко представлять, какой запрос получится в результате вашего хитроумного пхп-кода! Сервер БД не понимает конструкций intval, date, mktime и так далее! Это всё пхп-код. Результатом которого будет являться строка корректного SQL запроса. прежде, чем писать пхп код, вы должны ЧЁТКО СЕБЕ ПРЕДСТАВЛЯТЬ, КАК ДОЛЖЕН ВЫГЛЯДЕТЬ SQL ЗАПРОС В РЕЗУЛЬТАТЕ!
Если у вас не выполняется SQL запрос 0 выводите его на экран и смотрите - что нагородили своим скриптом!

Заключение.
Отладка - главное занятие программиста.
Отладка - единственный и самый мощный способ найти ошибку в программе.
Отладка состоит из двух основных компонентов:
1. Максимально упрощать пример. Если у вас не работает программа, которая рисует форму,получает данные, записывает данные формы в базу и выводит их снова, то разбейте программу на составляющие и выполняйте по очереди.
Если у вас не работает сложная подпрограмма определения работоспособности кук - напишите сначала тест в две строчки чтобы убедиться, что вы хотя бы можете выставлять и читать куку.
2. Вывод отладочной информации.
Проверяйте значение КАЖДОЙ переменной! Каждого значения, возвращаемого функцией!
Не работает локейшен? Выведите его на экран и скопируйте в браузер!
В файл записывается пустая строка? проверяйте составляющие этой строки на каждом этапе ее создания и выводите на экран!
Убедились, что на экран выводится? Тренируйтесь писать в файл, на тестовой строке! Забитой прямо в скрипт! Уменьшайте количество неизвестных!
И всегда смотрите не то, что показывает браузер, а ИСХОДНЫЙ HTML код!

Надеюсь, что я смог хотя бы немного объяснить принципы этого занятия.
Удачной отладки.

Коэффициент допустимой нагрузки на сервер - один из параметров SaaS-аккаунтов. Для каждого тарифного плана установлены свои параметры нагрузки. С текущей нагрузкой аккаунта Вы всегда можете ознакомиться в личном кабинете CRM системы.

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

Основные параметры, влияющие на нагрузку:

  • Количество пользователей в системе работающих одновременно;
  • Количество записей в таблицах программы;
  • Количество правил и групп доступа;
  • Количество напоминаний, цветовых форматирований, фильтров и т.д.;
  • Количество вычислений и их сложность;
  • Количество заданий, выполняемых в фоновом режиме (через систему Cron);
  • Количество запущенных рассылок (электронной почты и СМС);
  • Количество отчетов;
  • Объем лога программы.

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

Все меры по снижению нагрузки можно разделить на две части: для администраторов и для разработчиков. Эти меры также могут снизить нагрузку на сервер при использовании web-версии программы.

Инструкции для администраторов

Начало оптимизации

Самое первое действие, которое Вы должны сделать - убедиться, что у Вас используется последняя версия программы. Убедиться в этом можно, перейдя в "Настройки" - "Дополнительно" - "Обновление ревизии". Если Вы используете самую последнюю версию и ревизию программы, Вы увидите соответствующее сообщение

Если же Вы используете старую версию или ревизию, то программа предложит Вам обновиться.

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

Общие настройки программы

Перейдите в "Настройки" - "Дополнительно" - "Общие настройки". Здесь стоит обратить внимание на два пункта.

Интуитивный поиск - Вы можете отключить эту опцию, если Вам не нужен поиск по транслитерации значения.

Режим скролла окна - Подробнее о режимах скролла окна Вы можете прочитать в нашей документации . Желательно указать у данной настройки значение "Простой".

Настройки Cron

Перейдите в "Настройки" - "Дополнительно" - "Настройки Cron". В настройках Cron можно управлять задачами, выполняющимися автоматически в фоновом режиме. Например, синронизацией, отправкой писем и СМС. Снизить нагрузку за счет этой настройки можно двумя способами.

1. Запретить выполнение заданий, которые Вы в своей программе не используете. Сделать это можно, открыв нужное задание и поставив галочку "Запретить выполнение".

Например, если Вы не пользуетесь функцией синхронизации, то откройте соответствующее задание и поставьте галочку "Запретить выполнение" в его настройках. Если Вы не пользуетесь функцией отправки СМС - можно запретить выполнение заданий "Формирование СМС", "Отправка СМС", "Проверка статуса доставки СМС".

2. Изменить периодичность выполнения заданий. Сделать это можно, зайдя в настройки задания и изменив значение в поле "Период". Например, в задании "Отправка писем" можно указать вместо ежеминутного выполнения, выполнение задания раз в 5 минут.

Настройка условий выполнения вычислений

В CRM программе для автоматического заполнения некоторых полей используются вычисления. Но иногда условия их выполнения неоптимальны. Например, нагрузку вызывает условие "Отображения поля" в настройке вычисления. Следует избегать его использования.

Например, если у нас есть вычисление, по которому в поле А вносится сумма полей Б и В, то желательно использовать условия "Изменение поля Б" и "Изменение поля В". Если у нас есть вычисление, которое заносит в поле А значение из другой таблицы из поля Б, в зависимости от значения в поле связи В, то логично, что можно использовать только условие "Изменение поля В" и "Сохранение в таблице".

Настройка и архивирование логов

Перейдите в "Настройки" - "Логи" - "Настройка лога". В настройках лога, без необходимости не стоит включать логирование просмотра пользователем таблиц, представлений и записей. Это может как увеличить нагрузку на сервер, так и привезти к тому, что файл с логами будет слишком большим. Также здесь стоит включить опцию "Производить ежемесячное архивирование лога", что позволит ежемесячно автоматически уменьшать размер таблицы с логами

Также здесь можно автоматически заархивировать логи, если ранее не было включено автоматическое архивирование. Сделать это можно во вкладке "Архив".

Настройка фильтров

Если открыть настройки любого фильтра, то в них можно увидеть опцию "Отображать в скобках число записей". Желательно снять эту галочку, т.к. эта опцию может вызывать нагрузку при каждом открытии таблицы. И чем больше таких фильтров в таблице - тем больше нагрузка при открытии.

Инструкция для разработчиков

Работа с таблицей perfomance_stat

Важно: Внесение изменений в таблицы базы данных может привести к неработоспособности программы. Не стоит вносить изменения в таблицы базы данных без крайней необходимости.

Войдите в ваш аккаунт, и откройте адрес https://*адрес вашего аккаунта*/edit_sql.php (где вместо *адрес вашего аккаунта* укажите соответствующее значение). В открывшемся окне заходим в таблицу базы данных, содержащую название Вашего аккаунта (например, c_myaccount). В открывшемся перечне таблиц базы откройте таблицу f_performance_stat

В данной таблице ведется учет всех скриптов программы за последний час. Для начала, вам стоит отсортировать все скрипты в этой таблице по количеству sql-запросов (от большего к меньшему). Для этого, дважды нажмите на заголовок "sql_count".

После того, как данные отсортированы, можно начать проводить анализ данных. При проведении анализа Вам стоит обратить внимание на два столбика

1. script - указывает на название скрипта, выдающего нагрузку

2. get_data - дает более подробную информацию о скрипте, либо содержит ссылку на таблицу/задачу, в которой возникает нагрузка.

Для удобства анализа, используйте таблицу, приведенную ниже:

Значение в поле "script" Пример значения в поле "get_data" Описание Действия для снижения нагрузки
cron.php ...&task_id=1 Строка такого вида означает, что нагрузку дает одно из заданий в Cron
Необходимо перейти в "Настройки Cron" и открыть задание, вызывающее нагрузку (ID задания указано в поле "get_data"). Стоит либо оптимизировать код задания, либо уменьшить его периодичность. О настройках Cron .
view_line2.php table=42&line=1&filter=48&page=1 Строка такого вида означает, что нагрузку дает одно или несколько вычислений в определенной таблице при просмотре записи
fields.php table=42&filter=48 Строка такого вида означает, что нагрузку дает одно или несколько вычислений в определенной таблице при просмотре таблицы Необходимо перейти в настройки вычислений таблицы, указанной в поле "get_data" (в примере, это таблица с ID 42). Для начала, стоит посмотреть и оптимизировать условия выполнения вычислений в указанной таблице. Если этого не помогло, стоит оптимизировать сам код вычислений.
report.php id=30 Строка такого вида означает, что нагрузку дает один из отчетов программы
Необходимо оптимизировать код отчета, указанного в поле "get_data" (в примере, это отчет с ID 30).
20.6K

PHP — это встраиваемый серверный язык программирования. Большая часть его синтаксиса заимствована из C , Java и Perl . А также добавлена пара уникальных характерных только для PHP функций . Основная цель этого языка — создание динамически генерируемых PHP HTML страниц .

PHP в HTML

При создании сложных веб-страниц вы столкнетесь с необходимостью объединить PHP и HTML для реализации конкретных задач. На первый взгляд это может показаться сложным, так как PHP и HTML являются двумя независимыми дисциплинами, но это не так. PHP предназначен для взаимодействия с HTML , и его код может быть включен в разметку страницы.

В HTML-страницы PHP-код включается с помощью специальных тегов. Когда пользователь открывает страницу, сервер обрабатывает PHP-код , а затем отправляет результат обработки (не сам PHP-код ) в браузер.

HTML и PHP довольно просто объединить. Любая часть PHP-скрипта за пределами тегов игнорируется PHP-компилятором и передается непосредственно в браузер. Если посмотреть на пример, приведенный ниже, то можно увидеть, что полный PHP-скрипт может выглядеть следующим образом:

Привет, сегодня .

Приведенный выше код — это обычный HTML с небольшим фрагментом PHP , который выводит текущую дату, используя встроенную функцию date . При этом весь HTML будет игнорироваться PHP-компилятором и передаваться в браузер без изменений.

Интегрировать PHP в HTML действительно очень легко. Помните, что скрипт — это HTML-страница с включением определенного PHP кода . Можно создать скрипт, который будет содержать только HTML (без тегов ), и он будет нормально работать.

Более продвинутые методы:

  • Menu Item

и результат:

PHP в HTML с помощью short_open_tag

Если нужно максимально сократить код, перед тем, как в PHP вставить HTML , вы можете использовать short_tags . В результате не нужно будет вводить short_tags » с «Off » на «On «. Хотя на большинстве серверов этот параметр уже включен, всегда лучше проверить это вручную. Проблема, которая может возникнуть при использовании коротких тегов — это конфликт при использовании XML . В XML синтаксическое выражение

PHP в HTML с помощью short__tag

Hello, today is .

Имейте в виду, что если нужно создать сайт, совместимый с максимальным количеством платформ, при вставке PHP в HTML не стоит полагаться на short_tags .

HTML в PHP с использованием echo

Еще один способ интеграции HTML в PHP-файл — команда echo: .

Это повлияет на подсветку разметки в большинстве редакторов. Поэтому необходимо выделять все двойные кавычки внутри HTML-кода с помощью обратной косой черты.

PHP в HTML — расширения файлов

Для стандартно настроенного веб-сервера :

AddHandler cgi-script .html .htm

Для веб-сервера с запущенным FastCGI :

AddHandler fcgid-script .html .htm

HTML в PHP

Также можно использовать HTML-код в PHP-скриптах . Все, что нужно сделать, это при открытии страницы с помощью PHP изменить порядок открывающихся тегов HTML и PHP .

В этом уроке мы научимся такой вещи как сокрытие ошибок PHP. Попутно мы также разберём, как не просто подавлять вывод этих ошибок, но и как записывать их в файл журнала, как защитить этот файл журнала, как настроить уровень сообщения об ошибках PHP (насколько серьёзные ошибки показывать, показывать ли предупреждения), научимся устанавливать максимальный размер строки ошибки и отключим запись повторяющихся ошибок.

Нужно ли прятать PHP ошибки

PHP ошибки выдают самую разнообразную информацию, которая позволяет нападающим собрать данные о вашем сайте и вашем сервере. Но если бы на этот вопрос был однозначный ответ «да», то всё решалось бы добавлением в каждый файл с программами PHP одной единственной строки

Error_reporting(0);

На самом деле, все ошибки, в том числе и предупреждения (некритические ошибки) нужно выводить на стадии тестирования. Вывод ошибок и предупреждения также поможет разобраться в имеющихся (или возможных) проблемах в рабочем окружении. Не стоит подавлять вывод ошибок и предупреждений в программах, предназначенных для свободного распространения, поскольку при возникновении проблем все репорты пользователей о проблемах будут одинаковыми: «там белый экран», что сильно затруднит попытки разобраться.

В общем, на серверах, предназначенных для разработки (например, на домашнем сервере), не нужно убирать ошибки и предупреждения PHP методами error_reporting(0) ; и @ – нужно изучить их причины и исправлять исходный код.

На рабочих серверах крайне рекомендуется не показывать всем ошибки, которые возникли в PHP коде, но рекомендуется не просто подавлять их показ, но ещё и вести их лог, записывать для системного администратора и для программиста на PHP — из этих логов они получат важную информацию о возможных проблемах на сайте/сервере.

Как включить журналирование ошибок PHP посредством.htaccess

В этой части урока я покажу пользователям Apache как подавить вывод ошибок PHP и скрыть их от посетителей, при этом будет включена запись PHP ошибок для их дальнейшего анализа, вся эта настройка будет осуществлена через файл.htaccess.

Вообще, этот способ обладает ещё одним замечательным плюсом — вместо того, чтобы пытаться переловить все PHP ошибки и предупреждения, мы каждое из них будем записывать в наш личный лог, благодаря этому не ускользнёт ни одна возникшая ошибка, даже если она возникла не у вас, а у кого-то посетителя вашего сайта при условиях которые, может быть, вам бы даже и в голову не пришли для моделирования. Благодаря есть простой способ реализовать эту эффективную стратегию.

Прячем PHP ошибки от посетителей

Есть разные способы подавить ошибки PHP посредством.htaccess. Это можно сделать включением следующих директив.htaccess в файл вашего домена httpd.conf или в корневую (или любую другую целевую директорию) файла.htaccess со следующим содержимым:

# подавить ошибки php php_flag display_startup_errors off php_flag display_errors off php_flag html_errors off php_value docref_root 0 php_value docref_ext 0

Это приведёт к тому, что PHP ошибки больше не будут публичными на вашем сайте. Это исключает потенциальные риски безопасности, и не даёт этим уродским, непонятным PHP ошибках поломать вёрстку вашего сайта и дезориентировать ваших посетителей. Редактирования кода для этого не требуется.

Включение личного журнала PHP ошибок

Теперь, когда мы спрятали PHP ошибки от общественности, давайте включим их журналирование (запись), чтобы мы могли их отследить. Это делается добавлением следующих директив.htaccess к файлу вашего домена httpd.conf или в ваш файл.htaccess, который размещён в корневой (или любой целевой) директории.

# включение записи PHP ошибок php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log

Чтобы это заработало, вам нужно отредактировать путь в последней строчке в соответствии с действительным расположением вашего файла PHP_errors.log. Конечно, вместе с этим вам нужно создать этот файл и дать ему разрешения 755 или, если необходимо, 777. Наконец, вам нужно обезопасить этот файл журнала, добавив эти завершающие строки кода в ваш файл.htaccess:

# предотвращаем доступ к логу PHP ошибок

Теперь, когда всё на месте, проверьте, что всё работает как следует, вызовите несколько ошибок PHP. Вы также, возможно, захотите проверить защиту вашего файла журнала, попробовав получить к нему доступ через браузер.

Продвинутая обработка ошибок PHP с помощью.htaccess

Давайте теперь глубже окунёмся в эту тему, добавим дополнительной функциональности и исследуем различные реализации. В первую очередь мы исследуем работу с ошибками PHP для рабочего окружения (например, для веб-сайтов и приложений, которые находятся онлайн, активны и являются публичными), затем мы рассмотрим работу с ошибками для окружения разработчика (например, для проектов под разработкой, тестирования, частных, т. д.).

Контролирование уровня сообщения ошибок PHP

Используя.htaccess возможно настроить уровень сообщения ошибок, который подходит под ваши практические нужды. Общий форт для контролирования уровня ошибок PHP следующий:

# общий вид директивы для настройки уровня ошибок php php_value error_reporting цифра

Есть несколько распространённых значений, которые можно подставить вместо «цифра», в том числе:

  • Самое полное сообщение об ошибках (соответствует E_ALL) — для этого используйте значение «32767».
  • Полное сообщение об ошибках — для полной записи ошибок PHP используйте величину «8191», которая включит запись всего, кроме уведомлений времени выполнения об использовании устаревших конструкций (предупреждения о коде, который не будет работать в следующих версиях PHP).
  • Сообщение об ошибках Zend — для записи как фатальных, так и не фатальных предупреждениях времени компиляции, генерируемых скриптовым движком Zend, используйте «192».
  • Сообщение о базовых ошибках — записывать уведомления времени выполнения. Указывают на то, что во время выполнения скрипта произошло что-то, что может указывать на ошибку, хотя это может происходить и при обычном выполнении программы. Для этого используйте цифру «8».
  • Минимальное сообщение об ошибках — записывать только фатальные ошибки времени выполнения. Это неустранимые средствами самого скрипта ошибки, такие как ошибка распределения памяти и т.п. Выполнение скрипта в таком случае прекращается. Для этого используйте цифру «1».

Конечно можно использовать и другие значения («цифры») для тонкой настройки того, какие именно ошибки вы хотите фиксировать. Некоторые разъяснения по данному вопросу в самом низу.

Настраиваем максимальный размер файла для записей ваших ошибок

Используя.htaccess вы можете определить максимальный размер для ваших ошибок PHP. Имеется ввиду контроль размера каждой записанной ошибки, а не всего файла в целом. Синтаксис имеет следующий вид:

# генеральная директива для настройки максимального размера ошибки log_errors_max_len целове_число

Здесь «целове_число» представляет максимальный размер каждой записанной строки ошибки в байтах. По умолчанию значение равно «1024» (т. е. 1 килобайт). Чтобы удалить этот лимит можно установить значение «0». Помните, .что это значение также применяется для отображаемых ошибок, когда они включены (например, во время разработки).

Отключение записи повторяющихся ошибок

Если вы уже успели поработать с журналом ошибок, вы могли обратить внимание, что в нём множество похожих записей, которые различаются только временем события. От этой избыточности можно избавиться, просто добавьте в файл htaccess эти строки:

# отключаем запись повторяющихся ошибок php_flag ignore_repeated_errors on php_flag ignore_repeated_source on

При таких настройках повторяющиеся ошибки не будут записываться в ружнал, даже если они случились в различных источниках или адресах. Если вы хотите отключить повторяющиеся ошибки только из одного источника или файла, просто закомментируйте или удалите последнюю строку. И наоборот, чтобы убедиться, что ваш файл журнала событий включает все повторяющиеся ошибки, измените обе величины с on на off .

Собираем всё вместе — рабочее окружение

Обсудив особенности настройки записи ошибок PHP, давайте соберём все наши записи в один файл.htaccess. Данные настройки оптимизированы для рабочего окружения.

# обработка ошибок PHP для рабочего сервера php_flag display_startup_errors off php_flag display_errors off php_flag html_errors off php_flag log_errors on php_flag ignore_repeated_errors off php_flag ignore_repeated_source off php_flag report_memleaks on php_flag track_errors on php_value docref_root 0 php_value docref_ext 0 php_value error_log /home/path/public_html/domain/PHP_errors.log php_value error_reporting -1 php_value log_errors_max_len 0 Order allow,deny Deny from all Satisfy All

Если вы считаете хорошим стилем код с пояснениями, то этот же код, но с комментариями:

# обработка ошибок PHP для рабочего сервера # отключение отображения ошибок запуска php_flag display_startup_errors off # отключить отображение всех других ошибок php_flag display_errors off # отключить ошибки html разметки php_flag html_errors off # включить запись ошибок php_flag log_errors on # включить игнорирование повторяющихся ошибок php_flag ignore_repeated_errors off # отключить игнорирование ошибок из уникальных источников php_flag ignore_repeated_source off # включить запись утечек памяти php php_flag report_memleaks on # сохранять большинство последних ошибок через php_errormsg php_flag track_errors on # отключить форматирование справочных ссылок на ошибки php_value docref_root 0 # отключить форматирование справочных ссылок на ошибки php_value docref_ext 0 # указание пути до файла лога ошибок php php_value error_log /home/path/public_html/domain/PHP_errors.log # указать запись всех ошибок php php_value error_reporting -1 # отключить максимальную длину строки ошибки php_value log_errors_max_len 0 # защитить файл журнала ошибок от публичного доступа Order allow,deny Deny from all Satisfy All

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

Собираем всё вместе — окружение разработки

Разрабатывая или отлаживая программу, удобнее отслеживать возникающие PHP ошибки в режиме реального времени, прямо в браузере. Пример.htaccess с соответствующими настройками под окружение разработки приведён ниже:

# работа с ошибками PHP для серверов разработчиков php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on php_flag log_errors on php_flag ignore_repeated_errors off php_flag ignore_repeated_source off php_flag report_memleaks on php_flag track_errors on php_value docref_root 0 php_value docref_ext 0 php_value error_log /home/path/public_html/domain/PHP_errors.log php_value error_reporting -1 php_value log_errors_max_len 0 Order allow,deny Deny from all Satisfy All

Не будем объяснять каждую строку — вы можете посмотреть соответствующие разъяснения чуть повыше.

Подсказки

Чтобы узнать абсолютный путь до лог файла на сервере методами PHP (для директивы php_value error_log)

echo dirname(__FILE__);

Пример.htaccess для .

php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on php_flag log_errors on php_flag ignore_repeated_errors off php_flag ignore_repeated_source off php_flag report_memleaks on php_flag track_errors on php_value docref_root 0 php_value docref_ext 0 php_value error_log C:ServerdatahtdocsPHP_errors.log php_value error_reporting -1 php_value log_errors_max_len 0 Order allow,deny Deny from all Satisfy All

Не работает

Этот способ не применим на хостингах, где PHP работает как CGI (возможные пути решения будут показаны в следующей статье).

-1 и ~0 для отображения всех ошибок PHP

В директиве php_value error_reporting для отображения всех ошибок можно указать -1 или ~0 . Т.е. строки выглядят так:

Php_value error_reporting -1 php_value error_reporting ~0

Причём более правильным считается именно второй способ, т. е. с использованием ~0 .

Предопределенные константы и побитовые операции error_reporting

  • Предопределенные константы
  • Побитовые операторы

Например, если мы хотим записывать ТОЛЬКО следующие ошибки E_ERROR (значение 1), E_WARNING (значение 2), E_CORE_ERROR (значение 16), то для получения соответствующейо числовой величины следовало бы перевести эти величины в двоичные числа и произвести соответствующие побитовые операции, а потом полученное двоичное число перевести в десятеричное. Тем не менее, эту операцию можно упростить — достаточно сложить значения десятеричных чисел. Т.е. в нашем случае это 1+2+16=19

Php_value error_reporting 19

будет отображать ошибки E_ERROR, E_WARNING и E_CORE_ERROR.

Пример абсолютного пути до лог файла на хостинге Hostland (для директивы php_value error_log)

/home/host900456/сайт/blogs/htdocs/www/PHP_errors.log

Вместо host900456 нужно указать ваш аккаунт.

Вместо сайт нужно указать ваш домен.

Кстати, хороший хостинг , на котором работает этот самый сайт. Рекомендуем!