fputs 在 403 header 被触发之前不写入

fputs doesn't write before 403 header is triggered

我有一个函数 forbid() 应该写入访问被拒绝的日志文件,以及拒绝的原因。出于某种原因,它没有写入日志文件。

// 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 header 导致它无法写入的问题。

看起来像是范围问题。因为它是一个函数,所以它在函数范围内寻找文件句柄 $file,而不是全局的。您需要将文件句柄传递给函数。

我还假设错误报告已关闭,从而抑制了您的问题。