【问题标题】:Writing direct to disk with php使用php直接写入磁盘
【发布时间】:2011-02-20 17:00:51
【问题描述】:

我想创建一个不属于 php 上传限制的上传脚本。 有时我需要上传 2GB 或更大的文件,并且我不想将整个服务器执行更改为 32MB 以上。

有没有办法从 php 直接写入磁盘?

您建议某人使用什么方法来完成此任务?我已经阅读了堆栈溢出,但还没有完全找到我想要做的事情。

【问题讨论】:

    标签: php file-upload upload


    【解决方案1】:

    使用 PHP 无法上传大于 PHP 允许限制的文件,就这么简单。

    可能的解决方法包括 using a client-side technology - like Java,不确定 Flash 和 Javascript 是否可以做到这一点 - 将原始文件“拆分”成更小的块。

    【讨论】:

      【解决方案2】:

      简单的答案是,由于 apache 处理发布数据的方式,您不能这样做。

      如果您坚持上传更大的文件并且仍然使用 php 作为后端,您可以使用 php sockets api 编写一个简单的文件上传接收器并将其作为独立服务运行。一些好的细节可以在http://devzone.zend.com/article/1086#Heading8找到

      【讨论】:

        【解决方案3】:

        您可以基于 PHP 的套接字做一些有趣的事情。您是否考虑过用 Java 编写一个小程序来将文件上传到监听的 PHP 守护程序?这可能不适用于大多数专业托管服务提供商,但如果您正在运行自己的服务器,则可以使其正常工作。考虑以下顺序:

        1. Applet 启动,向 PHP 发送请求以打开监听套接字
          1. (您可能需要用 Java 编写一个基本的 Web 浏览器才能完成这项工作)
        2. Java Applet 从文件系统中读取文件并通过步骤 1 中创建的套接字将其上传到 PHP。

        这不是最干净的方法,但是如果您在 php.ini 文件中禁用 PHP 脚本超时,那么您可以做一些工作。

        【讨论】:

          【解决方案4】:

          虽然这是一篇旧文章,但在寻找使用 PHP 处理大文件上传的解决方案时,您可以通过 google 轻松找到它。 我仍然不确定是否可以上传增加内存限制的文件,但我认为很有可能。在寻找解决这个问题的方法时,我发现了相互矛盾的来源。 PHP手册指出

          post_max_size:设置允许发布数据的最大大小。 此设置也会影响文件上传。 要上传大文件,此值必须 大于upload_max_filesize。如果 内存限制由您启用 配置脚本,memory_limit 也 影响文件上传。一般来说 说, memory_limit 应该是 大于 post_max_size。 (http://php.net/manual/en/ini.core.php)

          ...这意味着您的内存限制应该大于您要上传的文件。然而,php.net 的另一位用户(alice-dsl dot com 的 ragtime)表示:

          我不相信“memory_size”应该是 上传的文件。这些文件是 绝对没有记在心里…… 而是上传了每个 1MB 的块 存储在 /var/tmp 下及以后 在移动到之前在 /tmp 下重建 网络/用户空间。

          我正在运行一个只有 64MB 的 linux-box RAM,将 memory_limit 设置为 16MB 并上传大小约为 100MB一点问题都没有! (http://php.net/manual/en/features.file-upload.php)

          他报告了垃圾收集器的一些其他相关问题,但也说明了如何解决这些问题。如果这是真的,上传的文件大小很可能会增加内存限制。 (但请注意,另一件事可能是处理上传的文件 - 然后您可能必须将其加载到内存中)

          在我自己尝试使用 PHP 处理大文件上传之前,我正在写这篇文章,因为我正在评估使用 php 或 python 来完成此任务。

          【讨论】:

            猜你喜欢
            • 2014-11-23
            • 1970-01-01
            • 2012-01-15
            • 2015-12-18
            • 2015-02-13
            • 1970-01-01
            • 2018-04-07
            • 2016-12-10
            • 2020-06-01
            相关资源
            最近更新 更多