Как заставить файл скачать в PHP - PullRequest
6 голосов
/ 13 августа 2010

У меня есть список изображений, и я хочу ссылку «Загрузить» вместе с каждым изображением, чтобы пользователь мог загрузить изображение.

Так может ли кто-нибудь мне помочь Как предоставить ссылку на скачивание любого файла в php?

EDIT

Я хочу, чтобы при нажатии на ссылку для загрузки отображалась панель загрузки. Я не хочу переходить к изображению, отображаемому в браузере

Ответы [ 4 ]

30 голосов
/ 13 августа 2010

Если вы хотите принудительно загрузить файл, вы можете использовать что-то вроде следующего:

<?php
    // Fetch the file info.
    $filePath = '/path/to/file/on/disk.jpg';

    if(file_exists($filePath)) {
        $fileName = basename($filePath);
        $fileSize = filesize($filePath);

        // Output headers.
        header("Cache-Control: private");
        header("Content-Type: application/stream");
        header("Content-Length: ".$fileSize);
        header("Content-Disposition: attachment; filename=".$fileName);

        // Output file.
        readfile ($filePath);                   
        exit();
    }
    else {
        die('The provided file path is not valid.');
    }
?>

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

Кстати, приведенный выше фрагмент кода необходимо выполнить в начале страницы (до того, как произошли какие-либо заголовки или вывод HTML). Также позаботьтесь, если вы решите создать функцию, основанную на этом, для загрузки произвольных файлов. - вам нужно убедиться, что вы предотвращаете обратный путь в каталогах ( realpath удобно), разрешаете загрузку только из определенной области и т. д., если вы принимаете ввод из $ _GET или $ _POST.

2 голосов
/ 28 мая 2017

В HTML5 download можно использовать атрибут тега <a>:

echo '<a href="path/to/file" download>Download</a>';

Этот атрибут используется, только если установлен атрибут href.

Нет ограничений на допустимые значения, и браузер автоматически определить правильное расширение файла и добавить его в файл (.img, .pdf, .txt, .html и т. д.).

Подробнее здесь .

1 голос
/ 25 марта 2013

Решение проще, чем вы думаете;) Простое использование:

header('Content-Disposition: attachment');

И это все. Например, Facebook делает то же самое.

0 голосов
/ 05 августа 2013

Вы можете сделать это в .htaccess и указать для разных расширений файлов.Иногда это сделать проще, чем жестко запрограммировать приложение.

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

Кстати, вам может потребоваться очистить кеш браузера, прежде чем он будет работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...