Как записать вывод браузера в файл журнала, используя PHP? - PullRequest
2 голосов
/ 18 января 2012

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

Ответы [ 5 ]

4 голосов
/ 18 января 2012

Вы можете использовать выходные буферы для записи вывода браузера в файл журнала,

Пример:

<?php
ob_start();

echo 'Lorem ipsum dolor sit amet consectetur adipiscing elit';
echo 'Cras in dolor fringilla est fermentum porttito';
echo 'bla bla bla...';
echo 'bla bla bla...';

file_put_contents('/path/to/log.txt',ob_get_contents());
ob_end_flush();
?>
3 голосов
/ 18 января 2012

Я предпочитаю делать это перенаправление вывода с использованием функций bash:

php myscript.php > logfile.log

Но вы должны знать, что PHP выводит ошибки на stderr. Итак, вам нужно перенаправить stderr тоже. Здесь все описано: http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/. Некоторые примеры по этой странице:

php myscript.php &>file

или

php myscript.php > file-name 2>&1

Кроме того, вы не можете использовать output control functions, как ob_start() и только друзей, потому что некоторая фатальная ошибка может прервать буферизацию вывода. Итак, если вы предпочитаете только PHP, вам нужно определить:

  1. Буферизация вывода
  2. Обработчик ошибок (или вы можете получать ошибки, используя буферизацию вывода)
  3. Функция отключения - для получения фатальных ошибок

P.S. Обычно вывод задания cron записывается в журнал crontab

2 голосов
/ 19 января 2012

Я использую этот скрипт для журналов ошибок:

// Destinations
define("ADMIN_EMAIL", "nobody@stanford.edu");
define("LOG_FILE", "/my/home/errors.log");

// Destination types
define("DEST_EMAIL", "1");
define("DEST_LOGFILE", "3");

/**
  * my_error_handler($errno, $errstr, $errfile, $errline)
  *
  * Author(s): thanosb, ddonahue
  * Date: May 11, 2008
  * 
  * custom error handler
  *
  * Parameters:
  *  $errno:   Error level
  *  $errstr:  Error message
  *  $errfile: File in which the error was raised
  *  $errline: Line at which the error occurred
  */

function my_error_handler($errno, $errstr, $errfile, $errline)
{  
  switch ($errno) {
    case E_USER_ERROR:
      // Send an e-mail to the administrator
      error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_EMAIL, ADMIN_EMAIL);

      // Write the error to our log file
      error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_LOGFILE, LOG_FILE);
      break;

    case E_USER_WARNING:
      // Write the error to our log file
      error_log("Warning: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE);
      break;

    case E_USER_NOTICE:
      // Write the error to our log file
      error_log("Notice: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE);
      break;

    default:
      // Write the error to our log file
      error_log("Unknown error [#$errno]: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE);
      break;
  }

  // Don't execute PHP's internal error handler
  return TRUE;
}


// Use set_error_handler() to tell PHP to use our method
$old_error_handler = set_error_handler("my_error_handler");

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

1 голос
/ 18 января 2012

Вы можете перенаправить вывод php-скрипта в инструкцию cron, используя перенаправление файла"php yourfile.php> logfile.log", или вы можете использовать php's file_put_contents для сохранения в файл, где бы вы ни назвали print.

0 голосов
/ 18 января 2012
$file = fopen("log.txt", "a");
fwrite ($file, $some_data); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...