簡體   English   中英

停止PHP卷曲下載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM