PHP无法访问新创建的zip文件

时间:2016-11-28 13:56:46

标签: php laravel-5 ziparchive zipper

我使用Laravel 5.2和Zipper来创建ZIP存档并由用户下载。我认为这个问题通常与Laravel或Zipper没有严格的关系。步骤进行:

  1. 用户点击链接 download_all
  2. 第一个php脚本创建存档。
  3. 接下来,相同的脚本推送创建的文件以强制用户下载。
  4. 一切听起来都很正常但我有奇怪的行为,在创建zip存档之后(第2点)php / server 无法看到这个新创建的文件。 $ filePath上的filesize和file_exists都返回false但文件存在。 我无法阅读文件为什么?

    当我将用户重定向到$ filePath(而不是阅读它并推送下载)时,一切正常,用户获取文件。但是为什么我不能在"脚本生命周期内访问新创建的文件"? $ path是正确的。 在Windows 7和Unix上测试过。

    有什么想法吗?

    代码:

    public function downloadAll($id)
        {
            $sourceFilesDir   = 'upload/source/' . $id;
            $zipPath          = 'upload/source-zip/' . date('Y-m-d-H-i-s') . '.zip';
    
            Zipper::make($zipPath)->add($sourceFilesDir);
    
            $fullPath = public_path($zipPath);
    
            // works
            // return response()->redirectTo($zipPath);
    
            $headers = [
                'Content-Type: application/zip',
                'Content-Transfer-Encoding: Binary',
                'Content-Length: ' . filesize($fullPath),
            ];
    
            // dont works, cant see file
            return response()->download($fullPath, basename($zipPath), $headers);
        }
    

1 个答案:

答案 0 :(得分:1)

@Holger的推动。 拉链应关闭以保存文件。

正确的代码:

Zipper::make($zipPath)->add($sourceFilesDir)->close();

<强> - &GT; close()方法

不幸的是,在Zipper文档中没有明确提到这一点。