Penyelesaian kepada fail besar PHP yang tidak boleh dihantar: 1. Tetapkan parameter Julat, dengan sintaks seperti "Julat: (unit=pos bait pertama)-[pos bait terakhir]" 2. Tetapkan "Kandungan -Julat"; 3. Muat turun keseluruhan fail melalui permintaan "GET /test.rar HTTP/1.1 Sambungan: tutup Hos: 116.1.219.219".
Persekitaran pengendalian tutorial ini: sistem Windows 10, PHP versi 8.1, komputer DELL G3
Apakah yang perlu saya lakukan jika Saya tidak boleh menghantar fail PHP yang besar?
Penyelesaian PHP untuk memuat naik fail yang sangat besar
1. sebenarnya hanya Merujuk kepada muat turun, yang bermaksud untuk meneruskan muat turun dari titik di mana fail telah dimuat turun. Titik putus tidak disokong dalam versi sebelumnya protokol HTTP, tetapi telah disokong sejak HTTP/1.1. Umumnya, pengepala entiti Julat dan Julat Kandungan hanya digunakan untuk muat turun titik putus. Protokol HTTP itu sendiri tidak menyokong muat naik titik putus dan perlu dilaksanakan sendiri.
2. Julat
digunakan dalam pengepala permintaan untuk menentukan kedudukan bait pertama dan kedudukan bait terakhir, secara amnya Format:
Julat: digunakan untuk permintaan daripada klien ke pelayan Anda boleh menentukan saiz dan unit segmen tertentu fail yang dimuat turun dengan menukar medan bait dimulakan daripada 0. Format biasa:
Ranges: (unit=first byte pos)-[last byte pos] Ranges: bytes=4000- 下载从第4000字节开始到文件结束部分 Ranges: bytes=0~N 下载第0-N字节范围的内容 Ranges: bytes=M-N 下载第M-N字节范围的内容 Ranges: bytes=-N 下载最后N字节内容
1 Perkara berikut perlu diberi perhatian:
(1) Selang data ini adalah selang tertutup. , bermula dari Nilai ialah 0, jadi permintaan seperti "Julat: bait=0-1" sebenarnya meminta 2 bait pertama.
(2) "Julat: bait=-200", ia tidak menunjukkan permintaan 201 bait pada permulaan fail, tetapi menunjukkan permintaan 200 bait pada penghujung fail.
(3) Jika pos bait terakhir kurang daripada pos bait pertama, maka permintaan Julat ini adalah permintaan tidak sah Pelayan perlu mengabaikan permintaan Julat ini, kemudian balas dengan 200, dan hantarkan keseluruhan fail ke pelanggan.
(4) Jika pos bait terakhir lebih besar daripada atau sama dengan panjang fail, maka permintaan Julat ini dianggap tidak memuaskan dan pelayan perlu membalas dengan julat 416, Requested not satisfiable.
2 Contoh penjelasan:
mewakili 500 bait pertama: bait=0-499
mewakili 500 bait kedua: bait =500- 999
mewakili 500 bait terakhir: bait=-500
mewakili julat selepas 500 bait: bait=500-
Satu bait pertama dan terakhir: bait=0 -0,-1
Tentukan beberapa julat pada masa yang sama: bait=500-600,601-999
3 Kandungan-Julat
digunakan dalam pengepala respons untuk menentukan kedudukan sisipan sebahagian daripada keseluruhan entiti. Ia juga menunjukkan panjang keseluruhan entiti. Sebelum pelayan mengembalikan respons separa kepada klien, ia mesti menerangkan julat yang diliputi oleh respons dan keseluruhan panjang entiti. Format umum:
Contoh pengepala
Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]
Permintaan untuk memuat turun keseluruhan fail:
Respons biasanya normal
GET /test.rar HTTP/1.1 Connection: close Host: 116.1.219.219 Range: bytes=0-801 //一般请求下载整个文件是bytes=0- 或不用这个头
Pelaksanaan kasar penghantaran resume breakpoint As berikut:
HTTP/1.1 200 OK Content-Length: 801 Content-Type: application/octet-stream Content-Range: bytes 0-800/801 //801:文件总大小
1 Pelanggan memuat turun fail 1024K, yang mana 512K telah dimuat turun
2 Rangkaian terganggu dan pelanggan meminta penyambungan semula, jadi keperluan untuk kali ini perlu diisytiharkan dalam pengepala HTTP Serpihan pemindahan disambung semula:
Pengepala ini memberitahu pelayan untuk mula memindahkan fail dari kedudukan 512K fail 3 minta dan bermula dari kedudukan 512K fail, dan tambahkan:Range:bytes=512000-
Content-Range:bytes 512000-/1024000
Apabila memulakan permintaan resume, terminal harus mengisytiharkan medan If-Match atau If-Modified-Since dalam pengepala HTTP untuk membantu pelayan mengenal pasti perubahan fail.
Selain itu, RFC2616 juga mentakrifkan pengepala Julat-Jika Terminal menggunakan Julat-Jika ia menyambung semula penghantaran. Kandungan dalam If-Range boleh menjadi pengepala ETag yang diterima pada mulanya atau masa terakhir diubah suai dalam Last-Modfied. Apabila pelayan menerima permintaan penyambungan semula, ia mengesahkan kandungan dalam Julat-Jika jika pengesahan adalah konsisten, ia mengembalikan respons penyambungan 206 Jika ia tidak konsisten, pelayan mengembalikan respons 200 dan kandungan respons adalah yang baharu fail.
Pembelajaran yang disyorkan: "
Tutorial Video PHP"
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika saya tidak boleh menghantar fail php yang besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!