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