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

如何使用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

我有Cron jobs运行的脚本。因此,当它运行时,我看不到任务的输出是什么。(错误等。)

所以我需要使用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

此外,您不能单独使用like
ob_start()
和friends,因为某些致命错误可能会中止输出缓冲。因此,如果您更喜欢PHP唯一方式,则需要定义:

  • 输出缓冲
  • 错误处理程序(或者您可以使用输出缓冲获取错误)
  • Shutdown函数-获取致命错误

  • 另外,通常情况下,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");