[英]Stop a PHP Curl Download
我試圖找到一種方法來阻止活躍的PHP Curl下載。 我從遠程服務器下載大文件,有時我想在啟動后取消下載。 我試過在CURLOPT_PROGRESSFUNCTION
返回false,但是這不起作用。 我也嘗試刪除正在下載的文件,但也沒有用(web stats顯示下載仍在繼續)。
以下代碼通過快速ajax調用觸發:
$ch = curl_init( $file->url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOPROGRESS, false );
curl_setopt($ch, CURLOPT_FILE, $targetFile); //save the file to here
curl_setopt( $ch, CURLOPT_PROGRESSFUNCTION, function($resource, $download_size, $downloaded_size, $upload_size, $uploaded_size) use ($download_id) {
if ( $download_size == 0 ) {
$progress = 0;
} else {
$progress = round( $downloaded_size * 100 / $download_size );
}
// if download complete trigger completed function
if($progress == 100) {
self::DownloadCompleted($download_id);
}
});
$curl = curl_exec($ch);
解決方法是在CURLOPT_PROGRESSFUNCTION
函數中返回一個非零值,如注釋中的drew010。
為了完成這項工作,我在函數中添加了一個檢查以查看文件是否存在,如果該函數返回1並且中止。 我想在取消下載時在目錄中創建一個與下載ID同名的文件。 這對我來說很有用。
$ch = curl_init( $file->url ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_NOPROGRESS, false ); curl_setopt($ch, CURLOPT_FILE, $targetFile); //save the file to here curl_setopt( $ch, CURLOPT_PROGRESSFUNCTION, function($resource, $download_size, $downloaded_size, $upload_size, $uploaded_size) use ($download_id) { //if the file exists, the download is aborted if(file_exists('path/to/directory/cancel.'.$download_id)) { Self::CleanupCancelledDownload; //function to clean up the partially downloaded file, etc. return 1; //returning a non-zero value cancels the CURL download. } }); $curl = curl_exec($ch);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.