Как записать вывод браузера в файл журнала с помощью PHP?


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

 2
Author: John, 2012-01-18

6 answers

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

// Destinations
define("ADMIN_EMAIL", "[email protected]");
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");

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

 1
Author: Valeh Hajiyev, 2012-01-18 22:32:42

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

Пример:

<?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();
?>
 4
Author: Zulkhaery Basrul, 2012-01-18 08:16:57

Я предпочитаю делать перенаправление вывода с использованием функций 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

 3
Author: Timur, 2012-01-18 08:20:45

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

 1
Author: hackartist, 2012-01-18 08:04:14

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

См. http://php.net/manual/en/function .fwrite.php для примеров того, как это сделать.

 0
Author: DevCoDesign, 2012-01-18 08:05:38
$file = fopen("log.txt", "a");
fwrite ($file, $some_data); 
 0
Author: oyatek, 2012-01-18 08:06:08