我知道这不是正确的错误处理,但有必要解决我的问题。我正在运行一个脚本,可以在一个循环中解析数据数小时,所以我会在不同的时刻创建脚本中发生的事情的日志,以确保正确处理所有事情。我的所有日志都保存在与.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在程序的其余部分正常工作......请帮助!
答案 0 :(得分:1)
请参阅docs:
脚本的工作目录可以在关机内部更改 某些Web服务器下的功能,例如的Apache。
所以在这样做时一定要使用绝对路径,即
file_put_contents('<absolute-path-to>/resultLogs/log.txt', $write, FILE_APPEND);
正如你写的那样“我的所有日志都保存在与.php文件不同的文件夹中”,我猜你的问题是,你有$file
常数相对到.php
文件,但目录在出错时更改..