在PHP中上传真正大文件时没有错误?

在PHP中上传真正大文件时没有错误?

问题描述:

我有一个PHP表单上传文件,它工作正常,并显示错误消息,如果出现了问题。这很好。在PHP中上传真正大文件时没有错误?

问题是,当我用一个非常大的文件进行测试时,它只是刷新页面,就好像我根本没有发送文件一样,并且表单中的$ _POST变量都没有发送到服务器。

我想向用户显示一个错误,让他们知道该文件太大。但是,我不能这样做。

有谁知道发生了什么?

+0

你在几个不同的浏览器中试过吗?我的猜测是,这是客户端的东西。 – 2009-03-05 15:40:51

+0

我检查了Firefox 3,Chrome和IE7。 – 2009-03-05 15:54:49

检查您的PHP ini文件,该文件管理PHP允许上传文件的大小。这些变量是很重要的:

  • 最大上传文件大小(upload_max_filesize的)
  • 最大POST数据大小(的post_max_size)
  • 内存限制(memory_limit的)

这些范围之外的任何上传会被忽略或出错,取决于您的设置。

本节的文档具有最好的总结:http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php

编辑:另外请注意,大小大多数浏览器将不会发送上传超过2GB。此链接已过时,但给出了一个想法:http://www.motobit.com/help/scptutl/pa98.htm。任何人都有更好的信息来源?

也有可以由服务器施加的限制,如Apache:http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

要真正看到发生了什么,你应该检查你的网络服务器日志,检查浏览器上传限制(如果你是使用Firefox),并尝试看看print_r($_FILES)是否生成任何有用的错误号码。如果一切都失败,请尝试使用萤火虫的网络流量监控器。关键是要确定请求是否要到达服务器,以及是否请求(包括头文件)的外观。一旦你在链中找到了那么多,那么你可以回头看看PHP如何处理上传。

+0

我超出了检查我的错误处理正在工作的目的限制。缺乏有用的错误是问题所在。浏览器刷新,没有错误,没有文件或邮政变量发送。 – 2009-03-05 15:52:21

我会实现一个简单的脚本,通过定期的ajax调用来知道已经完成了多少上传。然后你可以实现某种进度条。有在网上几个例子:

http://martinjansen.com/2007/04/28/file-upload-progress-bars-with-php/

你的$ _ POST是最有可能空的,因为上传超过的post_max_size指令:

从PHP的directives page

如果帖子数据的大小比post_max_size大 ,$ _POST 和$ _FILES superglobals是空。 这可以通过各种方式进行跟踪,例如 通过将$ _GET变量传递给 处理数据的脚本,即 <form action="edit.php?processed=1">和 ,然后检查是否设置了$ _GET ['processed'] 。

无法知道上传文件的大小,直到它完全上传。所以如果你想确定文件大小,然后显示大文件错误,首先你必须上传文件,然后检查文件大小。为了有一个大文件上传,你应该在你的php配置文件php.ini中设置2个设置。 打开它并搜索“upload_max_filesize”并将该值设置为所需的最大值。那么您必须设置POST参数的最大值,因为上传的文件是通过HTTP POST方法接收的。找到“post_max_size”并将其设置为一个很大的值。

最大上传文件大小(upload_max_filesize) 最大发布数据大小(post_max_size) 是您需要设置的指令。我已经用多种操作系统,浏览器等对它进行了测试,这是你需要担心的唯一两件事。

分开形成的选项,因为前者用户回答:

max upload filesize (upload_max_filesize) 
max post data size (post_max_size) 
memory limit (memory_limit) 

也有一个,当文件非常大,或线路忙,有需要太多的时间来执行此操作,这将触及脚本执行限制的上限。

max_execution_time