无法上传文件

时间:2012-02-20 15:02:44

标签: php firefox pdf upload

我为客户制作了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秒......我正在为他提供一个速度测试的链接,哈哈。

2 个答案:

答案 0 :(得分:1)

我可能会遇到两个问题,可能不是您的确切问题,但可能会引导您回答。

<强>#1。 POST_MAX_SIZE或UPLOAD_MAX_FILESIZE不够大

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

使用htaccess或php.ini(取决于您的服务器配置),您可以覆盖

的php设置
  1. 的upload_max_filesize
  2. 的post_max_size
  3. 例如给他们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(),因为这些变量是在php开始处理之前使用的,因此在上下文中会变得无用。

    <强>#2。 enctype不是multipart / form-data

    虽然非常不可能,但您可能忘记将表单上的enctype属性设置为“multipart / form-data”,因此根本不会将任何内容发送到服务器。但我怀疑这是你的问题,因为你说你经过广泛的测试。

    但是,有时候,我们移动东西并忘记测试(它也发生在我身上),我确信之前有效,现在不行,所以请确认一下以确保:)

    祝你好运

答案 1 :(得分:0)

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

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

你可以做的事情:

  1. Vote for the Firefox bug!
  2. 快速修复以使其立即为客户端工作:让用户删除他们的MimeTypes.rdf文件。 Firefox将在下次启动时创建一个新的“新鲜”版本,但这将清除用户随时创建的所有MIME类型/应用程序关联。此外,这只会在用户从其他网站下载下一个PDF文件之后才会有所帮助,该网站会再次破坏MimeTypes.rdf文件。
  3. 使用“用户代理”标头确定文件是否从Firefox上传。如果是这样且MIME类型与您希望接受的任何内容不匹配,请仔细检查文件名的扩展名,如果扩展名与您接受的文件类型(在您的情况下为“.pdf”)匹配,则无论如何都要接受该文件。 / LI>