«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как включить возобновляемые загрузки в сценарии передачи файлов PHP?

Как включить возобновляемые загрузки в сценарии передачи файлов PHP?

Опубликовано 19 января 2025 г.
Просматривать:274

How Can I Enable Resumable Downloads in My PHP File Transfer Script?

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

Введение

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

Решение: поддержка возобновляемых загрузок

Чтобы включить возобновляемую загрузку, можно выполнить следующие действия: принято:

  1. Отправить диапазоны приема: байты заголовок: Этот заголовок сообщает клиенту, что поддерживается частичный контент.
  2. Обработка запросов частичного контента: При получении запроса с заголовком Range: bytes=x-y проанализируйте диапазон, найдите нужное смещение в файле и отправьте запрошенный диапазон байтов.
  3. Установите код состояния HTTP частичного содержимого: Ответьте с помощью HTTP/1.0 206 Частичное содержимое для обозначения успешной частичной передачи.

Реализация PHP

Ниже приведен пример реализации этих принципов в PHP:

$filesize = filesize($file);

$offset = 0;
$length = $filesize;

if (isset($_SERVER['HTTP_RANGE'])) {
    preg_match('/bytes=(\d )-(\d )?/', $_SERVER['HTTP_RANGE'], $matches);

    $offset = intval($matches[1]);
    $length = intval($matches[2]) - $offset;
}

$file = fopen($file, 'r');
fseek($file, $offset);
$data = fread($file, $length);
fclose($file);

if ($offset > 0) {
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $offset . '-' . ($offset   $length) . '/' . $filesize);
}

header('Content-Type: ' . $ctype);
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Accept-Ranges: bytes');

print($data);

Этот скрипт сначала проверяет, был ли сделан частичный запрос контента. Если это так, он анализирует диапазон из заголовка Range, ищет соответствующее смещение в файле и отправляет запрошенный диапазон байтов. Сценарий также устанавливает заголовок Accept-Ranges в байтах и ​​при необходимости отправляет соответствующий код состояния HTTP для частичного содержимого.

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3