Как скачать файл на PHP

Как правило, PHP-скрипт не требуется для загрузки файла с расширениями exe и zip . Если расположение файла этого типа задано в атрибуте href элемента привязки, то файл автоматически загружается, когда пользователь щелкает ссылку для загрузки. Некоторые файлы, такие как файлы изображений , файлы PDF , текстовые файлы, CSV файлы и т. д. не загружаются автоматически, а вместо этого открываются в браузере, когда пользователь щелкает ссылку для загрузки. Эти файлы можно принудительно загрузить в PHP с помощью функции readfile () , которая не загружается автоматически. В этом руководстве показано, как принудительно загрузить любой файл с помощью сценария PHP.

Проверить ссылки для загрузки

Ранее упоминалось, что zip и exe файлы загружаются автоматически, без использования сценария PHP. Сначала создайте HTML-файл со следующим кодом. Здесь четыре элемента привязки определены для загрузки файлов четырех типов. Эти типы файлов включают файлы TEXT, ZIP, PDF и JPG.

Download.html

Загрузить файлы

Загрузить текстовый файл

Загрузить ZIP-файл

Загрузить файл PDF

Загрузить файл JPG

Вывод
Следующее диалоговое окно появится для загрузки файла после щелчка по ссылке на zip-файл. Затем пользователь может загрузить файл или открыть файл в диспетчере архивов.

Если вы щелкните файл изображения, оно автоматически откроется в браузере, как показано в следующем выводе. Вы должны сохранить файл, чтобы сделать копию файла образа на локальном диске. Таким же образом, когда вы нажимаете ссылки на файлы PDF и TEXT, содержимое файла открывается в браузере без загрузки файла. Решение этой проблемы — принудительно загрузить файл с помощью встроенной функции PHP readfile () .

Загрузить файл с помощью функции readfile ()

Функция readfile () используется в сценарии PHP для принудительной загрузки любого файла из текущего местоположения или файла с указанием пути к файлу. Синтаксис этой функции приведен ниже.

Синтаксис
int readfile (string $ filename [, bool $ use_include_path = false [, resource $ context]])

Эта функция может принимать три аргумента. Первый аргумент является обязательным, а два других аргумента — необязательными. Первый аргумент, $ filename , хранит имя файла или имя файла с путем, который будет загружен. Значение по умолчанию для второго параметра, $ use_include_path , равно false и будет установлено в true, если имя файла с путем используется в первом аргументе. Третий аргумент, $ context , используется для указания ресурса потока контекста. Эта функция возвращает количество байтов, прочитанных из файла, указанного в первом аргументе. Использование этой функции показано в следующих двух примерах.

Пример 1: Загрузить файл с именем файла

В этом примере мы создадим HTML-файл с следующий код, где имя файла будет передано как параметр URL-адреса с именем path , а значение этого параметра будет передано в файл PHP с именем download.php .

Загрузить файлы

Загрузить ТЕКСТОВЫЙ файл

Загрузить ZIP-файл

Загрузить файл PDF

Загрузить файл JPG

Мы создадим файл PHP со следующим кодом для принудительной загрузки файла. Здесь функция isset () используется для проверки того, определен ли $ _ GET [‘path’] . Если переменная определена, функция file_exists () используется для проверки, существует ли файл на сервере. Затем функция header () используется для установки необходимой информации заголовка перед использованием функции readfile () . Функция basename () используется для получения имени файла, а функция sizes () используется для чтения размера файла в байтах, что будет в открывшемся диалоговом окне для загрузки файла. Функция flush () используется для очистки буфера вывода. Здесь функция readfile () используется только с именем файла.

загрузить. php

php

if (isset ($ _ GET [‘path’]))
{
//Считываем имя файла
$ filename = $ _GET [‘path’];
//Проверяем, существует ли файл
if (file_exists ($ filename)) {

//Определение информации заголовка
header (‘Content-Description: File Transfer’);
header (‘Content-Type: application/ octet-stream ‘); заголовок
(«Cache-Control: no-cache, must-revalidate»); заголовок
(«Expires: 0»);
заголовок (‘ Content-Disposition: attachment; filename = «‘. Basename ($ filename).'» ‘);
заголовок (‘ Content-Length: ‘. Размер файла ($ filename));
заголовок ( ‘Pragma: public’);

//Очистить буфер вывода системы
flush ();

//Считываем размер файла
readfile ($ filename);

//Завершаем скрипт
die ();
}
else {
echo «Файл не существует.»;
}
}
else
echo «Имя файла не определено.»
?>

Вывод
Следующий вывод появится после нажатия на ссылку для загрузки файла изображения. Размер файла изображения rose.jpg составляет 27,2 КБ , как показано в диалоговом окне. Вы можете загрузить файл, установив переключатель Сохранить файл и нажав кнопку OK .

Пример 2: Загрузить файл с путем к файлу

Если файл существует в данном файле location, путь к файлу необходимо будет указать в URL-адресе. В этом примере мы создадим HTML-файл со следующим кодом, который передаст имя файла с путем к файлу:

download3.html

Мы создадим файл PHP со следующим кодом для загрузки файла по пути к файлу. Код PHP в предыдущем примере будет немного изменен для загрузки файла по заданному пути. Функция clearstatecache () используется для очистки кеша, который был ранее сохранен. В функции readfile () используются два аргумента.

download2. php

php
if (isset ($ _ GET [‘path’]))
{
//Считываем URL
$ url = $ _GET [‘path’];

//Очищаем кеш
clearstatcache ();

//Проверяем, существует ли путь к файлу или нет
if (file_exists ($ url)) {

//Определить информацию заголовка
header (‘Content-Description: File Transfer’);
заголовок (‘Content-Type: application/octet-stream’);
header (‘Content-Disposition: attachment; filename = «‘. basename ($ url). ‘»‘);
заголовок (‘Content-Length:’. Size ($ url));
заголовок (‘Pragma: public’);

//Очистить буфер вывода системы
flush ();

//Считываем размер файла
readfile ($ url, true);

//Завершаем скрипт
die ();
}
else {
echo «Путь к файлу не существует.»;
}
}
echo «Путь к файлу не определен.»

?>

Вывод
После щелчка по ссылке для скачивания файла PDF появится следующий результат.

Видеоурок

Заключение

В этой статье представлен простой способ принудительной загрузки любого файла с помощью сценария PHP, чтобы помочь читателям добавить функцию загрузки в свой сценарий.

Оцените статью
nanomode.ru
Добавить комментарий