PHP传递变量到register_shutdown_function - 致命错误处理程序

时间:2015-05-20 19:31:21

标签: php error-handling

我知道这不是正确的错误处理,但有必要解决我的问题。我正在运行一个脚本,可以在一个循环中解析数据数小时,所以我会在不同的时刻创建脚本中发生的事情的日志,以确保正确处理所有事情。我的所有日​​志都保存在与.php文件不同的文件夹中。我正在录制和记录大量信息。但是,所有连接到日志文件都极大地减慢了我的程序。相反,我有一个全局$ write变量,我只是追加它。为了加快我的程序,我只想在每个循环结束时用$ write附加我的日志文件。问题是我为我的程序设置了max_execution_time,如果它在循环完成之前就死了,那么我循环的所有日志都会丢失。作为register_shutdown_function()的一部分,我想记录$ write。

这就是我所拥有的:

register_shutdown_function( "fatal_handler");
function fatal_handler() {

  global $file, $write;
  $errfile = "unknown file";
  $errstr  = "shutdown";
  $errno   = E_CORE_ERROR;
  $errline = 0;

  $error = error_get_last();

  if( $error !== NULL) {
    $errno   = $error["type"];
    $errfile = $error["file"];
    $errline = $error["line"];
    $errstr  = $error["message"];

    file_put_contents($file, "\n\nFATAL ERROR\n\n", FILE_APPEND);
    file_put_contents($file, $write, FILE_APPEND);
  }
}

问题是我收到此错误消息: 警告: file_put_contents(../../ resultLogs / log.txt):无法打开流:第64行的C:\ www \ php \ data_utils \ program.php中没有此类文件或目录

请注意,$ file在程序的其余部分正常工作......请帮助!

1 个答案:

答案 0 :(得分:1)

请参阅docs

  

脚本的工作目录可以在关机内部更改   某些Web服务器下的功能,例如的Apache。

所以在这样做时一定要使用绝对路径,即

file_put_contents('<absolute-path-to>/resultLogs/log.txt', $write, FILE_APPEND);

正如你写的那样“我的所有日​​志都保存在与.php文件不同的文件夹中”,我猜你的问题是,你有$file常数相对到.php文件,但目录在出错时更改..