首頁  >  問答  >  主體

嘗試使用 laravel 在 docker 容器中提取 zip 檔案時出現奇怪的行為

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

全部回覆(1)我來回復

  • P粉668804228

    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.';
    }

    希望這會有所幫助。

    回覆
    0
  • 取消回覆