В контроллере CakePHP у меня есть логика для создания ZIP, который выглядит следующим образом и работает отлично, я могу найти архив ZIP на сервере:
function getAttachmentsInZip( $meetingId = null ){
$this->autoRender = false;
$this->request->allowMethod( ['post'] );
$allTasksWithFiles_query = $this->Tasks->find('all')
->where(['Tasks.uploaded_file_path != ' => 'NULL']);
$allTasksWithFiles = $allTasksWithFiles_query->toArray();
$files = array();
foreach( $allTasksWithFiles as $taskWithFile ){
$files[] = $taskWithFile['uploaded_file_path'];
}
if( !empty( $files ) ){
$destination = 'uploads/archives/meeting_' . $meetingId .'.zip';
$zip = new ZipArchive();
$zip->open( $destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE );
foreach( $files as $file ){
$zip->addFile('uploads/uploaded_files/' . $file, $file);
}
$zip->close();
}
}
Однако я не могу вернуть архив прямо в браузер пользователя. Самым близким был следующий фрагмент кода, но архив поврежден и не может быть открыт:
header("Content-type: application/zip");
header('Content-Disposition: attachment; filename="' . $destination . '"');
header("Pragma: no-cache");
header("Expires: 0");
readfile("asd");
Любая помощь или руководство очень ценится. Если бы я должен был / мог бы предоставить больше кода — пожалуйста, спросите.
Задача ещё не решена.
Других решений пока нет …