在PHP中使用cURL下载大文件 - 页面挂起

时间:2010-11-27 14:58:07

标签: php javascript curl download timeout

我有一个PHP脚本,可以从各个位置下载视频。 视频文件可以是从20mb到100mb +

的任何地方

我目前有PHP使用CURLOPT_FILE将视频文件保存在目录中。这没问题就行了。

由于要下载的大文件,我将cURL超时时间设置为45分钟,以允许下载文件。我还设置了set_time_limit(0),以便在下载完成后继续处理PHP页面。我还设置了ini_set(“memory_limit”,“500M”); 下载完成后,它应回显“已下载”,然后更新一条说明文件已下载的mysql记录。

正在发生的事情是,视频文件是由cURL正确下载的,但它没有在浏览器中显示“已下载”但是它正在更新mysql。

这是为什么?我自己试图提出一个解决方案,但我无法弄清楚这里的问题是什么......

1 个答案:

答案 0 :(得分:1)

如果您处于浏览器环境中,浏览器将在一段时间后超时,因此即使脚本将继续运行,也会停止侦听脚本的输出。它因浏览器而异,但我看到的数字是30秒。

要解决此问题,您应该经常发送输出(即使是无意义的echo "<!--empty comment-->";)。

我最近遇到了类似的问题,我通过不输出脚本中的任何内容来处理它,而是经常使用AJAX从浏览器轮询以查看是否已完成。

或者,不要使用浏览器环境(因为它不适合这个问题),而是使用命令行提示符,因为它没有(据我所知)这些超时。