我正在测试我制作的一个小应用程序,当上传多个超过一定大小的文件时,我看到了一个奇怪的行为。
我已经阅读了这里提到的错误,但很久以前。奇怪的是,我遇到了与那个人在错误中提到的相同的行为。
- 当我上传时,比如说 10 个小文件(每个 50-300kb)没有任何问题并且应用程序可以正常工作。
- 当我上传两个 1.5mb 的文件时,应用程序输出一条错误消息,因为应用程序允许的最大大小为 512kb(php.ini 中为 2mb)。
- 当我上传多个超过 7 或 8 mb 的文件时(我没有尝试找到确切的大小),php 崩溃而没有给出错误。由于我在开发服务器中,因此错误已打开,通常会显示致命错误。
- 当我上传 1 个文件(比如 25mbs)时,我仍然有同样的错误。
好吧,我说它崩溃是因为当我尝试var_dump($_FILES)
甚至var_dump($_POST)
数组返回 null 时,尽管它应该至少具有提交名称或其他名称。
我检查了 tmp 文件夹,文件也没有存储在那里。然而,另一个奇怪的行为是,当我上传超过这个神秘限制的文件时,浏览器似乎正在上传(我看到页面需要一段时间才能加载),但是,如前所述,php 表现得好像它什么都不知道。
这种奇怪行为的原因是什么?
PS:我正在 Windows 7 64 位上的本地主机(wampserver)上工作。
编辑
找到了解决方案:
将 post_max_size 从 8mb 更改为其他内容解决了我的问题。
以下是手册中的引文,供需要的人使用:
设置允许的帖子数据的最大大小。此设置也会影响文件上传。要上传大文件,该值必须大于upload_max_filesize。如果您的配置脚本启用了内存限制,那么 memory_limit 也会影响文件上传。一般来说,memory_limit 应该大于 post_max_size。使用整数时,该值以字节为单位。也可以使用本常见问题解答中描述的速记符号。如果 post 数据的大小大于 post_max_size,则 $_POST 和 $_FILES 超全局变量为空。这可以通过多种方式进行跟踪,例如通过将$_GET 变量传递给处理数据的脚本,即,然后检查是否设置了$_GET['processed']。