PHP $ _REQUEST不包含所有$ _GET变量

时间:2012-11-15 16:29:11

标签: php

直到今天我还以为$ _REQUEST总是包含$ _POST和$ _GET的所有变量。

但今天我有一种奇怪的经历,一个变量是$ _GET的一部分,但不是$ _REQUEST的一部分。我玩了一些URL来交换参数,似乎$ _REQUEST数组中总是缺少第一个参数。

你知道为什么会发生这种情况吗?

谢谢!

URL:

localhost/?app=files&getfile=ajax/newfile.php?dir=%2Ftest4&source=http%3A%2F%2Fl‌​ocalhost%2Fimg%2Flogo.svg&filename=logo.svg&requesttoken=e250827c341650990cd4

2 个答案:

答案 0 :(得分:5)

您的getfile变量未正确编码:

localhost/?app=files&getfile=ajax/newfile.php?dir=%2Ftest4&source=http%3A%2F%2Fl‌​ocalhost%2Fimg%2Flogo.svg&filename=logo.svg&requesttoken=e250827c341650990cd4
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

URL GET请求中的第一个变量位于问号(?)之后。所有其他变量必须遵循&符号(&)。

如果您的网址中有多个问号,那么您正在破坏协议,您可能会引起混淆。我敢打赌你的第二个变量缺少文字:ajax/newfile.php

您的网址应如下所示:

localhost/?app=files&getfile=app%3Dfiles%26getfile%3Dajax%2Fnewfile.php%3Fdir%3D%252Ftest4&source=http%3A%2F%2Fl‌​ocalhost%2Fimg%
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

您可以使用urlencode()函数在PHP中对URL变量进行编码。

答案 1 :(得分:0)

dirgetfile参数中 uri 的查询参数。因此,它不在$_GET内(因此$_REQUEST)。

您需要使用parse_url()之类的内容解析$_GET['getfile']或重新构建查询字符串。