ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

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

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

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

 

Проверить ссылки для скачивания

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

Download.html

<html>
<head>
<title>Скачивать файлы</title>
</head>
<body>
<p><a href="abc.txt">Скачать файл TEXT</a></p>
<p><a href="horizon.zip">Скачать файл ZIP</a></p>
<p><a href="lecture.pdf">Скачать файл PDF</a></p>
<p><a href="rose.jpg">Скачать файл JPG</a></p>
</body>
</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.

download2.html

<html>
<head>
<title>Скачивать файлы</title>
</head>
<body>
<p><a href="download.php?path=abc.txt">Скачать файл TEXT</a></p>
<p><a href="download.php?path=horizon.zip">Скачать файл ZIP</a></p>
<p><a href="download.php?path=lecture.pdf">Скачать файл PDF</a></p>
<p><a href="download.php?path=rose.jpg">Скачать файл JPG</a></p>
</body>
</html>

 

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

download.php

<?php

if(isset($_GET['path']))
{
//Читать файл
$filename = $_GET['path'];
//Проверка на существование файла
if(file_exists($filename)) {

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

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

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

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

 

Выходные данные

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

 

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

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

download3.html

<html>
<head>
<title>Скачать файлы</title>
</head>
<body>
<p><a href="download.php?path=downloads/lecture.pdf">Скачать PDF file</a></p>
<p><a href="download2.php?path=downloads/rose.jpg">Скачать JPG file</a></p>
</body>
</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');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($url).'"');
header('Content-Length: '. filesize($url));
header('Pragma: public');

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

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

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

?>

 

Вывод

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

Exit mobile version