Im использует Laravel 5.2 и Zipper для создания ZIP-архива на лету и загрузки его пользователем. Я думаю, что эта проблема не является строго связанной с Laravel или Zipper. Этапы:PHP не может получить доступ к вновь созданному zip-файлу
- Ссылка на пользователя download_all.
- Первый скрипт php создает архив.
- Далее тот же скрипт создавал файл для принудительной загрузки пользователя.
Все звучит нормально, но у меня есть странное поведение, что после того, как почтовый архив создается (пункт 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);
}
Вы добавили необходимые заголовки для загрузки? –
да, конечно, верхний код изменен – Adiasz
Это не вызов AJAX, не так ли? –