2017-02-09 46 views
1

我嘗試使用下面的代碼PHP ZipArchive類不創建歸檔

$zip_in = new \ZipArchive; 
if ($zip_in->open('input.zip') === TRUE) { 
    $files = array(); 
    for ($loop = 0; $loop < $zip_in->numFiles; $loop++) { 
     $files[] = $zip_in->getNameIndex($loop); 
    } 
    $zip_in->extractTo('workspace'); 
    $zip_in->close(); 
    /** 
    * Changes done to files extracted inside WORKSPACE DIR above 
    */ 
    chdir('workspace'); 
    $zip_out = new \ZipArchive(); 
    $zip_out->open('output.zip', \ZipArchive::CREATE); 
    foreach ($files as $file) { 
     $zip_out->addFile($file); 
    } 
    $zip_out->close(); 
} 

在這裏,我試圖提取input.zip存檔工作區目錄進行修改,創建所選文件的存檔在壓縮文件中包含的文件中。在此之後,我想再次將所有文件壓縮回output.zip存檔。

用於存儲提取的文件名的變量$files在編輯文件時不會觸及任何位置。文件名是硬編碼的,並沒有通過任何變量接收。

最後一行終於挽救output.zip歸檔給出了控制檯上以下警告:

PHP Warning: ZipArchive::close(): Read error: Is a directory in /home/user/zip.php on line 100

我無法理解這種失敗的原因。錯誤消息不清楚。這種失敗的原因是什麼?

編輯:

按照要求,添加代碼以調用上文所討論的歸檔處理程序。

class A { 
    public function A1() { 
     /** 
     * the code above 
     */ 
    } 
} 

class B { 
    public function B1 { 
     $a = new A(); 
     $a->A1(); 
    } 
} 

這是CakePHP 3應用程序的一部分。通過提示註釋,當我在CakePHP 3應用程序之外獨立運行代碼時,它工作得很好。然而在CakePHP應用程序中有一些問題。我添加了額外的標籤來突出CakePHP社區中的問題。

回答

1

因爲你的代碼是錯誤的,你是一個文件替換ZipArchive的實例:

$郵編= addFile($文件);

替換爲:

$ zip-> addFile($ file);

+0

不,這是一個在實際的代碼中沒有在stackoverflow上的拼寫錯誤。我正在糾正。感謝您指出! – i01000001

+0

你可以給我$文件的代碼,並確保在這個文件中只有文件而不是目錄? – Vindic

+0

感謝您對這個問題感興趣。我在上面的問題中添加了所需的細節。 – i01000001