无法上传文件
我为客户制作了CMS。他可以做的一件事就是上传一个PDF文件。我们已经彻底地测试过了,并没有遇到任何错误。但是,他似乎无法上传任何东西。该文件从未上传。他的浏览器只是继续加载。无法上传文件
我的客户使用Firefox(不知道哪个版本,但我认为没关系),他试图上传的PDF文件大约是5MB,没有什么极端。
上传文件时浏览器没有完成请求的原因是什么?我不认为这些文件是腐败的。
我不认为问题出在我的脚本...但仍值得发帖:
if(!empty($_FILES['pdf'])) {
$path = '../pdf/';
$filename = $_FILES['pdf']['name'];
if(!empty($assoc['pdf'])) {
$oldfile = $path.$assoc['pdf'];
if(file_exists($oldfile)) {
unset($oldfile);
}
}
$success = move_uploaded_file($_FILES['pdf']['tmp_name'], $path.$filename);
}
编辑:他送我,他要上传的PDF。花了大约10秒钟上传......我给他提供了一个链接来做一个速度测试,哈哈。
你可以有两个问题,我可以看到,可能不是你确切的问题,但可能导致你的答案。
#1。 POST_MAX_SIZE或UPLOAD_MAX_FILESIZE不够大
有两种配置,php程序员经常忘记这可能是你最明显的问题。你的测试已经完成,但他们已经完成大文件?
使用一个htaccess或一个php.ini(取决于您的服务器配置)可以重写PHP设置
- 的upload_max_filesize
- 的post_max_size
,并给他们,例如20M:
/*.HTACCESS*/
php_value upload_max_filesize 20M
php_value post_max_size 20M
/*PHP.INI*/
upload_max_filesize = 20M
post_max_size = 20M
您不能使用ini_set(),因为这些变量es在PHP开始处理之前使用,因此在上下文中将变得无用。
#2。 ENCTYPE没有的multipart/form-data的
虽然很unprobable,你可能已经忘了把表单上的ENCTYPE属性为“multipart/form-data的”,因此,没有东西都发送到服务器。但我怀疑这是你的问题,因为你说你对它进行了广泛的测试。
,但有时候,我们四处移动的东西,忘记测试(它发生在我身上),我确信某件事之前工作过,现在是没有,所以检查出来只是为了确保:)
好运气
谢谢你的回答,但我必须让你失望。我设法找出upload_max_filesize有点低(8mb),但仍然足以上传他试图上传的文件(6mb)。此外,如果这是一个服务器问题,我无法上传相同的文件,虽然我说我设法上传文件。另外,enctype是正确的。 – 2012-02-20 15:47:46
你是否也检查了post_max_size,它们都被链接... – 2012-02-20 15:55:05
post_max_size很好。 – 2012-02-20 15:57:02
让客户端尝试在不同于Firefox的浏览器中上传文件。如果它适用于其他浏览器,请尝试删除(或重命名/移动,用于测试目的)客户端Firefox profile folder中的文件MimeTypes.rdf。
如果之后PDF上传工作,您遇到了2007年首次报告的a Firefox bug(basically the same here,2006年报告)。简而言之,任何用户从中下载文件的网站都有可能破坏MimeTypes.rdf文件,涉及恶意或意外/不知情的下载文件的扩展。
事情可以做:
- Vote for the Firefox bug!
- 快速修复得到它正在为客户端现在:让用户(S)删除其MimeTypes.rdf文件。 Firefox将在下一次开始时创建一个新的“新鲜”,但是这将清除用户随着时间的推移创建的所有MIME类型/应用程序关联。此外,这只会有用,直到用户从其他某个网站下载下一个PDF文件再次破坏MimeTypes.rdf文件。
- 使用“用户代理”标题确定文件是否从Firefox上传。如果是这样,并且MIME类型与您希望接受的任何内容不匹配,请仔细检查文件名的扩展名,并且如果扩展名符合您接受的文件类型(您的案例中的“.pdf”),则接受该文件。
HTML表单是什么样的?您是否发布到iframe,到后续页面,PHP_SELF或通过AJAX?根据这种情况的发生,其他进程可能会中断上传。例如,如果您正在上传到iframe并且目标框架在上传过程中被重定向或重新加载,则Firefox将无限地继续尝试发布,但从未成功。 – 2012-02-20 15:08:01
他/她可能只是没有时间去尝试它,并通过弥补“这不是工作”的理由来支持他的时间。似乎是我们最常见的错误! :) – Dave 2012-02-20 15:14:48
您是否在代码中添加了一些打印件以确保文件真正上传? '$ success'设置为true还是浏览器从不响应? – Robert 2012-02-20 15:20:21