2010-05-18 81 views
5

我想创建一个不属于php上传限制的上传脚本。 可能有一些情况需要上传2GB或更大的文件,我不希望将整个服务器的执行更改为32MB以上。用php直接写入磁盘

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

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

回答

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

1

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

  1. 小程序启动时,将请求发送到PHP打开一个监听套接字
    1. (你可能不得不用Java编写一个基本的网页浏览器,使这项工作)
  2. Java小程序读取文件系统,并上传到通过套接字的PHP在步骤1

不清晰的方式牛逼创建的文件做到这一点,但如果你在你的php.ini文件中禁用了PHP脚本超时,那么你可以做一些工作。

2

尽管这是一篇旧文章,但您在寻找解决方案来处理使用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其他用户(拉格泰姆在爱丽丝DSL点com)指出:

我不相信神话“memory_size”应该是 上传的文件大小。这些文件是 绝对不会保存在内存中...... 取而代之上传1MB的块每个 存储在/ var/tmp下,之后在 下重建/ tmp,然后移动到 web /用户空间。

我运行Linux开箱即用的只有64MB RAM ,memory_limit的设置为16MB ,并在所有上传大小的文件约100MB 是没有问题的! (http://php.net/manual/en/features.file-upload.php

他报告了垃圾收集器的一些其他相关问题,但也说明了如何解决它们。如果是这样,上传的文件大小可能会增加内存限制。 (但是,请注意,另一件事可能是处理上传的文件 - 那么你可能需要将它加载到内存中)

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