2012-07-09 41 views
4

我完全無法解釋爲什麼這不起作用。幫幫我!PHP Zip檔案 - 打開或extractTo不起作用

$archive = "x.zip"; 
$zip = new ZipArchive(); 
$res = $zip->open($archive); 

if ($res === 'TRUE') { 
    $unzip_success= $zip->extractTo('/temp/', "inscriptions.txt") 

    $zip->close(); 
} 
  • 目標目錄 「TEMP」 是 「0777」 的權限
  • 從$ RES獲得的代碼爲 「11」,並在PHP.net
  • 所要求的文件不是 「TRUE」注意:必須把爲$歸檔的完整URL和extractTo
+0

感謝hardik,對於我感興趣的任何人,系統(「unzip x.zip inscriptions.txt -d temp」);它的工作原理。 – 2012-07-09 20:22:18

回答

3

實在不行再檢查,如果你的服務器是Linux。 如果你的linux可以運行unzip命令來通過php的system/exec函數解壓你的文件。 即

system("unzip archive.zip"); 

提取特定的文件,您可以檢查人的文檔解壓縮。很多時候由於服務器參數,zip庫不能按預期工作,在這種情況下,我切換回linux命令。

2

的第一個參數的問題是,你引用TRUE,這是一個關鍵字,應該沒有單引號離開。此外,您可以檢查該文件中的萃取前zip歸檔存在與locateName

$archive = "x.zip"; 
$zip = new ZipArchive(); 
$res = $zip->open($archive); 

if ($res === true && $zip->locateName('inscriptions.txt') !== false) { 
    $unzip_success= $zip->extractTo('/tmp/', "inscriptions.txt"); 

    $zip->close(); 
} 
+0

我解除了引號,但'11'仍然不等於TRUE,所以仍然失敗。我不認爲它打開了存檔,但沒有錯誤代碼11,所有的錯誤代碼都以'ER_'開頭。 – 2012-07-09 19:53:33

+0

實際上有一個11的錯誤代碼。'ZIPARCHIVE :: ER_OPEN'是一個常量,它的值是'11',所以你去了:文件無法打開。 在我的最後工作正常,是否有正確的權限? – 2012-07-09 20:54:26

1

如果$res等於11,這意味着ZipArchive無法打開指定的文件。

爲了測試這個:

$archive = "x.zip"; 
$zip = new ZipArchive(); 
$res = $zip->open($archive); 

if($res == ZipArchive::ER_OPEN){ 
    echo "Unable to open $archive\n"; 
} 
+0

好的,所以我們知道錯誤代碼是ER_OPEN,現在有什麼建議可能是爲什麼?該文件在那裏,是否所有的zip文件都不相同? – 2012-07-09 19:58:30

+0

你確定你有權限讀取文件嗎?文件的路徑是否正確(是否與腳本位於相同的目錄中)?你可以創建另一個zip和測試嗎?它可能是任何數量的東西... – keithhatfield 2012-07-09 19:59:49

+1

我試圖將權限更改爲0777,沒有工作。在同一個目錄中使用另一個zip也不起作用,同樣的錯誤。 – 2012-07-09 20:04:15

2

ZipArcive :: extractTo區分大小寫。如果要提取的文件名稱不完全符合壓縮文件的名稱,則該方法返回false。

2

我面臨同樣的問題,我已經修復了這個:) 使用$_SERVER['DOCUMENT_ROOT']的網址。 我的代碼(codeigniter):

$this->load->library('unzip'); 
$file = $this->input->GET('file'); 
$this->unzip->extract($_SERVER['DOCUMENT_ROOT'].'/TRAS/application/uploads/' . $file,$_SERVER['DOCUMENT_ROOT'].'/TRAS/application/views/templates/' . $file); 
0

添加文檔根對我來說也是一樣。這裏是我的代碼

$zip = new ZipArchive; 
     if ($zip->open($_SERVER['DOCUMENT_ROOT'].'/'.$folder.$file_path) === TRUE) { 
      $zip->extractTo($_SERVER['DOCUMENT_ROOT'].'/$folder'); 
      $zip->close(); 
      echo 'ok'; 
     } 
0

我遇到同樣的問題,但我可以打開壓縮文件,它打開後返回true

我的問題是我得到虛假$zip->extractTo()後。

我最終成功刪除zip文件中以CHINESE(NO-ENGILISH)命名的文件。