2010-01-13 102 views
3

可能重複:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select打開拉鍊和閱讀內容

我有一點點的PHP,應用程序或任何打開拉鍊和讀取內容。但它只適用於某些時候...有時當我上傳.zip並嘗試查看內容時,它可以正常工作並將每個文件回顯給我,但有些時候(是的,我有很多.zip文件),它返回這些錯誤:

Warning: zip_read() expects parameter 1 to be resource, integer given in /home/blah/public_html/templates.php on line 23 

Warning: zip_close() expects parameter 1 to be resource, integer given in /home/blah/public_html/templates.php on line 31 

這裏是我的代碼:

$open = zip_open($file); 
while($zip = zip_read($open)) { 
$file = zip_entry_name($zip); 
echo $file.'<br />'; 
} 
zip_close($open); 

回答

8

哪裏發生這種情況的情況下,當Zip文件無法打開的案例。

Zip_open()當遇到錯誤時返回一個整數而不是文件句柄。 Documentation

返回資源句柄與zip_read()和zip_close(以後使用)或返回錯誤的號碼,如果文件名不存在或其它錯誤的情況下。

你需要輸出$open並檢查它給你什麼錯誤代碼。您應該在嘗試運行任何zip操作之前將其作爲固定支票構建到代碼中。

This table會告訴你哪個錯誤代碼意味着什麼。

+3

打我吧。刪除我的,upvoted你的 – Gordon 2010-01-13 22:54:01

+0

你應該將其作爲一般規則檢查這一些在代碼中的一箇中止,而不是jsut期待它是好的。 – prodigitalson 2010-01-13 22:55:37

+0

一個簡單的檢查可能是if(is_numeric($ open)){// fail} else {while ....} – UnkwnTech 2010-01-13 22:59:00

2
$open = zip_open($file); 

if (is_numeric($open)) { 
    echo "Zip Open Error #: $open"; 
    } else { 
    while($zip = zip_read($open)) { 
    ..... 
    }