我正在嘗試在 PHP 8.1.7 上運行 Laravel 9 的 docker 容器應用程式中提取 zip 存檔,但遇到了一個奇怪的錯誤。
因此,如果在控制器中嘗試此程式碼
$zip = new ZipArchive(); $result = $zip->open("/var/www/html/public/my_archive.zip"); if ($result === TRUE) { $zip->extractTo("/var/www/html/public/my_folder"); } $zip->close();
存檔中的檔案已正確提取,但傳回此錯誤:
錯誤異常 ZipArchive::extractTo(/var/www/html/public/my_folder/my_file.xml):操作失敗:不允許操作
#如果我在 php artisantinker 中運行相同的程式碼,它就可以工作。
有人有辦法解決這個問題嗎?
似乎不是與權限相關的問題,該資料夾是使用 777 權限建立的,並且檔案複製正確。
編輯
root@5899a5badc45:/var/www/html/public/my_folder# ls -lhart * -rwxrwxrwx 1 1000 1000 1.3K Oct 25 12:24 phpunit.xml
謝謝
P粉6688042282024-01-08 10:09:20
我遇到了完全相同的問題。在我這邊,我遇到了這個問題,因為我正在從 Windows 安裝的目錄中提取檔案。
我的意思是/var//html/public/my_folder
是/mnt/dev/my_folder
的符號鏈接,來自Windows (C:例如\dev \my_folder
)。
由於檔案系統與 Linux 和 Windows 不同,似乎 ZipArchive 類別中的某些特定內容會導致此錯誤。
我透過提取 /tmp/my_folder
中的檔案然後將其移至 /var//html/public/my_folder
來修復此問題。
$zip = new ZipArchive(); $res = $zip->open($filename); if ($res === true) { $temp = '/tmp/my_folder'; mkdir($temp, 0777, true); $zip->extractTo($temp); $zip->close(); rename($temp, '/var/html/public/my_folder'); } else { echo 'Failed to open the zip file.'; }
希望這會有所幫助。