jivo banner 468x60jivo banner 728x90jivo banner 930x180beget banner 468x60beget banner 728x90beget banner 930x180flexbe banner 468x60flexbe banner 728x90flexbe banner 930x180

Руководство по скачиванию файлов в PHP

Обычно вам не обязательно использовать какой-либо серверный язык, например PHP, для загрузки изображений, zip-файлов, PDF-документов, exe-файлов и т. д. Если такой тип файла хранится в общедоступной папке, вы можете просто создать гиперссылку, указывающую на этот файл, и всякий раз, когда пользователь будет кликать на ссылку, браузер будет автоматически загружать этот файл.

<a href="downloads/test.zip">Download Zip file</a>
<a href="downloads/masters.pdf">Download PDF file</a>
<a href="downloads/sample.jpg">Download Image file</a>
<a href="downloads/setup.exe">Download EXE file</a>

Щелчок по ссылке, указывающей на PDF-файл или файл с изображением, не приведет к его загрузке на ваш жесткий диск напрямую. Он откроет файл только в вашем браузере. В дальнейшем вы можете сохранить его на свой жесткий диск. Однако по умолчанию файлы .zip и .exe загружаются на жесткий диск автоматически.

Принудительная загрузка с помощью PHP-функции readfile()

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

Давайте создадим файл с именем image-gallery.php и поместим в него следующий код.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple Image Gallery</title>
<style type="text/css">
    .img-box{
        display: inline-block;
        text-align: center;
        margin: 0 15px;
    }
</style>
</head>
<body>
    <?php
    // Массив, содержащий имена файлов изображений
    $images = array("kites.jpg", "balloons.jpg");
    
    // Запускаем цикл массива изображений
    foreach($images as $image){
        echo '<div class="img-box">';
            echo '<img src="images/' . $image . '" width="200" alt="' .  pathinfo($image, PATHINFO_FILENAME) .'">';
            echo '<p><a href="download.php?file=' . urlencode($image) . '">Загрузить</a></p>';
        echo '</div>';
    }
    ?>
</body>
</html>

Если вы внимательно посмотрите на приведенный выше пример кода, вы обнаружите, что ссылка для скачивания указывает на файл download.php, URL также содержит имя файла изображения в виде строки запроса. Кроме того, мы использовали PHP-функцию urlencode() для кодирования имен файлов изображений, чтобы их можно было безопасно передать как параметр URL, поскольку имена файлов могут содержать небезопасные символы URL.

Вот полный код файла download.php, который принудительно загружает изображение.

<?php
if(isset($_REQUEST["file"])){
    // Получаем параметры
    $file = urldecode($_REQUEST["file"]); // Декодируем строку в кодировке URL

    /* Проверяем, содержит ли имя файла недопустимые символы
     например "../" с использованием регулярного выражения */
    if(preg_match('/^[^.][-a-z0-9_.]+[a-z]$/i', $file)){
        $filepath = "images/" . $file;

        // Процесс загрузки
        if(file_exists($filepath)) {
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($filepath));
            flush(); // Flush system output buffer
            readfile($filepath);
            die();
        } else {
            http_response_code(404);
	        die();
        }
    } else {
        die("Invalid file name!");
    }
}
?>

Точно так же вы можете принудительно загрузить файлы других форматов, такие как word .doc, .pdf и т. д.

Регулярное выражение в приведенном выше примере (строка № 8) просто не разрешит те файлы, имя которых начинается или заканчивается символом точки (.), Например, оно разрешает имена файлов, такие как kites.jpg или Kites.jpg, myscript.min.js, но не разрешает kites.jpg. или .kites.jpg.

Подробнее см. Руководство по регулярным выражениям в PHP.

flexbe banner 480x320flexbe banner 728x90flexbe banner 120x600smsc banner 480x320smsc banner 728x90smsc banner 120x600beget banner 480x320beget banner 728x90beget banner 120x600

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 2

Оценок пока нет. Поставьте оценку первым.

Похожие посты

Руководство по загрузке файлов на сервер в PHP

В этом руководстве мы узнаем, как загружать файлы на удаленный сервер с помощью простой HTML-формы и PHP. Вы можете загружать файлы любого типа, например изображения, видео, ZIP-файлы, документы Microsoft Office, PDF-файлы, а также исполняемые файлы и множество других типов файлов. Шаг 1. Создание HTML-формы для загрузки файла В следующем примере будет создана простая HTML-форма, которую…
Подробнее

Руководство по GET и POST запросам в PHP

Веб-браузер связывается с сервером, как правило, с помощью одного из двух HTTP-методов (протокола передачи гипертекста) — GET и POST. Оба метода передают информацию по-разному и имеют разные преимущества и недостатки, как описано ниже. PHP-метод GET В методе GET данные отправляются в виде параметров URL, которые обычно представляют собой строки пар имени и значения, разделенные амперсандами…
Подробнее

Список сообщений об ошибках в PHP

Обычно, когда движок PHP сталкивается с проблемой, препятствующей правильной работе скрипта, он генерирует сообщение об ошибке. Существует шестнадцать различных уровней ошибок, и каждый уровень представлен целым числом и связанной с ним константой. Вот список уровней ошибок: Название Значение Описание E_ERROR 1 Неустранимая ошибка времени выполнения от которой невозможно избавиться. Выполнение скрипта немедленно прекращается E_WARNING 2…
Подробнее