2012-12-16 146 views
0

我使用下面的代碼從另一臺服務器下載zip文件,其中包含超過1,000個圖像。源zip文件正在下載並創建/複製到我的服務器,但代碼似乎停止在這一點上。下面的if else的echo輸出甚至不顯示。shell_exec解壓縮文件大小限制

我最初的CURLOPT_TIMEOUT設置爲240,但那不夠長。我會得到curl超時錯誤。隨着zip文件接近100MB,我認爲需要大約15分鐘才能完成。因此,我將CURLOPT_TIMEOUT設置爲1200,因爲源zip大小會每天都有所不同。

任何想法,爲什麼它停止工作?是否有需要更改的設置?

$source_photos_file = 'source_photos_file.zip'; 
$curl = curl_init(); 
$destination_photos_file = fopen($_SERVER['DOCUMENT_ROOT'].'/files/photos.zip', 'w'); 

curl_setopt($curl, CURLOPT_URL, FTP_URL.$source_photos_file); #input 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($curl, CURLOPT_TIMEOUT, 1200); 
curl_setopt($curl, CURLOPT_FILE, $destination_photos_file); #output 

if (curl_exec($curl) === false) 
{ 
    echo '<p>Curl error: ' . curl_error($curl). ' - error # '.curl_errno($curl).'</p>'; 
} 
else 
{ 
    echo '<p>Done without any errors</p>'; 
} 

curl_close($curl); 
fclose($destination_photos_file); 

$photos_unzip_result = shell_exec('unzip -P password '.$_SERVER['DOCUMENT_ROOT'].'/files/photos.zip -d '.$_SERVER['DOCUMENT_ROOT'].'/files/pics_test/'); 
+0

你看過你的Web服務器日誌嗎? –

+0

這是在cron中完成的嗎?如果是這樣,你應該知道,在這裏使用的工具比PHP更好。整個事情可以被壓縮成一個兩行的shell腳本。 – Charles

+0

您在'fclose'處有錯字。 –

回答

2

仔細看看你在這裏實際做了什麼。除了基本的故障排除提示錯誤水平最高的記錄,並按照錯誤日誌,看看你真正做到:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  

你明確地告訴捲曲返回的下載,這意味着它被複制到內存。禁用該選項,特別是您已經指定了輸出文件。

我不能說這是否解決了您的問題,但我希望這會有所幫助。記錄正確的錯誤提供具體的錯誤信息,如通知,警告和錯誤。

+0

不幸的是,這沒有奏效。我檢查了我能想到的所有日誌,並打開了所有錯誤報告,並且沒有記錄或顯示錯誤。正如我上面提到的,在創建目標zip文件後,if else語句的echo輸出甚至不會顯示。當使用其他較小的zip文件時,if else語句和echo $ photos_unzip_result會顯示。從100MB下一個尺寸大約是15MB。 – spiderling

+0

您可以啓用詳細度並直接記錄到STDERR/STDOUT(不要臨時存儲和倒帶)捲曲。是你做的嗎?與http://stackoverflow.com/a/9707622/367456 – hakre

+0

比較感謝hakre。我終於得到了STDERR寫入一個文件。用curl_exec($ curl)替換我的代碼中的if else語句。此行之後的任何回波都不會顯示,也不會產生錯誤。該文件中的詳細信息也沒有錯誤。它顯示了連接以及要更改到我需要的文件所在的目錄的命令。檢索文件,完成傳輸並關閉連接。這似乎顯然是與我試圖下載和複製zip的大小有關的問題,因爲我沒有這個問題與較小的大小的zip文件。沒有錯誤是令人沮喪的。 – spiderling