【问题标题】:Can file uploads time out in PHP?文件上传可以在 PHP 中超时吗?
【发布时间】:2010-10-09 08:32:57
【问题描述】:

嗨,我对 PHP 很陌生,我创建了一个表单,用于将非常大的 csv 文件上传到我的服务器。有人向我提到,由于上传文件太大,浏览器会超时,这是真的吗?如果可以,是否可以预防?

感谢您的帮助!

【问题讨论】:

    标签: php upload


    【解决方案1】:

    您需要为以下 php.ini 设置正确的值:

    1. max_input_time不是 max_execution_time!)
    2. upload_max_filesize
    3. post_max_size

    也许

    1. memory_limit

    【讨论】:

    • max_input_time 的 PHP 文档说:“它是从接收服务器上的所有数据到开始执行脚本的那一刻测量的。”那么为什么文件大小会有所不同呢?在此计时器开始之前已收到所有数据。
    • 经过测试我确认max_input_time似乎对这个问题没有影响。
    • 我也遇到过类似的问题。当我以前从桌面上传文件时,它工作正常。但是,如果使用同一页面从手机上传相同的图像,它曾经失败。服务器上报告的错误是由于最大文件大小。实际上,问题是由于从移动设备上传图像需要更多时间导致超时。增加MAX_INPUT_TIME后,问题得到解决。
    【解决方案2】:

    如果它们的值太小,一些配置指令可能会导致大型上传失败:

    PHP

    • max_input_time   允许脚本解析输入数据(例如 POST、GET 和文件上传)的最长时间(以秒为单位)
    • upload_max_filesize   上传文件的最大大小。
    • post_max_size   允许的帖子数据大小上限。

    阿帕奇

    • TimeOut   服务器在请求失败前等待特定事件的时间
    • LimitRequestBody   限制从客户端发送的 HTTP 请求正文的总大小

    可能还有更多。

    【讨论】:

    • 我不知道该去哪里编辑 apache 设置 :(
    • 询问您的提供商这些设置是否适合上传大文件。
    【解决方案3】:

    解决 php 中对大文件上传处理不佳的问题的一个好方法是使用像 JUpload 这样的上传器,它会在发送文件之前将文件分成块。这对您的用户也有好处,即他们在上传时获得适当的进度反馈,并且他们可以一次上传多个文件。

    【讨论】:

      【解决方案4】:

      我能够使用以下设置解决此问题,您可以使用不同的值,但您明白了:

      对于我的服务器,我将这些行放在脚本目录内的“.user.ini”文件中,如果您在服务器上执行 phpinfo('user_ini.filename'),您的服务器可能会寻找不同的文件将吐出您需要将值放入的文件

      max_execution_time = 1800
      max_input_time = -1
      post_max_size = 100M
      upload_max_filesize = 100M
      memory_limit = 256M
      

      【讨论】:

        【解决方案5】:

        上传非常大的文件时,您必须更改 4 个配置变量:

        • upload_max_filesize
        • post_max_size
        • memory_limit
        • time_limit

        可以在运行时使用 set_time_limit() 增加时间限制。

        【讨论】:

        • 据我所知 PHP 中没有这样的指令 - time_limit。 set_time_limit() 设置 max_execution_time。
        【解决方案6】:

        默认情况下,允许脚本运行大约 30 秒。您可以使用set_time_limit() function 来更改它。此外,如果您的用户需要上传大文件,您需要更改 php.ini 文件中的 post_max_size 和/或 upload_max_filesize 值。

        另外,如果您只想全局扩展超时限制,您可以在 php.ini 中更改 max-execution-time。

        【讨论】:

        • 太棒了,谢谢!我什至不知道 post_max_size 或 upload_max_file_size!非常感谢
        • set_time_limit 影响与 php.ini 中的 max_execution_time 相同的设置。文档说“最大执行时间不受系统调用、流操作等的影响”。文件上传算作“流操作”吗?如果是这样,那么此设置似乎无济于事。
        【解决方案7】:

        是的,这是真的。文件上传是通过 POST 请求完成的,并且请求通常会超时。您应该能够重新配置您的环境以获得更长的请求超时时间。

        【讨论】:

          【解决方案8】:

          不仅仅是超时会导致问题。可以上传的文件的最大大小有一些限制。这些限制可以在 php.ini 文件中更改:

          post_max_size
          上传最大文件大小 内存限制

          查看http://uk.php.net/ini.core了解详情。

          【讨论】:

            【解决方案9】:

            我的回答与您最初的问题没有直接关系,但如果您的 PHP 脚本前面有反向代理负载均衡器,负载均衡器可能会超时或阻止大量上传。如果您支持文件上传,请务必检查负载均衡器的配置。就像 PHP 一样,大多数负载均衡器的默认上传设置都很小。

            【讨论】:

              【解决方案10】:

              如果更改上述任何参数似乎没有任何区别,则可能是某处的 html 表单包含名称 MAX_FILE_SIZE 作为隐藏字段。

              <input type="hidden" name="MAX_FILE_SIZE" value="10000000">

              在上面的示例中,任何超过 10MB 的文件都不会上传。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-08-07
                • 2012-06-03
                • 2011-04-03
                • 1970-01-01
                • 2012-04-12
                • 2010-12-04
                • 2010-10-13
                相关资源
                最近更新 更多