我的脚本是由Cron作业运行的。所以,当它运行时,我看不出任务的输出是什么。 (错误等等。)
所以我需要使用PHP将浏览器输出写入日志文件。我怎么能这样做?
答案 0 :(得分:4)
您可以使用output buffers将浏览器输出写入日志文件
示例:
<?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();
?>
答案 1 :(得分:3)
我更喜欢使用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
此外,您不能单独使用像ob_start()
这样的{{1}}和朋友,因为一些致命错误可能会中止输出缓冲。因此,如果您更喜欢仅使用PHP的方式,则需要定义:
P.S。通常,cron job的输出写入crontab的log
答案 2 :(得分:2)
我将此脚本用于错误日志:
// 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");
它可以完全控制引发错误时要采取的操作。
直接来自 Web Services Wiki of Stanford University
答案 3 :(得分:1)
你可以使用file redirection“php yourfile.php&gt; logfile.log”在cron指令中重定向php脚本的输出,或者你可以使用php的file_put_contents保存到任何地方的文件你会打电话打印。
答案 4 :(得分:0)
$file = fopen("log.txt", "a");
fwrite ($file, $some_data);