尝试使用 laravel 在 docker 容器中提取 zip 文件时出现奇怪的行为
P粉665679053
P粉665679053 2024-01-07 15:06:24
0
1
531

我正在尝试在 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.';
}

希望这会有所帮助。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!