Php fputs不';在触发403头之前不写入
我有一个函数Php fputs不';在触发403头之前不写入,php,logging,http-status-code-403,fputs,Php,Logging,Http Status Code 403,Fputs,我有一个函数bank(),它应该写入一个日志文件,该文件拒绝访问,并给出拒绝的原因。出于某种原因,它没有写入日志文件 // function to forbid access function forbid($reason) { // explain why if ($reason) fputs($file, "=== ERROR: " . $reason . " ===\n"); fputs($file, "*** ACCESS DENIED ***" . "\n\n\
bank()
,它应该写入一个日志文件,该文件拒绝访问,并给出拒绝的原因。出于某种原因,它没有写入日志文件
// function to forbid access
function forbid($reason) {
// explain why
if ($reason) fputs($file, "=== ERROR: " . $reason . " ===\n");
fputs($file, "*** ACCESS DENIED ***" . "\n\n\n");
fclose($file);
// forbid
header("HTTP/1.0 403 Forbidden");
exit;
}
$file
在代码前面定义,此函数之前的其他fputs()
工作正常;我认为是403头导致它无法写入的原因。看起来像是范围问题。因为它是一个函数,所以它在函数范围中查找文件句柄$file
,而不是全局。您需要将文件句柄传递到函数中
我还要假设错误报告已经关闭,抑制您的问题。我认为这是关于未在函数范围中定义的
$file
的问题。如果要在函数中使用$file
,应使用use
语句或将其作为参数直接传递给函数。这是一个命名函数定义,use
用于匿名函数。我在发布的函数中看不到变量$file
的任何定义/初始化。它是NULL
,这就是fputs()
失败的原因。了解。我将传递$file
作为函数banbid()
的第一个参数,而不使用global
。header()
函数是无罪的(这也适用于403
)啊,就是这样。我不知道为什么我没有想到:)谢谢!