Итак, как раз в этом куске кода. Корректная отдача файла для скачивания:
Код: Выделить всё
$data = file_get_content('/path/to/file');
header('Content-Type: "application/octet-stream"');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); // Для IE
header("Content-Transfer-Encoding: binary");
header('Pragma: public');
header("Content-Length: ".strlen($data));
exit($data);
Загрузка нескольких файлов. Для начала нужно заархивировать например так:
Код: Выделить всё
$files = array('test1.jpg','test2.jpg');
$path = '/path/to/files/';
$archive_filename = 'test.zip';
$zip = new ZipArchive();
if ($zip->open($archive_filename, ZIPARCHIVE::CREATE ) !== true) {
exit("cannot open <$archive_filename>\n");
}
foreach($file_names as $file){
$zip->addFile($path.$file, $file);
}
$zip->close();
$data = file_get_content($archive_file_name);
header('Content-Type: "application/octet-stream"');
header('Content-Disposition: attachment; filename="'.$archive_filename.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); // Для IE
header('Content-Transfer-Encoding: binary');
header('Pragma: public');
header('Content-Length: '.filesize($archive_filename));
exit($data);
В этом случае создается zip файл. Более корректно было бы не создавать файлов, однако это сложнее с точки зрения реализации. Директория, в которой создается темповый архив должна быть открыта для записи.