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

标签 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。

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

最佳答案

如果您处于浏览器环境中,浏览器将在一定时间后超时,因此将停止监听脚本的输出,即使脚本将继续运行。不同浏览器的时间有所不同,但我看到的数字是 30 秒。

为了解决这个问题,您应该经常发送输出(即使毫无意义 echo "<!--empty comment-->"; )。

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

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

关于php - 在 PHP 中使用 cURL 下载大文件 - 页面挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4292216/

相关文章:

php - "Cluster analysis"与 MySQL

php - 使用干预将图像的 DPI 从 72 更改为 300

javascript - 切换嵌套列表中的链接不可单击

php - 表单提交后调用 onclick javascript 事件

php - 使用发送网格 api key 发送邮件

php - 无法将 Azure ML API 与 PHP 集成

php - 如何与用户共享网络应用程序的实时源代码?

php - Pubnub PHP 订阅函数

javascript - 使用 JSX 在 ReactJs 中创建类

php - 使用 curl 激活谷歌分析?