我有一个 PHP 脚本,可以从不同位置下载视频。 视频文件可以是 20mb 到 100mb+ 之间的任何地方
我当前使用 PHP 将视频文件保存在使用 CURLOPT_FILE 的目录中。这工作正常,没有任何问题。
由于要下载的文件较大,我已将 cURL 超时期限设置为 45 分钟以允许下载文件。我还设置了 set_time_limit(0) 以便 PHP 页面在下载完成后继续处理。我还设置了 ini_set("memory_limit","500M"); 下载完成后,它应该回显“已下载”,然后更新 mysql 记录,表明文件已下载。
但是发生的情况是,cURL 正在正确下载视频文件,但它没有在浏览器中显示“已下载”,但它正在更新 mysql。
这是为什么呢?我试图自己想出一个解决方案,但我无法弄清楚这里的问题是什么......
最佳答案
如果您处于浏览器环境中,浏览器将在一定时间后超时,因此将停止监听脚本的输出,即使脚本将继续运行。不同浏览器的时间有所不同,但我看到的数字是 30 秒。
为了解决这个问题,您应该经常发送输出(即使毫无意义 echo "<!--empty comment-->";
)。
我最近遇到了类似的问题,我的处理方法是不从脚本中输出任何内容,而是使用 AJAX 经常从浏览器中进行轮询以查看是否已完成。
或者,不要使用浏览器环境(因为它不太适合解决此问题),而是使用命令行提示符,因为它没有(据我所知)这些超时。
关于php - 在 PHP 中使用 cURL 下载大文件 - 页面挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4292216/