2013-03-12 46 views
0

我有一個PHP腳本,從我擁有的遠程服務器直接鏈接下載文件。有時需要大文件(〜500-600 MB),有時需要小文件(〜50-100 MB)。PHP腳本突然停止沒有任何錯誤

從腳本的某些代碼:

$links[0]="file_1"; 
$links[0]="file_2"; 
$links[0]="file_3"; 

for($i=0;$i<count($links);$i++){ 

    $file_link=download_file($links[$i]); //this function downloads the file with curl and returns the path to the downloaded file in local server 
    echo "Download complete"; 
    rename($file_link,"some other_path/..."); //this moves the downloaded file to some other location 
    echo "Downloaded file moved"; 
    echo "Download complete"; 

} 

我的問題是,如果我下載大文件並運行Web瀏覽器的腳本,它需要高達5-10分鐘即可完成,腳本回聲高達「下載完成「那麼它完全死亡。我總是發現在腳本死亡之前正在下載的文件被100%下載。

另一方面,如果我從Web瀏覽器下載50-100MB的小文件或從命令shell運行腳本,則完全不會發生此問題,並且腳本完全完成。

我正在使用我自己的VPS,並且在服務器中沒有任何時間限制。沒有致命錯誤或內存過載問題。

我也用ssh2_sftp從遠程服務器複製文件。但是當我從網頁瀏覽器運行時也遇到同樣的問它總是下載文件,執行下一行,然後死亡!很奇怪!

我該怎麼做才能克服這個問題?

+1

您是否檢查過您的Web服務器的錯誤日誌? – 2013-03-12 08:13:02

+0

剛剛脫離主題,對不起,但我無法抗拒:我記得時間,當「640KB應該足夠每個人」。而現在,50-100 MB是「小文件」。 – Voitcus 2013-03-12 08:20:52

回答

0

爲了確保您可以下載較大的文件,你必須確保有:

  1. PHP適用
  2. 最長執行期限設置得足夠高足夠的內存。

從你說的關於ssh2_sftp(我假設你通過php運行它)來判斷你的問題是第二個。檢查你的錯誤(-logs)來發現這是否是你的錯誤。如果是這樣,你只需增加settings/php.ini中的最大執行時間,並且應該修復它。

注意:我鼓勵你不要讓PHP處理這些大文件。打電話給一些程序(通過system()exec()),它會爲你做下載,因爲PHP仍然存在垃圾收集問題。

+0

你能解釋我應該在哪些文件中搜索錯誤消息嗎?檢查了apache error.log,ssl_error_log - 沒有錯誤消息。 Apache可能在不留下任何消息的情況下重新啓動? – Tamara 2015-02-20 03:57:07