php如何?長時間下載不中斷,急!急!急!

來源:互聯網
上載者:User
php長時間下載不中斷

求一個php長時間迴圈下載網站api檔案不中斷的方法
或者求一個可以每天下載相同任務的軟體,然後放在計劃任務裡面可用的
主要用來下載api檔案
目前我是用php的copy函數下載,下1個多小時後就下載不了了,不知道什麼原因,是不是還要設定什麼東東啊???
求大神幫忙~~~~~


回複討論(解決方案)

首先,如果你要抓10W條資料 建議你不要一次全抓

抓1000條,看看執行時間,如果是1分鐘,你可以寫一條命令(linux)或者計劃任務(windows)每隔3分鐘執行一次

如果一次執行就10W條 那肯定容易出問題

學CURL的時候寫的一個下載伺服器上備份資料庫的小程式。添加個計劃任務訪問這個頁面實現下載。 

首先,如果你要抓10W條資料 建議你不要一次全抓

抓1000條,看看執行時間,如果是1分鐘,你可以寫一條命令(linux)或者計劃任務(windows)每隔3分鐘執行一次

如果一次執行就10W條 那肯定容易出問題

您好,謝謝您的解答
說明下,下載的單個檔案不是很大,只有幾兆-30兆之間
主要是檔案有600多個,導致長時間下載程式中斷了
之前是有做個資料庫來儲存下載記錄用於判斷,但是是分多次執行完成的
有沒有什麼方法,可以一次性執行完成
或者有什麼軟體可以實現這樣的功能


首先,如果你要抓10W條資料 建議你不要一次全抓

抓1000條,看看執行時間,如果是1分鐘,你可以寫一條命令(linux)或者計劃任務(windows)每隔3分鐘執行一次

如果一次執行就10W條 那肯定容易出問題

您好,謝謝您的解答
說明下,下載的單個檔案不是很大,只有幾兆-30兆之間
主要是檔案有600多個,導致長時間下載程式中斷了
之前是有做個資料庫來儲存下載記錄用於判斷,但是是分多次執行完成的
有沒有什麼方法,可以一次性執行完成
或者有什麼軟體可以實現這樣的功能


很抱歉我還沒聽說過有這樣的軟體... 很多碼農和我一樣在面對複雜需求的死後喜歡自己寫個代碼來跑....

就用你的方法不是挺好麼 用資料庫儲存下下載記錄,每次下載固定個數,下次執行時從未記錄處開始繼續下載,然後跑計劃任務或者wget即可

也許你需要 set_time_limit(0);?

學CURL的時候寫的一個下載伺服器上備份資料庫的小程式。添加個計劃任務訪問這個頁面實現下載。  
您好,謝謝您的解答
我下載的是別人伺服器上的api檔案沒ftp
剛用您的程式試了下,好像不能下載,不知道是不是我改的有錯,您幫忙看下
header("content-type:text/html;charset=utf-8");set_time_limit(0);$curl = curl_init();$target_file = 'http://www.meituan.com/api/v2/changle/deals';//這樣的檔案有600多個curl_setopt($curl,CURLOPT_URL,$target_file);curl_setopt($curl, CURL_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_VERBOSE, 1);curl_setopt($curl, CURLOPT_FTP_USE_EPSV, 0);curl_setopt($curl,CURLOPT_TIMEOUT,300);curl_setopt($curl, CURLOPT_USERPWD, "update:windcms");$target_path = '';if(is_dir($target_path)){$outfile = fopen($target_path.'/'.date("Ymd",time()).'.xml',"w+");curl_setopt($curl,CURLOPT_FILE,$outfile);$info = curl_exec($curl);fclose($outfile);$error_no = curl_errno($curl);if($error_no === 0){echo "下載成功!";}else{echo "下載失敗!";}curl_close($curl);}

也許你需要 set_time_limit(0);?
您好,這個我有用,但還是運行到1個多小時程式就斷了,請問下還需要設定什麼嗎?


學CURL的時候寫的一個下載伺服器上備份資料庫的小程式。添加個計劃任務訪問這個頁面實現下載。  
您好,謝謝您的解答
我下載的是別人伺服器上的api檔案沒ftp
剛用您的程式試了下,好像不能下載,不知道是不是我改的有錯,您幫忙看下
header("content-type:text/html;charset=utf-8");set_time_limit(0);$curl = curl_init();$target_file = 'http://www.meituan.com/api/v2/changle/deals';//這樣的檔案有600多個curl_setopt($curl,CURLOPT_URL,$target_file);curl_setopt($curl, CURL_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_VERBOSE, 1);curl_setopt($curl, CURLOPT_FTP_USE_EPSV, 0);curl_setopt($curl,CURLOPT_TIMEOUT,300);curl_setopt($curl, CURLOPT_USERPWD, "update:windcms");$target_path = '';if(is_dir($target_path)){$outfile = fopen($target_path.'/'.date("Ymd",time()).'.xml',"w+");curl_setopt($curl,CURLOPT_FILE,$outfile);$info = curl_exec($curl);fclose($outfile);$error_no = curl_errno($curl);if($error_no === 0){echo "下載成功!";}else{echo "下載失敗!";}curl_close($curl);}
用readdir遍曆下目錄,迴圈執行下載就行了,反正用set_time_limit(0);設定了指令碼執行時間無限制,你所有檔案估計有6G以上吧。


也許你需要 set_time_limit(0);?
您好,這個我有用,但還是運行到1個多小時程式就斷了,請問下還需要設定什麼嗎?

我個人表示...很正常... PHP在處理長時間的程式上確實比較?,當然,必須強調的是這是個人看法,理論上在嚴苛的環境下能夠順利執行?(穩定的網路環境+足夠巨大的記憶體

還是分開抓吧...


您好,因為下載完成後,還需要匯入到資料庫,但是我不知道什麼時候才下載完,這個要用什麼方式來做判斷比較好呢?
還有一點,目前是在計劃任務裡面,添加批處理的方式開啟程式,然後執行10秒後自動關閉掉進程,但是程式還是有執行下載1個多小時後才中斷,這樣對伺服器會有什麼影響嗎?



學CURL的時候寫的一個下載伺服器上備份資料庫的小程式。添加個計劃任務訪問這個頁面實現下載。  
您好,謝謝您的解答
我下載的是別人伺服器上的api檔案沒ftp
剛用您的程式試了下,好像不能下載,不知道是不是我改的有錯,您幫忙看下
header("content-type:text/html;charset=utf-8");set_time_limit(0);$curl = curl_init();$target_file = 'http://www.meituan.com/api/v2/changle/deals';//這樣的檔案有600多個curl_setopt($curl,CURLOPT_URL,$target_file);curl_setopt($curl, CURL_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_VERBOSE, 1);curl_setopt($curl, CURLOPT_FTP_USE_EPSV, 0);curl_setopt($curl,CURLOPT_TIMEOUT,300);curl_setopt($curl, CURLOPT_USERPWD, "update:windcms");$target_path = '';if(is_dir($target_path)){$outfile = fopen($target_path.'/'.date("Ymd",time()).'.xml',"w+");curl_setopt($curl,CURLOPT_FILE,$outfile);$info = curl_exec($curl);fclose($outfile);$error_no = curl_errno($curl);if($error_no === 0){echo "下載成功!";}else{echo "下載失敗!";}curl_close($curl);}
用readdir遍曆下目錄,迴圈執行下載就行了,反正用set_time_limit(0);設定了指令碼執行時間無限制,你所有檔案估計有6G以上吧。
嗯,是的,差不多有5G左右


您好,因為下載完成後,還需要匯入到資料庫,但是我不知道什麼時候才下載完,這個要用什麼方式來做判斷比較好呢?
還有一點,目前是在計劃任務裡面,添加批處理的方式開啟程式,然後執行10秒後自動關閉掉進程,但是程式還是有執行下載1個多小時後才中斷,這樣對伺服器會有什麼影響嗎?


這類問題不是具體的某個語句的問題,所以我只能說我的思路無法保證這樣就一定能行或者是最好的

你可以copy之前和copy完完之後再資料庫寫兩個開始/結束標誌

在php檔案copy之前檢查上一個程式是否執行完畢,如果沒有就退出,如果有,就寫上開始標誌開始copy

這樣根本不存在執行一個多小時的問題吧...



您好,因為下載完成後,還需要匯入到資料庫,但是我不知道什麼時候才下載完,這個要用什麼方式來做判斷比較好呢?
還有一點,目前是在計劃任務裡面,添加批處理的方式開啟程式,然後執行10秒後自動關閉掉進程,但是程式還是有執行下載1個多小時後才中斷,這樣對伺服器會有什麼影響嗎?


這類問題不是具體的某個語句的問題,所以我只能說我的思路無法保證這樣就一定能行或者是最好的

你可以copy之前和copy完完之後再資料庫寫兩個開始/結束標誌

在php檔案copy之前檢查上一個程式是否執行完畢,如果沒有就退出,如果有,就寫上開始標誌開始copy

這樣根本不存在執行一個多小時的問題吧...

您好,執行一個小時是因為下載的檔案數量太多了,因為我是迴圈下載的,下載到哪裡停下,下次就從哪裡再下載

好吧,我不知道如何讓下載5G檔案的PHP程式穩定執行好幾個小時

剛才說的都是迴圈抓取的方案,如果要用一次抓取的,個人表示無法給出有效建議.

好吧,我不知道如何讓下載5G檔案的PHP程式穩定執行好幾個小時

剛才說的都是迴圈抓取的方案,如果要用一次抓取的,個人表示無法給出有效建議.
您好,如果用wget的話可以實現一次性抓取嗎?
因為我沒用過wget,所以請教下

wget有斷點續傳功能 不過我沒這樣用過 可參閱

http://xinkang120.blog.163.com/blog/static/194668223201188114417360/

PHP斷點下載,可以找相關外掛程式。

如果是windows伺服器,可以考慮cmd執行,這個是沒有逾時 時間,且不會掉線的。

上次用這個方法抓取了5000多個flash小遊戲檔案,掛在伺服器執行即可。


另外:如果想儘快下載的話,可以考慮不用PHP,使用PHP把抓取到得待採集檔案地址入庫,匯出成列表。匯入到迅雷或者其他下載軟體進行批量下載,話說這個方法也試過,還不錯

如果是windows伺服器,可以考慮cmd執行,這個是沒有逾時 時間,且不會掉線的。

上次用這個方法抓取了5000多個flash小遊戲檔案,掛在伺服器執行即可。


另外:如果想儘快下載的話,可以考慮不用PHP,使用PHP把抓取到得待採集檔案地址入庫,匯出成列表。匯入到迅雷或者其他下載軟體進行批量下載,話說這個方法也試過,還不錯

您好,謝謝您的解答
第一種方法是用cmd執行php檔案嗎?如果是的話,我試過用cmd來處理網頁也會逾時的啊,不知道是不是我的方法不對,如果不是的話要怎麼弄呢?
第二種用迅雷的話,要怎麼做才能夠每天都運行一次呢?因為我下載的連結是相同的,只是內容每天都有更新,但是迅雷下載完後好像不能重複下載,請教下這個要怎麼設定?

看樣子,你這種情況用迅雷是不行的,是一個計劃任務。迅雷貌似沒有提供什麼介面給程式用。

用cmd的話,就是執行PHP檔案,這裡面沒有逾時的,即使php.ini配置了逾時時間。比較簡單的方法就是把PHP加入到系統Path裡面(不曉得這個你會不會,不會的話google下),然後寫一個bat檔案就行了

php d:\wwwroot\cmd\task.phppause


這個task.php就是你用HTTP訪問網頁來執行任務的檔案。把這個儲存為.bat檔案。雙擊執行即可,也可以加入到計劃任務中,每天執行。

學CURL的時候寫的一個下載伺服器上備份資料庫的小程式。添加個計劃任務訪問這個頁面實現下載。 此法可解 

這種用shell來做不是更好啊

偶這邊光纖也不敢保證很耗時的多檔案下載能一次完成,我總是多次執行跳過已完成的確保全部下載完成
wget 或其他命令列用戶端有檢測跳過(或續傳,續傳一般建立在位元組數固定的情況)的功能

如果想自動化,建議用log,記錄儀下載完成的或出錯的
迴圈N次,跳過完成的,重新下載出錯的,直到log內記錄全部都完成
或者log只記錄出錯的,迴圈下載直到log記錄為0

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.