2016-11-28 5 views
4

Ich benutze Laravel 5.2 und Zipper, um ZIP-Archiv in einem Fly zu erstellen und es vom Benutzer herunterladen. Ich denke, dieses Problem ist im Allgemeinen nicht eng mit Laravel oder Zipper verwandt. Schritte:PHP kann nicht auf neu erstellte Zip-Datei zugreifen

  1. Benutzer klicken Sie auf Link download_all.
  2. Erste PHP-Skript erstellen Archiv.
  3. Weiter das gleiche Skript Push-Datei zum Erzwingen des Benutzers Download.

Alles klingt normal, aber ich seltsames Verhalten habe, dass nach ZIP-Archiv erstellt wird (Punkt 2) php/Server diese neu erstellte Datei nicht sehen kann. Sowohl die Dateigröße als auch die Dateiausdrücke in $ filePath geben false zurück, aber die Datei existiert. Ich kann Datei warum nicht lesen?

Wenn ich Benutzer zu $ ​​filePath umlenke (anstatt es zu lesen und zum Download zu drücken), ist alles in Ordnung und der Benutzer bekommt die Datei. Aber warum kann ich während der "Skript-Lebensdauer" nicht auf die neu erstellte Datei zugreifen? $ Pfade sind korrekt. Getestet unter Windows 7 und Unix.

Irgendeine Idee?

Code:

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

haben Sie die benötigten Header zum Download hinzugefügt? –

+0

ja, natürlich, oberer Code bearbeitet – Adiasz

+0

Das ist kein AJAX-Aufruf, oder? –

Antwort

1

von @Holger Soved. Zipper sollte geschlossen sein, um die Datei zu speichern.

Proper Code:

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

-> close()

Leider gibt es in Zipper docs ist dies nicht eindeutig erwähnt.

Verwandte Themen