2016-11-28 8 views
4

Im использует Laravel 5.2 и Zipper для создания ZIP-архива на лету и загрузки его пользователем. Я думаю, что эта проблема не является строго связанной с Laravel или Zipper. Этапы:PHP не может получить доступ к вновь созданному zip-файлу

  1. Ссылка на пользователя download_all.
  2. Первый скрипт php создает архив.
  3. Далее тот же скрипт создавал файл для принудительной загрузки пользователя.

Все звучит нормально, но у меня есть странное поведение, что после того, как почтовый архив создается (пункт 2) PHP/сервер не может увидеть этот вновь созданный файл. И filesize, и file_exists в $ filePath возвращают false, но файл существует. Я не могу прочитать файл почему?

Когда я перенаправляю пользователя в $ filePath (вместо того, чтобы читать его и нажимать для загрузки), все в порядке, и пользователь получает файл. Но почему я не могу получить доступ к новому создаваемому файлу во время «срока действия сценария»? $ paths верны. Протестировано на 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

Soved по @Holger. Застежка-молния должна быть закрыта.

Правильный код:

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

-> близко()

К сожалению, в Zipper документы это четко не упоминается.

 Смежные вопросы

  • Нет связанных вопросов^_^