Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah yang perlu saya lakukan jika saya tidak boleh menghantar fail php yang besar?

Apakah yang perlu saya lakukan jika saya tidak boleh menghantar fail php yang besar?

藏色散人
藏色散人asal
2023-01-18 09:22:311990semak imbas

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".

Apakah yang perlu saya lakukan jika saya tidak boleh menghantar fail php yang besar?

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-

pada pengepala HTTP dan kod status HTTP yang dikembalikan oleh pelayan pada masa ini hendaklah 206, bukan 200.

Walau bagaimanapun, dalam senario sebenar, akan ada situasi, iaitu, apabila terminal memulakan permintaan penyambungan semula, kandungan fail yang sepadan dengan URL telah berubah di sisi pelayan, dan data penyambungan mesti salah . Bagaimana untuk menyelesaikan masalah ini? Jelas sekali pada masa ini kita memerlukan kaedah untuk mengenal pasti keunikan fail tersebut. Terdapat juga takrifan yang sepadan dalam RFC2616, seperti melaksanakan Last-Modified untuk mengenal pasti masa pengubahsuaian terakhir fail, supaya anda boleh menentukan sama ada perubahan telah berlaku apabila fail disambung semula. Pada masa yang sama, RFC2616 juga mentakrifkan pengepala ETag Anda boleh menggunakan pengepala ETag untuk meletakkan pengecam unik fail, seperti nilai MD5 fail.
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!

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