为什么这一行会在我的实时服务器中返回null
?
filter_input(INPUT_SERVER, 'REQUEST_METHOD');
实时服务器是 php5.5.9
我错过了什么吗?
我认为它用于替换下面的全局方法?
$_SERVER['REQUEST_METHOD'];
一些代码,
public function __construct()
{
// Construct other generic data.
$this->clientRequestMethod = filter_input(INPUT_GET, 'method'); // such as list, add, update, etc
$this->clientPostMethod = filter_input(INPUT_POST, 'method'); // such as update
$this->serverRequestMethod = filter_input(INPUT_SERVER, 'REQUEST_METHOD'); //such as get or post
}
public function processEntry()
{
// Determine the $_SERVER['REQUEST_METHOD'] whether it is post or get.
if ($this->serverRequestMethod === 'POST' && $this->clientPostMethod != null)
{
$this->processPost();
}
else if($this->serverRequestMethod === 'GET' && $this->clientRequestMethod != null)
{
$this->processRequest();
}
}
答案 0 :(得分:11)
所以问题/错误是这样的:
使用 FASTCGIfilter_input()不适用于 INPUT_SERVER 或 INPUT_ENV
这个bug已经被人们所了解多年,我发现没有人说它已被解决了。我找到了几个解决方法,但没有完整的解决方案,所以我将最好的解决方案填入了这个帮助函数,以实现项目范围的解决方案。为了提供某种程度的安全性并避免火车残骸,该函数会回退到filter_var(),其中filter_input()失败。它使用与本机filter_input()函数相同的格式,以便轻松集成到项目中,并在错误得到修复时轻松将来删除。
mysql -uroot –pmypassword < mydatabase.sql
这似乎是最好的解决方案。如果它包含可能导致问题的错误,请告诉我。
答案 1 :(得分:5)
我在本地计算机(OSX Mavericks,PHP版本5.4.24)上工作时遇到了同样的问题,而不是我的实时服务器(Cent OS 5)。我将服务器从5.3.9升级到5.5.15(并添加了mb和mcrypt函数,虽然这可能无关紧要),现在它可以工作。
如果您在共享主机上,这可能没有用,但您可以询问他们是否可以重建PHP / Apache。
答案 2 :(得分:4)
我在XAMPP localhost中也遇到了同样的问题,并且疯狂地寻找解决方案。我最终得到的,如果你在FCGI模式下运行PHP(在我的情况下是FCGI / PHP 5.4),这是一个已知的PHP错误。我被确认经历了link.
我使用的解决方法是filter_var($_SERVER['PHP_AUTH_USER'], FILTER_SANITIZE_STRING)
,但这不是filter_input
的替代方法。 filter_input
更安全。
答案 3 :(得分:4)
我解决了从{<1}}改变:
php.ini
要:
variables_order = "GPCS"
默认情况下,PHP没有注册环境变量,所以这个更改启用了它们。有趣的是,variables_order = "GPCSE"
变量也恢复了工作!
只有两个附加信息,我使用的是PHP 7.0.13,正如其他答案所述,这个问题与PHP bug有关。
另一个选择是使用以下内容:
INPUT_SERVER
答案 4 :(得分:3)
当使用INPUT_SERVER和INPUT_ENV与此功能时,FastCGI似乎会导致奇怪的副作用与意外的空值。您可以使用此代码查看它是否会影响您的服务器。
如果您想要安全起见,使用超全局$ _SERVER和$ ENV变量将始终有效。你仍然可以使用过滤器 *函数来获取Get / Post / Cookie,这是一个重要的部分!