直到今天我还以为$ _REQUEST总是包含$ _POST和$ _GET的所有变量。
但今天我有一种奇怪的经历,一个变量是$ _GET的一部分,但不是$ _REQUEST的一部分。我玩了一些URL来交换参数,似乎$ _REQUEST数组中总是缺少第一个参数。
你知道为什么会发生这种情况吗?
谢谢!
URL:
localhost/?app=files&getfile=ajax/newfile.php?dir=%2Ftest4&source=http%3A%2F%2Flocalhost%2Fimg%2Flogo.svg&filename=logo.svg&requesttoken=e250827c341650990cd4
答案 0 :(得分:5)
您的getfile
变量未正确编码:
localhost/?app=files&getfile=ajax/newfile.php?dir=%2Ftest4&source=http%3A%2F%2Flocalhost%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%2Flocalhost%2Fimg%
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
您可以使用urlencode()
函数在PHP中对URL变量进行编码。
答案 1 :(得分:0)
dir
是getfile
参数中 uri 的查询参数。因此,它不在$_GET
内(因此$_REQUEST
)。
您需要使用parse_url()
之类的内容解析$_GET['getfile']
或重新构建查询字符串。