2012-02-20 71 views
1

我为客户制作了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秒钟上传......我给他提供了一个链接来做一个速度测试,哈哈。

+0

HTML表单是什么样的?您是否发布到iframe,到后续页面,PHP_SELF或通过AJAX?根据这种情况的发生,其他进程可能会中断上传。例如,如果您正在上传到iframe并且目标框架在上传过程中被重定向或重新加载,则Firefox将无限地继续尝试发布,但从未成功。 – 2012-02-20 15:08:01

+0

他/她可能只是没有时间去尝试它,并通过弥补“这不是工作”的理由来支持他的时间。似乎是我们最常见的错误! :) – Dave 2012-02-20 15:14:48

+0

您是否在代码中添加了一些打印件以确保文件真正上传? '$ success'设置为true还是浏览器从不响应? – Robert 2012-02-20 15:20:21

回答

1

你可以有两个问题,我可以看到,可能不是你确切的问题,但可能导致你的答案。

#1。 POST_MAX_SIZE或UPLOAD_MAX_FILESIZE不够大

有两种配置,php程序员经常忘记这可能是你最明显的问题。你的测试已经完成,但他们已经完成大文件?

使用一个htaccess或一个php.ini(取决于您的服务器配置)可以重写PHP设置

  1. 的upload_max_filesize
  2. 的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的”,因此,没有东西都发送到服务器。但我怀疑这是你的问题,因为你说你对它进行了广泛的测试。

,但有时候,我们四处移动的东西,忘记测试(它发生在我身上),我确信某件事之前工作过,现在是没有,所以检查出来只是为了确保:)

好运气

+0

谢谢你的回答,但我必须让你失望。我设法找出upload_max_filesize有点低(8mb),但仍然足以上传他试图上传的文件(6mb)。此外,如果这是一个服务器问题,我无法上传相同的文件,虽然我说我设法上传文件。另外,enctype是正确的。 – 2012-02-20 15:47:46

+0

你是否也检查了post_max_size,它们都被链接... – 2012-02-20 15:55:05

+0

post_max_size很好。 – 2012-02-20 15:57:02

0

让客户端尝试在不同于Firefox的浏览器中上传文件。如果它适用于其他浏览器,请尝试删除(或重命名/移动,用于测试目的)客户端Firefox profile folder中的文件MimeTypes.rdf

如果之后PDF上传工作,您遇到了2007年首次报告的a Firefox bugbasically the same here,2006年报告)。简而言之,任何用户从中下载文件的网站都有可能破坏MimeTypes.rdf文件,涉及恶意或意外/不知情的下载文件的扩展。

事情可以做:

  1. Vote for the Firefox bug!
  2. 快速修复得到它正在为客户端现在:让用户(S)删除其MimeTypes.rdf文件。 Firefox将在下一次开始时创建一个新的“新鲜”,但是这将清除用户随着时间的推移创建的所有MIME类型/应用程序关联。此外,这只会有用,直到用户从其他某个网站下载下一个PDF文件再次破坏MimeTypes.rdf文件。
  3. 使用“用户代理”标题确定文件是否从Firefox上传。如果是这样,并且MIME类型与您希望接受的任何内容不匹配,请仔细检查文件名的扩展名,并且如果扩展名符合您接受的文件类型(您的案例中的“.pdf”),则接受该文件。