PHP filter_input(INPUT_SERVER,' REQUEST_METHOD')返回null?

时间:2014-08-10 20:59:28

标签: php filter-input

为什么这一行会在我的实时服务器中返回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();
        }
    }

5 个答案:

答案 0 :(得分:11)

所以问题/错误是这样的:

使用 FASTCGI

filter_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,这是一个重要的部分!

来源:http://php.net/manual/es/function.filter-input.php#77307