使用PHP直接向磁盘写入数据

5
我想创建一个上传脚本,不会受到php上传限制的影响。有时我需要上传2GB或更大的文件,而我不想将整个服务器执行更改为超过32MB。
有没有一种方法可以从php直接写入磁盘?
你会建议使用什么方法来实现这一点?我在stackoverflow上查看了一些内容,但还没有找到我要做的事情。
4个回答

2
简单的回答是由于apache处理post数据的方式,你无法做到。
如果你坚持要上传更大的文件并仍然使用php作为后端,你可以编写一个简单的文件上传接收器,使用php sockets api,并将其作为独立服务运行。一些好的细节可以在这里找到:http://devzone.zend.com/article/1086#Heading8

2
虽然这是一个旧帖子,但当您在Google上寻找使用PHP处理大文件上传的解决方案时,您会很容易地找到它。我仍然不确定增加内存限制的文件上传是否可能,但我认为有很大的机会。在寻找解决此问题的方法时,我发现了矛盾的来源。PHP手册指出:

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

…这意味着您的内存限制应该比您想上传的文件更大。然而,另一个用户(ragtime at alice-dsl dot com)在php.net上指出:

我不相信“memory_size”应该与上传文件的大小相同的神话。文件绝对不会保存在内存中...相反,每次上传1MB的块都存储在/var/tmp下,并在移动到Web/用户空间之前在/tmp下重建。我正在运行只有64MB RAM的Linux-box,将memory_limit设置为16MB,上传大约100MB大小的文件根本不是问题!(http://php.net/manual/en/features.file-upload.php)他报告了一些与垃圾收集器相关的其他问题,但也说明了它们如何解决。如果这是真的,上传文件大小可能会增加内存限制。(然而,请注意,另一件事可能是处理上传的文件-那么您可能必须将其加载到内存中)

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


1

使用PHP无法上传比PHP允许的限制更大的文件,这很简单。

可能的解决方法包括使用客户端技术 - 如Java,不确定Flash和Javascript是否可以这样做- 将原始文件“分割”成较小的块。


1

你可以利用PHP的套接字(Socket)做一些有趣的事情。你考虑过通过写一个Java小程序上传文件到监听PHP守护进程吗?虽然这在大多数专业托管提供商那里可能行不通,但如果你运行自己的服务器,你就可以让它工作。请参考以下步骤:

  1. 小程序启动后,发送一个请求给PHP打开一个监听套接字
    1. (你可能需要编写一个基本的Java浏览器来使其工作)
  2. Java小程序从文件系统中读取文件,并通过第一步创建的套接字上传至PHP。

虽不是最干净的方法,但如果你在php.ini文件中禁用了PHP脚本超时,那么你就可以让它工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接