You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用ZipArchive创建压缩包如何指定存储路径到company目录

问题诊断
  • 生成Zip文件时路径配置错误:调用ZipArchive::open()方法时仅传入public_path($zip_name),直接将Zip存储路径指向了public根目录,没有拼接你预设的uploads/company/目标路径
  • 路径逻辑不统一:代码中已经提前定义了$destinationPath变量存储目标文件夹路径,但是Zip生成逻辑没有复用该变量,后续调整存储路径时需要修改多处,维护成本高
  • 路径判断存在歧义:创建文件夹、判断文件夹是否存在时直接使用相对路径$destinationPath,不同CLI/WEB执行环境下相对路径解析规则可能不同,容易出现找不到路径的异常
修复后代码
$companyLogoURL = '';
if ($companyLogo) {
    // 统一定义目标存储路径,用public_path固定解析到public目录下
    $destinationPath = 'uploads/company/';
    $fullDestinationPath = public_path($destinationPath);
    // 文件夹不存在则创建
    if (!file_exists($fullDestinationPath)) {
        mkdir($fullDestinationPath, 0777, true);
    }

    $imageExt = $companyLogo->getClientOriginalExtension();
    $imageName = time().$customer_id.'.'.$imageExt;
    $imageFormats = ['jpg', 'png', 'gif', 'bmp', 'jpeg', 'PNG', 'JPG', 'JPEG', 'GIF', 'BMP','svg'];

    // 校验文件大小
    $getFileSize = $companyLogo->getSize();
    if ($getFileSize <= $this::FILE_SIZE_THREE_MB) {
        if (in_array($imageExt, $imageFormats)) {
            $companyLogo->move($fullDestinationPath, $imageName);
            $companyLogoURL = $imageName;

            $zip = new ZipArchive();
            $zip_name = $imageName . ".zip";
            // 拼接路径,直接将Zip生成到uploads/company目录下
            $zipFullPath = $fullDestinationPath . $zip_name;
            if($zip->open($zipFullPath, ZipArchive::CREATE) === TRUE){
            
                $files = File::files($fullDestinationPath);
                foreach($files as $key => $value){
                    $samefileNameinZip = basename($value);
                    $zip->addFile($value, $samefileNameinZip);
                }
                $zip->close(); 
            }
        }
    }
}
核心修改说明
  • 统一所有路径计算逻辑,新增$fullDestinationPath变量存储public目录下目标文件夹的绝对路径,避免相对路径解析歧义
  • 修改Zip文件生成路径:将原来的public_path($zip_name)调整为$fullDestinationPath . $zip_name,直接指定Zip生成到uploads/company目录下
  • 优化文件遍历逻辑,直接使用$fullDestinationPath变量获取目标文件夹下的文件,不需要重复调用public_path('uploads/company'),后续调整路径仅需修改$destinationPath一处即可

内容的提问来源于stack exchange,提问作者nung khual

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:54:03