将CLI参数注册到GET时的全局注册问题

时间:2014-02-06 18:42:55

标签: php superglobals auto-registration

在这里遇到了一个奇怪的问题,也许一些更为精通的人可以帮助我得出正在进行的事情的结论(已经有一个解决方法,但想知道如何修复这个似乎它可以影响其他事情)

所以我有一行代码可以检测CLI字符串(基于类型[0]),然后继续将CLI参数转换并加载到GET参数中。

parse_str(implode("&", array_slice($payload['args'], 1)), $_GET);

工作正常,您可以通过创建文件并发布类似

的方式对其进行测试
php - f test.php -- foo=bar bar=baz

使用上面一行的文件内容只有一个print_r($_GET);

当你尝试使用它作为filter_input我很注意但是无法弄清楚为什么

$filter = filter_input_array(INPUT_GET, [
   'email'     => FILTER_VALIDATE_EMAIL,
]);

print_r($filter); //empty

对于GET请求来说,试图解决任何事情都是filter_input_array一般放弃,实例

http://localhost?request=foo

$_GET['email'] = 'Someguy@somplace.com';

    //print_r($_GET); // check

print_r(filter_input_array(INPUT_GET, [
   'email'     => FILTER_VALIDATE_EMAIL,
   'request'   => FILTER_SANITIZE_ENCODED,
])):

但由于未知原因,它的工作原理是

$filter = filter_var_array($_GET, [
   'email'     => FILTER_VALIDATE_EMAIL,
]);

对我来说没什么意义=(

我想要相信我们的GET在某种程度上没有登记到全球范围,但我不知道为什么......

我正在为Saucy运行PHP 5.5.8,欢迎输入

1 个答案:

答案 0 :(得分:0)

函数filter_input_array()和filter_input()处理实际输入,而不是相应的全局变量。

来自filter_input文档中的注释:

  

请注意,此函数不会(或至少似乎没有)实际根据$ _GET等的当前值进行过滤。相反,它似乎基于原始值进行过滤。

     

source