Rumah > Soal Jawab > teks badan
Saya cuba mengekstrak arkib zip dalam aplikasi bekas docker yang menjalankan Laravel 9 pada PHP 8.1.7 dan saya mendapat ralat pelik.
Jadi jika cuba kod ini dalam pengawal
$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();
Fail dalam arkib diekstrak dengan betul, tetapi ralat ini dikembalikan:
Pengecualian ralat ZipArchive::extractTo(/var/www/html/public/my_folder/my_file.xml): Operasi gagal: Operasi tidak dibenarkan
Jika saya menjalankan kod yang sama dalam php artisantinker ia berfungsi.
Ada sesiapa ada penyelesaian untuk masalah ini?
Nampaknya bukan isu berkaitan kebenaran , folder itu dicipta dengan 777 kebenaran dan fail disalin dengan betul.
Edit
root@5899a5badc45:/var/www/html/public/my_folder# ls -lhart * -rwxrwxrwx 1 1000 1000 1.3K Oct 25 12:24 phpunit.xml
Terima kasih
P粉6688042282024-01-08 10:09:20
Saya mengalami masalah yang sama. Pada akhirnya, saya menghadapi masalah ini kerana saya mengekstrak fail dari direktori pemasangan Windows saya.
Maksud saya /var//html/public/my_folder
是 /mnt/dev/my_folder
的符号链接,来自 Windows (C:例如 devmy_folder
).
Memandangkan sistem fail berbeza daripada Linux dan Windows, nampaknya sesuatu yang khusus dalam kelas ZipArchive menyebabkan ralat ini.
Saya membetulkannya dengan mengekstrak /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.'; }
Semoga ini membantu.