Проверить ссылки для загрузки
Ранее упоминалось, что zip и exe файлы загружаются автоматически, без использования сценария PHP. Сначала создайте HTML-файл со следующим кодом. Здесь четыре элемента привязки определены для загрузки файлов четырех типов. Эти типы файлов включают файлы TEXT, ZIP, PDF и JPG.
Download.html
Вывод
Следующее диалоговое окно появится для загрузки файла после щелчка по ссылке на 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 .
Мы создадим файл PHP со следующим кодом для принудительной загрузки файла. Здесь функция isset () используется для проверки того, определен ли $ _ GET [‘path’] . Если переменная определена, функция file_exists () используется для проверки, существует ли файл на сервере. Затем функция header () используется для установки необходимой информации заголовка перед использованием функции readfile () . Функция basename () используется для получения имени файла, а функция sizes () используется для чтения размера файла в байтах, что будет в открывшемся диалоговом окне для загрузки файла. Функция flush () используется для очистки буфера вывода. Здесь функция readfile () используется только с именем файла.
загрузить. 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
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, чтобы помочь читателям добавить функцию загрузки в свой сценарий.