Drupal → Ежедневно присылать на почту лог PHP ошибок

15.01.2017

Код раз в день высылает на основную почту список PHP ошибок из watchdog:

/**
 * Implements hook_cron().
 */
function modulename_cron() {
  if (module_exists('dblog') && date('d') != date('d', variable_get('cron_last'))) {
    $last_send = strtotime('-1 day');
    $events = db_query("
      SELECT wid, type, message, variables, timestamp
      FROM {watchdog}
      WHERE type = 'php' AND timestamp >= :last_send
      ORDER BY wid
      LIMIT 100
    ", array(':last_send' => $last_send));

    if ($events->rowCount()) {
      $items = array();
      foreach ($events as $event) {
        $item = ($event->variables == 'N;') ? $event->message : t($event->message, unserialize($event->variables));
        $item = truncate_utf8(filter_xss($item, array()), 100, TRUE, TRUE);
        $item = l($item, 'admin/reports/event/' . $event->wid, array('absolute' => TRUE));
        $items[] = date('d.m.Y H:i:s', $event->timestamp) . ' ' . $item;
      }

      $site_mail = variable_get('site_mail', ini_get('sendmail_from'));
      drupal_mail('system', 'mail', $site_mail, language_default(), array(
        'context' => array(
          'subject' => 'PHP errors ' . date('d.m.Y H:i', $last_send) . ' - ' . date('d.m.Y H:i'),
          'message' => theme('item_list', array('items' => $items)),
        )
      ));
    }
  }
}
Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Замечу, что запрос берет ошибки с последнего запуска cron "вчера" до первого запуска сегодня.
Т.е. если cron работает чаще , чем раз в сутки, то ошибки мы будем получать не все...

А теперь похоже, что он будет слать некоторые ошибки дважды)
Пусть крон запускается в 23:59. Мы получим ошибки за двое суток без одной минуты. Завтра в 23:59 - снова за двое суток :)
Все таки лучше использовать свою переменную, в которой хранить последнее время отправки уведомления

В чем преимущество использования db_query перед db_select? Или просто привычка?

Добавить комментарий