Php:Как управлять обработкой файлов и операциями загрузки в одном скрипте?
Вопрос
В одном скрипте мне нужно сделать следующее:
- создайте zip-файл из файлов в каталоге
- принудительно загрузите только что созданный zip-файл
Моя проблема в том, что всякий раз, когда я пытаюсь сделать это с помощью одного скрипта, загруженный zip-файл поврежден (хотя размер файла в порядке).Если я запущу процессы в двух отдельных вызовах скрипта, загруженный zip-файл будет в порядке.
Я предполагаю, что проблема в том, что процесс сохранения zip-файла в файл не завершен полностью завершен до начала загрузки.Как ни странно, это не решает проблему, если вставить режим ожидания (3) между процессами...Схема кода приведена ниже.
Как гарантировать, что zip-файл будет полностью завершен до начала принудительной загрузки?
С уважением / Джонас
// 1. create a zip
$createZipFile = new CreateZipFile('temp.zip');
$createZipFile->zipDirectory('temp/', '.');
$createZipFile->saveZipFile();
sleep(3); // <-- Doesn't matter!
// 2. force zip download
$fileServer = new FileServer();
// Line below gives a corrupted zip when run in same script as 1.
$fileServer->forzeDownload('temp.zip');
Решение 2
Спасибо вам, Джоренб и Гамбо!Проверка texteditor выявила некоторый отладочный результат при создании zip-файла, который не влияет на исходный zip-файл, но искажает данные, отправляемые в браузер при загрузке.
Другие советы
Создайте zip-файл, а затем перенаправьте пользователя на этот файл.