Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mendayakan Muat Turun Boleh Disambung semula dalam Skrip Pemindahan Fail PHP Saya?

Bagaimanakah Saya Boleh Mendayakan Muat Turun Boleh Disambung semula dalam Skrip Pemindahan Fail PHP Saya?

Linda Hamilton
Linda Hamiltonasal
2024-12-07 15:45:18725semak imbas

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

Mendayakan Muat Turun Boleh Semula dengan Skrip Pemindahan Fail PHP

Pengenalan

Apabila memindahkan fail menggunakan skrip PHP untuk tujuan keselamatan, laluan mutlak fail boleh dimuat turun selalunya perlu disembunyikan. Walau bagaimanapun, skrip pemindahan fail PHP tradisional mungkin tidak menyokong muat turun boleh disambung semula, menyebabkan kesulitan bagi pengguna akhir yang mengalami gangguan sambungan.

Penyelesaian: Menyokong Muat Turun Boleh Dibuat Semula

Untuk mendayakan muat turun boleh disambung semula, langkah berikut boleh dilakukan diambil:

  1. Hantar Accept-Julat: bait pengepala: Pengepala ini memberitahu pelanggan bahawa kandungan separa disokong.
  2. Kendalikan permintaan kandungan separa: Apabila menerima permintaan dengan pengepala Julat: bait=x-y, huraikan julat, cari ke offset yang dikehendaki dalam fail, dan hantar bait yang diminta julat.
  3. Tetapkan kod status HTTP kandungan separa: Balas dengan HTTP/1.0 206 Kandungan Separa untuk menunjukkan pemindahan separa yang berjaya.

Pelaksanaan PHP

Di bawah ialah contoh pelaksanaan prinsip ini dalam 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);

Skrip ini mula-mula menyemak sama ada permintaan kandungan separa telah dibuat. Jika ya, ia menghuraikan julat daripada pengepala Julat, mencari offset yang sesuai dalam fail dan menghantar julat bait yang diminta. Skrip juga menetapkan pengepala Accept-Ranges kepada bait dan menghantar kod status HTTP yang sesuai untuk kandungan separa jika perlu.

Dengan melaksanakan langkah-langkah ini, muat turun semula boleh disokong menggunakan skrip pemindahan fail PHP, menyediakan penyelesaian yang mantap untuk pemindahan fail yang boleh disambung semula selepas gangguan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendayakan Muat Turun Boleh Disambung semula dalam Skrip Pemindahan Fail PHP Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn