【发布时间】:2010-11-12 02:48:06
【问题描述】:
我想通过 http 将大变量传递给另一台服务器上的 PHP 脚本,例如: “example.com/get.php?data=这是相当多的数据......”
我总是得到服务器(apache)的响应:“Request-URI Too Large”
有什么想法可以将大变量传递给该脚本吗?
【问题讨论】:
-
您是否考虑过改用 POST 方法?
我想通过 http 将大变量传递给另一台服务器上的 PHP 脚本,例如: “example.com/get.php?data=这是相当多的数据......”
我总是得到服务器(apache)的响应:“Request-URI Too Large”
有什么想法可以将大变量传递给该脚本吗?
【问题讨论】:
如果数据对于 GET 来说太长,那么使用 POST 呢?
(考虑到 POST 的大小限制,PHP 中一般为 2 MB 左右;取决于配置,可能更多。)
如果您使用的是curl (也就是说,如果它是您服务器上的 PHP 脚本,它会向另一台服务器发出请求;否则,您可能会使用 HTML 格式的表单)查看curl_setopt 的文档:某些选项一定会让您感兴趣;-)
【讨论】:
如前所述,您真的应该切换到 POST。
POST 的初始最大大小约为 2mb,可以通过在 php.ini 文件中设置 upload_max_filesize 和 post_max_size 来配置。
【讨论】:
最好的选择是 $_POST。如果变量太大,您甚至可以使用 AJAX 添加“加载图标”。
【讨论】:
尝试使用 POST 而不是 GET?也就是说,像这样:
<form name=fooForm method=POST action=http://example.com/get.php>
<input type="hidden" name=data value="this is quite a lot of data">
</form>
添加提交按钮或使用javascript触发提交,有点像这样:
<a href="javascript:document.fooForm.submit()">Submit</a>
您也可以尝试通过 cookie 传递数据,它们的大小可达 4KB。
【讨论】:
一定要使用 POST。
顺便说一下,此链接记录了最大 url 长度:
http://www.boutell.com/newfaq/misc/urllength.html
【讨论】:
如果您对另一台服务器上的 PHP 脚本的源代码有任何形式的控制,它应该是 POST 数据而不是 GET。但是,如果您有一个非常有效/实际的理由来使用 GET 而不是 post。然后你需要做出权衡并牺牲发送非常大数据的能力来继续使用 GET 方法。
正如 Joeri 正确指出的那样,URL 的长度有上限,并且此限制可能因浏览器和服务器而异。不同版本或相同浏览器/服务器也可能支持不同的 URL 最大长度。因此,您可以通过 GET 请求在 URL 中发送编码的数据量是有限的。
【讨论】: