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
)啊,就是这样。我不知道为什么我没有想到:)谢谢!