Как записать вывод браузера в файл журнала с помощью PHP?
У меня есть скрипт, который запускается заданиями Cron. Поэтому, пока он работает, я не вижу, каков результат выполнения задачи. (ошибки и так далее.)
Поэтому мне нужно записать вывод браузера в файл журнала с помощью PHP. Как я могу это сделать?
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");
Это дает полный контроль над тем, какие действия следует предпринять при возникновении ошибки.
Взято непосредственно из Вики веб-сервисов Стэнфордского университета
Вы можете использовать буферы вывода для записи выходных данных браузера в файл журнала,
Пример:
<?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();
?>
Я предпочитаю делать перенаправление вывода с использованием функций 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-способ, вам нужно определить:
- Буферизация вывода
- Обработчик ошибок (или вы можете извлекать ошибки с помощью буферизации вывода)
- Функция выключения - для извлечения фатальных ошибок
P.S. Обычно выходные данные задания cron записываются в журнал crontab
Вы можете перенаправить вывод php-скрипта в инструкции cron, используя перенаправление файла "php yourfile.php > файл журнала.журнал" или вы можете использовать php file_put_contents для сохранения в файл в любом месте, которое вы назвали бы печатью.
Вы можете записать любой вывод, который вы обычно отправляли в окно браузера, в текстовый файл.
См. http://php.net/manual/en/function .fwrite.php для примеров того, как это сделать.
$file = fopen("log.txt", "a");
fwrite ($file, $some_data);