Как вернуть файл в PHP

У меня есть файл

/file.zip 

Пользователь приходит к

 /download.php 

Я хочу, чтобы браузер пользователя начал загружать файл. Как мне это сделать? Открывает ли файл чтения файл на сервере, что кажется ненужным. Есть ли способ вернуть файл, не открывая его на сервере?

Я думаю, ты хочешь этого 🙂

  $attachment_location = $_SERVER["DOCUMENT_ROOT"] . "/file.zip"; if (file_exists($attachment_location)) { header($_SERVER["SERVER_PROTOCOL"] . " 200 OK"); header("Cache-Control: public"); // needed for internet explorer header("Content-Type: application/zip"); header("Content-Transfer-Encoding: Binary"); header("Content-Length:".filesize($attachment_location)); header("Content-Disposition: attachment; filename=file.zip"); readfile($attachment_location); die(); } else { die("Error: File not found."); } 

HTH 🙂

Если файл является общедоступным, вы можете просто использовать его как статический файл непосредственно с веб-сервера (например, Apache) и сделать download.php перенаправленным на статический URL. В противном случае вы должны использовать readfile для отправки файла в браузер после аутентификации пользователя (помните о заголовке Content-Dispositon ).

readfile выполнит задание ОК и передаст поток прямо на веб-сервер. Это не лучшее решение, поскольку время отправки файла, PHP все еще работает. Для получения лучших результатов вам понадобится нечто вроде X-SendFile, которое поддерживается на большинстве веб-серверов (если вы устанавливаете правильные модули).

В целом (если вас беспокоит тяжелая нагрузка) лучше всего поставить прокси-сервер перед вашим основным сервером приложений. Это ускорит работу вашего сервера приложений (например, apache), а прокси-серверы (Varnish, Squid), как правило, намного лучше переносят байты на клиентов с высокой задержкой или на клиентов, которые обычно медленны.

Если файл является общедоступным, просто выполните простое перенаправление на URL вашего файла.