我想创建一个不属于php上传限制的上传脚本。 可能有一个场合,我需要上传2GB或更大的文件,我不想将整个服务器执行更改为32MB以上。
有没有办法直接从php写入磁盘?
你建议有人用什么方法来实现这个目标?我已经阅读了堆栈溢出,但还没有找到我想要做的事情。
答案 0 :(得分:2)
简单的答案是,由于apache处理发布数据的方式,你不能这样做。
如果您坚持要更大的文件上传并仍然使用php作为后端,您可以使用php套接字api编写一个简单的文件上传接收器,并将其作为独立服务运行。在http://devzone.zend.com/article/1086#Heading8
上可以找到一些很好的细节答案 1 :(得分:2)
虽然这是一篇旧帖子,但在寻找使用PHP处理大文件上传的解决方案时,您可以通过谷歌轻松找到它。 我仍然不确定是否可以上传增加内存限制的文件,但我认为它们很有可能。在寻找这个问题的解决方案时,我发现了矛盾的消息来源。 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来评估此任务。
答案 2 :(得分:1)
使用PHP上传大于PHP允许限制的文件是不可能的,就这么简单。
可能的解决方法包括using a client-side technology - like Java,不确定Flash和Javascript是否可以执行此操作 - 以较小的块“拆分”原始文件。
答案 3 :(得分:1)
你可以根据PHP的套接字做一些有趣的事情。您是否考虑过用Java编写applet将文件上传到监听的PHP守护进程?这可能不适用于大多数专业托管服务提供商,但如果您运行自己的服务器,则可以使其正常运行。请考虑以下顺序:
这不是最干净的方法,但是如果你在php.ini文件中禁用PHP脚本超时,那么你可以做一些工作。