我必须在PHP中实现一个简单的文件下载客户端,能够下载大文件并恢复它们。
有没有办法可以在PHP中下载大文件(> 700 MB)并且仍然将我的PHP内存限制为128M?我猜这与写入文件指针有关。有关使用哪个文件处理函数的任何线索?有这么多。我猜fopen,flock,(fwrite,fgets,fread),fclose。或者我应该使用cURL?
如何恢复已损坏的下载?脚本执行超时,用户停止脚本,远程服务器超时等?
答案 0 :(得分:2)
通过设置CURLOPT_FILE
和CURLOPT_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以来,主流浏览器还没有完全采用它。