嘗試使用 laravel 在 docker 容器中提取 zip 檔案時出現奇怪的行為
P粉665679053
P粉665679053 2024-01-07 15:06:24
0
1
557

我正在嘗試在 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粉665679053
P粉665679053

全部回覆(1)
P粉668804228

我遇到了完全相同的問題。在我這邊,我遇到了這個問題,因為我正在從 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.';
}

希望這會有所幫助。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板