如何使用PHP将浏览器输出写入日志文件?
我有Cron jobs运行的脚本。因此,当它运行时,我看不到任务的输出是什么。(错误等。)如何使用PHP将浏览器输出写入日志文件?,php,io,cron,Php,Io,Cron,我有Cron jobs运行的脚本。因此,当它运行时,我看不到任务的输出是什么。(错误等。) 所以我需要使用PHP将浏览器输出写入日志文件。如何执行此操作?您可以使用“php yourfile.php>logfile.log”在cron指令中重定向php脚本的输出,也可以使用php将其保存到任何调用print的文件中。您可以使用它将浏览器输出写入日志文件 $file = fopen("log.txt", "a"); fwrite ($file, $some_data); 例如: <?ph
所以我需要使用PHP将浏览器输出写入日志文件。如何执行此操作?您可以使用“php yourfile.php>logfile.log”在cron指令中重定向php脚本的输出,也可以使用php将其保存到任何调用print的文件中。您可以使用它将浏览器输出写入日志文件
$file = fopen("log.txt", "a");
fwrite ($file, $some_data);
例如:
<?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
。这里描述了所有内容:。本页中的一些示例:
php myscript.php &>file
或
此外,您不能单独使用likeob_start()
和friends,因为某些致命错误可能会中止输出缓冲。因此,如果您更喜欢PHP唯一方式,则需要定义:
另外,通常情况下,cron作业的输出会写入crontab的日志我将此脚本用于错误日志:
// 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");
它可以完全控制在出现错误时要采取的操作直接取自
// 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");