2013-01-18 27 views
0

我正在發出一個http請求,它將返回所有我的文件壓縮。但是,嘗試打開zip文件後,它將返回爲整數。無法從http請求解壓ZIP文件

$zip = zip_open("http://this/returns/zip/file"); 

while($zipFile = zip_read($zip)) 
{ 
    echo "Filename: " . zip_entry_name($zipFile) . "<br>"; 
    echo "Compressed Size: " . zip_entry_compresedsize($zipFile) . "<br>"; 
    echo "Real Size: " . zip_entry_filesize($zilFile) . "<br><br>"; 
} 

這裏有什麼問題和如何能解決嗎?提前致謝。

編輯:碼數是11。

+4

這個數字是一個錯誤代碼,根據文檔。 – Crontab

回答

1

如在評論中提及@crontab,zip_open失敗時返回錯誤代碼,如在解釋the documentation

返回值

返回一個資源句柄,以供以後與zip_read()和zip_close()一起使用,或者在文件名不存在或其他錯誤的情況下返回錯誤的數量。

你可以決定你看到的錯誤代碼是指它與this manual page預定義的錯誤常量,特別是與ER_開始常量比較。

該頁面上有一個註釋,顯示每個常量的字面值是什麼,但我不知道它有多準確。


我剛剛看到您的編輯,您所看到的錯誤代碼是整數11。該錯誤代碼是ZIPARCHIVE::ER_OPEN,這意味着PHP無法打開該文件。

您應該檢查以確保您使用的文件名是準確的,並且該文件可被PHP讀取。在嘗試打開任何文件之前,您可以使用is_readable函數進行檢查。

請記住,只是因爲可以打開系統上的文件並不意味着PHP可以。用戶之間的文件權限不同,並且PHP很可能不在您的用戶帳戶下運行。


好吧,我剛剛意識到你正試圖通過URL打開這個文件。我不確定zip_open是否可以打開遠程文件,但我確信存在的遠​​程文件在我的機器上快速測試似乎表明它不能。 is_readable同樣無法處理遠程文件。

在這種情況下,你做的最好的事情就是下載遠程文件,然後調用zip_open新創建的本地文件:

copy($remote_filename, $local_filename); 
$zip = zip_open($local_filename); 
if (is_resource($zip) { 
    // process archive 
} else { 
    // handle error conditions 
} 
+0

偉大的提示,is_readable沒有返回任何東西,所以我假設它不可讀。 –

+0

@unwiseguy我剛剛意識到你正在打開一個遠程文件(儘管它在問題標題 - 呃!)。 'zip_open'可能不適用於此。看我最近的編輯。 – AgentConundrum

+0

感謝您的重新發帖,我確實發現了您之前發佈的相同答案。再次感謝! –