Подтвердить что ты не робот

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

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

/file.zip

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

/download.php

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

4b9b3361

Ответ 1

Думаю, вы этого хотите:)

        $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:)

Ответ 2

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

Ответ 3

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

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

Ответ 4

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