Ежедневно отправлять предупреждения PHP по электронной почте или как? - PullRequest
2 голосов
/ 04 февраля 2010

Я разрабатываю веб-приложение с использованием PHP, которое тестируется некоторыми моими друзьями. Какой подход вы рекомендуете мне использовать, чтобы узнать, какие предупреждения они получают, но не отображая их, используя ini_set('display_errors', 1);?

Кроме того, приложение будет работать в интрасети, к которой у меня не будет удаленного доступа.

Я думал о том, чтобы отправлять мне ежедневные электронные письма с некоторой информацией, но я не знаю, какие важные факты следует сохранить. У вас есть статья / образец для меня? У вас есть лучший совет для меня?

Ответы [ 4 ]

6 голосов
/ 04 февраля 2010
  • Вы можете регистрировать ошибки, не отображая их.

Например, вы можете сделать что-то вроде:

error_reporting(E_ALL | E_STRICT); //For PHP 6 E_STRICT become part of E_ALL
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set('error_log', $_SERVER['DOCUMENT_ROOT'] . '/php.log');

Вы также можете редактировать PHP.ini или делать это с помощью .htaccess (если на Apache).

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

Вы можете использовать PHP mail () , но такая библиотека, как PHPMailer ускорит работу (и будет проще в использовании).

  • У задания CRON (или что-то эквивалентное) запускать электронную почту каждый день (или неделю, или другое).
2 голосов
/ 04 февраля 2010

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

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

Это не собирается поймать ВСЕ, хотя - все E_WARNING будут пойманы, но не все другие типы будут. Например, ошибки синтаксического анализа не могут быть перехвачены таким образом, и если вы можете также обрабатывать исключения, вы должны использовать set_exception_handler .

0 голосов
/ 04 февраля 2010

Мой лучший совет - изучить функцию PHP set_error_handler . Он позволяет точно определить, что происходит при возникновении какой-либо ошибки - отправляете ли вы ее по электронной почте, регистрируете ли вы или все, что вы хотите сделать.

Теперь есть множество замечательных статей о регистрации ошибок в PHP вместо того, чтобы отображать их конечному пользователю. Несколько случайных примеров, которые я нашел с помощью 30-секундного поиска Google: http://davidwalsh.name/custom-error-handling-php http://www.electrictoolbox.com/log-php-errors-log-errors-error-log/ http://www.w3schools.com/php/php_error.asp

Существует множество способов обработки ошибок в PHP. Помимо вышеупомянутого, вы можете полагаться на журналы ошибок PHP по умолчанию (по умолчанию PHP использует журналы ошибок Apache, то есть / var / log / httpd / error_log). Однако вы можете изменить свой php.ini для отправки сообщений в любой файл, который вам нравится. Вы можете проверить этот файл ежедневно, чтобы увидеть, какие ошибки происходят.

Вы также можете настроить скрипт CRONTAB для чтения этого файла один раз в день и отправлять его вам по электронной почте, а затем очищать.

Опять же, я бы предложил set_error_handler как более гибкий вариант.

0 голосов
/ 04 февраля 2010

Я думаю, что это единственная возможность.

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

Но в остальном. Прости.

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