看起来很奇怪,这是故意行为,因为 POST_MAX_SIZE 是一种低级的终极故障保护,为了保护您并防止 DOS 攻击,服务器除了在中途实现时丢弃所有 POST 数据之外别无他法,它接收的数据多于它可以安全处理的数据。如果您知道您需要一次接收比这更多的数据,您可以提高此值(但请确保您的服务器可以处理这将增加的负载),但我建议您研究处理您的用例的其他方法,遇到 POST_MAX_SIZE 向我表明,可能存在比一个大型 HTTP POST 更强大的解决方案,例如将其拆分为多个 AJAX 调用。
与 POST_MAX_SIZE 不同的是 UPLOAD_MAX_SIZE ,它是单个文件限制的 php.ini 设置,我假设您最初正在谈论这个设置。它限制任何一个上传文件的大小,如果文件超过这个值,它将设置$_FILES['file']['error']
为1
. 一般来说,您希望您的网站设置如下:
- MAX_FILE_SIZE
<form>
应设置为您实际希望为此表单接受的最大值。虽然任何试图利用您的网站的用户都可以绕过这个问题,但对于实际使用您的网站的用户来说这很好,因为浏览器将(实际上可以)阻止他们浪费带宽尝试上传它。这应该始终小于您的服务器端设置。
- UPLOAD_MAX_FILESIZE是服务器将接受的最大大小,丢弃任何更大的内容并将错误报告给
$_FILES
阵列。这应该大于您希望在整个站点中实际接受的最大文件。
- POST_MAX_SIZE是您的服务器愿意在单个 POST 请求中接受的最大数据量。这必须大于 UPLOAD_MAX_SIZE 才能使大型上传成功,并且必须大得多才能允许一次上传多个文件。我可能会建议 UPLOAD_MAX_FILESIZE * 4.1 的值 - 这将允许一次四个大文件,以及一些额外的数据。当然是 YMMV,而且您应该确保您的服务器能够正确处理您决定设置的任何值。
对于您如何判断的具体问题,我链接到的关于 POST_MAX_SIZE 的 PHP 文档建议在表单中设置一个 get 变量,即
<form action="edit.php?processed=1">
但是,就像我上面所说的,如果您遇到此问题,您可能需要探索其他上传方法。