2016-11-28 59 views
4

使用Laravel 5.2和Zipper即時創建ZIP歸檔並由用戶下載。我認爲這個問題一般與Laravel或Zipper沒有嚴格關係。步驟:PHP無法訪問新創建的zip文件

  1. 用戶點擊鏈接download_all
  2. 第一個php腳本創建存檔。
  3. 接下來將同一個腳本推送創建的文件強制用戶下載。

一切聽起來正常,但我有奇怪的行爲所創建zip壓縮包後(2點)PHP /服務器不能看到這個新創建的文件。 $ filePath上的文件大小和file_exists都返回false,但文件存在。 我無法讀取文件爲什麼?

當我將用戶重定向到$ filePath(而不是閱讀它並推送下載)時,一切正常,用戶可以獲取文件。但爲什麼我不能在「腳本生命週期」中訪問新創建的文件? $路徑是正確的。 在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); 
    } 
+0

您是否添加了需要下載的標題? –

+0

是的,當然,上面的代碼編輯 – Adiasz

+0

這不是一個AJAX調用,對吧? –

回答

1

通過@Holger Soved。 拉鍊應該是已關閉保存文件。

正確代碼:

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

- >關閉()

不幸在拉鍊文檔此沒有明確提及。