2012-08-31 86 views
0

在過去的一個小時中,我一直在搜索,添加和解決如何解壓文件失敗。 我正在使用php定期下載zip。我需要將壓縮文件的內容提取到一個名爲zips的文件夾,並不重要(只是不同的目錄)。我使用無限空間和帶寬共享主機,如果這有什麼區別。無法解壓縮PHP中的文件

我下載的zip文件是1 zip,裏面有5個拉鍊,在這5個拉鍊的每一個裏面都有1 csv。我需要讀取每個csv並將信息存儲到一個數據庫中,我已經擁有該代碼,但無法打開任何zip文件。

我已經嘗試了下面的代碼,並且我沒有對任何一個運氣。 我也試過php.net上的解壓縮函數,但沒有運氣。

有什麼建議嗎?

$local_file = '_08222012_213000.zip'; 
$zip = zip_open($local_file); 
if (is_resource($zip)) { 
    while ($zip_entry = zip_read($zip)) { 
    $fp = fopen(zip_entry_name($zip_entry), "w"); 
    if (zip_entry_open($zip, $zip_entry, "r")) { 
     $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); 
     fwrite($fp,"$buf"); 
     zip_entry_close($zip_entry); 
     fclose($fp); 
    } 
    } 
    zip_close($zip); 
} 

這一個沒有工作之一:

$zip = new ZipArchive; 
$res = $zip->open($local_file); 
if ($res === TRUE) { 
    $zip->extractTo('zips/'); 
    $zip->close(); 
    echo 'ok'; 
} else { 
    echo 'failed'; 
} 
} 

編輯:我得到這個代碼工作,如果任何人有在未來的問題。

//Change directory 
chdir("zips/"); 
exec("unzip ./$local_file"); 
+6

字符串「沒有運氣」和「沒有工作」不是PHP中的內置錯誤消息。確實**你的代碼是如何工作的?你有沒有收到任何錯誤訊息? – 2012-08-31 15:18:14

+0

會發生什麼?你有任何錯誤信息?你在PHP中啓用了錯誤消息嗎? –

+0

我得到的唯一的錯誤消息是在下面,但是在php.net上指出:警告:zip_read()期望參數1是資源,在/home/cindyhod/public_html/test/ftp/ftp2.php在線72 –

回答

1

您的PHP安裝似乎沒有安裝zip支持。如果你使用的是windows,PHP應該帶有DLL(我記得),你應該在你的PHP.ini文件中找到它對應的extensions =行來啓用它。

如果您使用Linux,根據您的發行版,您可以通過包管理器安裝該擴展。或做:

sudo pecl install zip 

有關如何安裝它的更多信息,請參閱http://www.php.net/manual/en/zip.installation.php

我的另一個建議是確保文件的權限是PHP進程(通常作爲web服務器進程運行)可以訪問該文件。還要確保該路徑可供網絡服務器訪問,I.E.在public_html目錄中(這被認爲是共享主機將chroot PHP切換到webroot目錄的最佳實踐)。

+0

我有共享主機。 –

+0

@Iphphp請求您的主機啓用/安裝zip擴展。您可以通過檢查echo phpinfo()的結果來驗證我是否正確。如果沒有zip擴展名,你將無法做到這一點(除非你想寫一個純粹的PHP zip實現......這是毫無意義的)。 – hsanders

+0

我在哪裏查找是否啓用了拉鍊?在底部「註冊的PHP流| https,ftps,compress.zlib,compress.bzip2,php,文件,glob,數據,http,ftp,phar,zip」zip是最後一個。 –