在每个PHP脚本之前执行PHP脚本?

6
除了将它放入每个php脚本中,我该如何在每个php脚本之前运行它?
if ($_SERVER['REMOTE_ADDR'] == '123.123.123.123')
{
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}

我希望能达到与将其放在每个脚本顶部相同的效果,而不实际这样做。


3
请注意,客户端可以轻易伪造 HTTP_X_REAL_IP 头部,而 REMOTE_ADDR 则不那么容易被伪造。 - Pekka
1
你的应用程序没有单一入口吗? - halfdan
这就是为什么要使用“if”的原因。它检查的地址是我的代理服务器IP。 - Will
2个回答

12

将其放入自己的文件中,并在php.ini / .htaccess文件中设置auto_prepend_file配置以指向它。

更新:由于您在评论中提到lighttpd,请注意,您可以在全局INI文件中使用PHP 5.3这样配置:

[PATH=/vhost/domain.com]  
auto_prepend_file = /vhost/domain.com/foo.php

[HOST=domain.com]
auto_prepend_file = /vhost/domain.com/foo.php

或者你可以创建文件/vhost/domain.com/.user.ini并执行相同的操作:

auto_prepend_file = /vhost/domain.com/foo.php

相关链接:https://dev59.com/SG865IYBdhLWcg3wfemU#3792076 - NullUserException
1
+1 为 lighttpd 的例子。我很想在问题标题中加入“lighthttpd”以供后代参考。 - Pekka

2
如果您有更改PHP配置的必要权限,那么auto_prepend_file正是您所需要的。

auto_prepend_file指定在主文件之前自动解析的文件名称。该文件会像使用require()函数一样被包含,因此会使用include_path。

特殊值none会禁用自动预处理。


谢谢,只是好奇是否有更好的方法来为lighttpd配置一个虚拟主机? - Will
PHP 5.3支持通过CGI运行时每个目录的“.user.ini”文件。 - Matthew
@High 我对lighthttpd不是很熟悉,但你可以尝试在一个.htaccess文件中设置该选项。 - Pekka
lighttpd不使用/支持.htaccess文件,.user.ini是更好的选择。 - halfdan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接