使用本机PHP函数在PHP中下载/恢复大文件

时间:2010-12-12 23:46:44

标签: php curl fopen

我必须在PHP中实现一个简单的文件下载客户端,能够下载大文件并恢复它们。

有没有办法可以在PHP中下载大文件(> 700 MB)并且仍然将我的PHP内存限制为128M?我猜这与写入文件指针有关。有关使用哪个文件处理函数的任何线索?有这么多。我猜fopen,flock,(fwrite,fgets,fread),fclose。或者我应该使用cURL?

如何恢复已损坏的下载?脚本执行超时,用户停止脚本,远程服务器超时等?

2 个答案:

答案 0 :(得分:2)

通过设置CURLOPT_FILECURLOPT_RESUME_FROM options,可以使用cURL。我不确定cURL是否会覆盖文件或附加到文件,也不确定它是否会将文件缓冲在内存中或直接写入磁盘。你可能需要在那里做一些测试。

如果您想要更好地控制整个过程,可以使用fsockopen创建与您正在下载的服务器的原始连接,并使用普通fread来写入和读取此连接和fwrite函数。您必须向连接发送(fwrite)正确的HTTP标头以启动传输 - 最重要的是Range header以恢复传输 - 然后使用fread读取几个字节,然后将它们写入文件并重复,直到传输完成。

答案 1 :(得分:0)

问题不在于PHP,而在于文件的发送方式。虽然您可以在服务器上fopen()fread()等,但您在客户端如何fopen()fwrite()?标准Javascript无法从浏览器中打开文件,您必须依赖其他方法,例如(gulp)Java applets或Flash组件(??)......

嗯,自HTML5 it might be possible以来,主流浏览器还没有完全采用它。