Maison > Questions et réponses > le corps du texte
J'essaie d'extraire une archive zip dans une application conteneur Docker exécutant Laravel 9 sur PHP 8.1.7 et j'obtiens une erreur étrange.
Donc, si vous essayez ce code dans le contrôleur
$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();
Les fichiers de l'archive sont extraits correctement, mais cette erreur est renvoyée :
Exception d'erreur ZipArchive::extractTo(/var/www/html/public/my_folder/my_file.xml) : Échec de l'opération : Opération non autorisée
Si j'exécute le même code dans php artisantinker, cela fonctionne.
Quelqu'un a-t-il une solution à ce problème ?
Cela ne semble pas être un problème lié aux autorisations , le dossier est créé avec 777 autorisations et les fichiers sont copiés correctement.
Modifier
root@5899a5badc45:/var/www/html/public/my_folder# ls -lhart * -rwxrwxrwx 1 1000 1000 1.3K Oct 25 12:24 phpunit.xml
Merci
P粉6688042282024-01-08 10:09:20
J'ai eu exactement le même problème. De mon côté, j'ai rencontré ce problème car j'extrayais des fichiers du répertoire de mon installation Windows.
Je veux dire /var//html/public/my_folder
是 /mnt/dev/my_folder
的符号链接,来自 Windows (C:例如 devmy_folder
).
Étant donné que le système de fichiers est différent de Linux et Windows, il semble que quelque chose de spécifique dans la classe ZipArchive soit à l'origine de cette erreur.
J'ai résolu ce problème en extrayant /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.'; }
J'espère que cela vous aidera.