Heim  >  Fragen und Antworten  >  Hauptteil

Seltsames Verhalten beim Versuch, eine ZIP-Datei im Docker-Container mit Laravel zu extrahieren

Ich versuche, ein Zip-Archiv in einer Docker-Container-Anwendung zu extrahieren, auf der Laravel 9 unter PHP 8.1.7 ausgeführt wird, und es tritt ein seltsamer Fehler auf.

Also, wenn Sie diesen Code im Controller ausprobieren

$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();

Die Dateien im Archiv werden korrekt extrahiert, es wird jedoch dieser Fehler zurückgegeben:

Fehlerausnahme ZipArchive::extractTo(/var/www/html/public/my_folder/my_file.xml): Vorgang fehlgeschlagen: Vorgang nicht zulässig

Wenn ich den gleichen Code in PHP Artistinker ausführe, funktioniert es.

Hat jemand eine Lösung für dieses Problem?

Scheint kein Berechtigungsproblem zu sein , der Ordner wird mit 777-Berechtigungen erstellt und die Dateien werden korrekt kopiert.

Bearbeiten

root@5899a5badc45:/var/www/html/public/my_folder# ls -lhart *
  -rwxrwxrwx 1 1000 1000 1.3K Oct 25 12:24 phpunit.xml

Danke

P粉665679053P粉665679053260 Tage vor486

Antworte allen(1)Ich werde antworten

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

    希望这会有所帮助。

    Antwort
    0
  • StornierenAntwort