您查询的关键词是:php   收藏与 取消 
下面是原始网址 https://cloud.tencent.com/developer/ask/192267 在 2021-02-16 00:22:39 的快照。

360搜索与该网页作者无关,不对其内容负责。

用PHP取消cURL请求 - 问答 - 云+社区 - 腾讯云

PHP取消cURL请求

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (517)

我试图用PHP取消已经启动的cURL请求。由于我已经找到了一个很好的解决方案,因此我在遇到了一个unlink函数,因为cURL正在下载内容,所以它际上不起作用。

unlink(/foobar/foo.txt): Resource temporarily unavailable in /project/delete.php on line 16

这段代码是我在被困住的地方:

unlink($fileLocation);

由于我对cURL没有经验,我不知道如何设法停止在我的下载部分中完成的cURL请求:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_exec($ch);

基本上是用例:用户下载文件,也应该有可能取消下载。我怎么能设法做到这一点?

提问于
用户回答回答于

假设您正在将下载脚本作为守护程序运行,您可以使用CURLOPT_PROGRESSFUNCTION选项:(否则,您可以通过离开页面或中止xhr来中止请求)

如文档中所述:

返回非零值以中止传输。在这种情况下,传输将设置CURLE_ABORTED_BY_CALLBACK错误。

因此,您可以使用一个回调函数来检查数据库值是否设置为true,如果是,则返回1将中止curl。

然后,当您的用户单击“取消”按钮时,您应该更新数据库并将该值设置为true。

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progressCallback');
curl_exec($ch);
if (curl_errno($ch) === CURLE_ABORTED_BY_CALLBACK) {
// Callback aborted
}
function shouldAbortDownload()
{
// Check the database if should abort the download.
}
static $lastCheckTime = 0;
function progressCallback($ch, $download_size = 0, $downloaded = 0, $upload_size = 0, $uploaded = 0)
{
if ((time() - $lastCheckTime) > 4)
if (shouldAbortDownload()) {
return 1;
}
$lastCheckTime = time();
}
}

扫码关注云+社区

领取腾讯云代金券