i, созданный с помощью php zip (http://php.net/manual/de/book.zip.php) zip файл
теперь мне нужно отправить его в браузер/принудительно загрузить для него.
i, созданный с помощью php zip (http://php.net/manual/de/book.zip.php) zip файл
теперь мне нужно отправить его в браузер/принудительно загрузить для него.
<?php
// or however you get the path
$yourfile = "/path/to/some_file.zip";
$file_name = basename($yourfile);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Length: " . filesize($yourfile));
readfile($yourfile);
exit;
?>
Задайте заголовки содержимого, длины содержимого и содержимого, затем выведите файл.
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Length: '.filesize($filepath) );
readfile($filepath);
Настройка Content-Disposition: attachment
предложит браузеру загрузить файл, а не отображать его напрямую.
Если у вас уже есть ваш ZIP-сервер на сервере, и если этот ZIP доступен Apache в HTTP или HTTPS, то вы должны перенаправить в этот файл, а не "читать его" с помощью PHP.
Это гораздо эффективнее, поскольку вы не используете PHP, поэтому не требуется процессор или оперативная память, и он будет быстрее загружать > , так как чтение/запись PHP не требуется, только прямая загрузка. Пусть Apache выполнит эту работу!
Таким образом, хорошая функция может быть:
if($is_reachable){
$file = $relative_path . $filename; // Or $full_http_link
header('Location: '.$file, true, 302);
}
if(!$is_reachable){
$file = $relative_path . $filename; // Or $absolute_path.$filename
$size = filesize($filename); // The way to avoid corrupted ZIP
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename=' . $filename);
header('Content-Length: ' . $size);
// Clean before! In order to avoid 500 error
ob_end_clean();
flush();
readfile($file);
}
exit(); // Or not, depending on what you need
Я надеюсь, что это поможет.
Вам нужно сделать это таким образом, иначе ваш почтовый индекс будет поврежден:
$size = filesize($yourfile);
header("Content-Length: \".$size.\"");
Таким образом, заголовку content-length требуется реальная строка, а файлы возвращают и целое число.