我嘗試使用下面的代碼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社區中的問題。
不,這是一個在實際的代碼中沒有在stackoverflow上的拼寫錯誤。我正在糾正。感謝您指出! – i01000001
你可以給我$文件的代碼,並確保在這個文件中只有文件而不是目錄? – Vindic
感謝您對這個問題感興趣。我在上面的問題中添加了所需的細節。 – i01000001