Отправить zip-файл в браузер / force

я создал с 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 предложит браузеру загрузить файл, а не отображать его напрямую.

Вам нужно сделать это таким образом, иначе ваш почтовый индекс будет поврежден:

 $size = filesize($yourfile); header("Content-Length: \".$size.\""); 

Таким образом, заголовку content-length требуется реальная строка, а файлы – возврату и целое число.

Если у вас уже есть свой 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 

Надеюсь, что это поможет.