【问题标题】:No error when uploading a really big file in PHP?在 PHP 中上传一个非常大的文件时没有错误?
【发布时间】:2009-03-05 15:38:40
【问题描述】:

我有一个用于上传文件的 PHP 表单,它工作正常,如果出现问题,它会显示错误消息。这一切都很好。

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

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

有人知道发生了什么吗?

【问题讨论】:

  • 你在几个不同的网络浏览器上试过了吗?我的猜测是这是客户端的东西。
  • 我已经检查了 Firefox 3、Chrome 和 IE7。

标签: php upload


【解决方案1】:

您的 $_POST 很可能是空的,因为上传超出了 post_max_size 指令:

来自 PHP 的directives page:

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

【讨论】:

    【解决方案2】:

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

    • 最大上传文件大小(upload_max_filesize)
    • 最大发布数据大小 (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) 是否生成任何有用的错误编号。如果一切都失败了,请尝试 firebug 中的网络流量监视器。关键是要确定请求是否甚至发送到服务器,以及请求(包括标头)是否是这样的。一旦你在链中走得这么远,你就可以回去看看 PHP 是如何处理上传的。

    【讨论】:

    • 我故意超出限制以检查我的错误处理是否正常。缺乏有用的错误是问题所在。浏览器刷新,没有错误,也没有文件或帖子变量被发送。
    • 啊,我明白了。道歉。文件有多大?我已经在其他语言中看到过这种情况,通常是浏览器限制,或者您的网络服务器保护您。我发现任何超过 2GB 的东西都会有问题。
    • 此链接已过时,但提供了一般要点:motobit.com/help/scptutl/pa98.htm
    • 只有 16MB。超过了我设置的 8MB 限制,但不是 GB。
    • @JarretHardie:讨厌挖掘旧线程,但关于您对内存限制的评论。这是否意味着将 1gb 文件上传到服务器我必须有 > 1gb 的内存限制并且服务器本身需要 > 1gb 的内存?我想我想知道关于在服务器上上传 3-4gb 文件。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我将实现一个简单的脚本,该脚本会定期调用 ajax 以了解上传完成了多少。然后,您可以实现某种进度条。网上有几个例子:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          除了以前用户回答的选项之外:

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

          还有一种情况,当文件很大,或者线路繁忙时,需要很长时间来执行这个操作,会达到脚本执行限制的上限。

          max_execution_time
          

          【讨论】:

            猜你喜欢
            • 2012-07-15
            • 1970-01-01
            • 2018-10-27
            • 2012-10-18
            • 2011-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-11-30
            相关资源
            最近更新 更多