【发布时间】:2017-04-26 14:13:51
【问题描述】:
我有一个函数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 标头导致它无法写入的问题。
【问题讨论】:
-
我认为这是关于
$file的问题,未在函数范围内定义。 -
如果你想在函数中使用
$file,你应该使用use语句或者直接将它作为参数传递给你的函数。 -
这是一个命名函数定义,
use用于匿名函数。 -
我在发布的函数中看不到变量
$file的任何定义/初始化。它是NULL,这就是fputs()失败的原因。阅读variable scope。我会将$file作为函数forbid()的第一个参数传递,并且不 使用global。header()函数是无罪(这也适用于403。)
标签: php logging http-status-code-403 fputs