如何使用PHP将浏览器输出写入日志文件?

时间:2012-01-18 07:59:38

标签: php io cron

我的脚本是由Cron作业运行的。所以,当它运行时,我看不出任务的输出是什么。 (错误等等。)
所以我需要使用PHP将浏览器输出写入日志文件。我怎么能这样做?

5 个答案:

答案 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的方式,则需要定义:

  1. 输出缓冲
  2. 错误处理程序(或者您可以使用输出缓冲来获取错误)
  3. 关闭功能 - 获取致命错误
  4. 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);