Apabila menggunakan gema untuk mengeluarkan rentetan binari yang besar kepada respons HTTP dalam PHP, pelayan mengembalikan respons yang tidak betul.
P粉328911308
P粉328911308 2023-08-28 10:26:38
0
1
510
<p>Saya cuba mengeluarkan beberapa tatasusunan binari yang besar kepada respons HTTP menggunakan kod berikut: </p> <pre class="brush:php;toolbar:false;">$bin = NULL; $strLenToOutput = 8000; untuk ($i=0; $i < $strLenToOutput; $i++) { $bin .= pack("C", 1); } header('Perihalan-Kandungan: Pemindahan Fail'); header("Jenis Kandungan: aplikasi/strim oktet"); header("Pelupusan Kandungan: lampiran; nama fail=test.bin"); header("Content-Length: filesize=" . strlen($bin)); header("Cache-Control: no-cache"); echo $bin;</pre> <p>Apabila rentetan yang akan dikeluarkan agak pendek, kurang daripada atau sama dengan 8000, kod di atas berfungsi dengan baik. Tetapi jika panjang rentetan dinaikkan kepada 8001, saya mendapat ralat berikut dalam Posmen: </p> <pre class="brush:php;toolbar:false;">Ralat Parse: Pelayan mengembalikan respons yang salah</pre> <p>Saya menjalankan PHP7.4 pada Apache V2.4.46, semua tetapan adalah lalai. </p> <p>Apa yang saya buat salah di sini? Adakah kod PHP atau beberapa tetapan pada Apache2 yang perlu diubah? </p> <p>Sila berikan panduan, terima kasih terlebih dahulu. </p> <p>Kemas kini: Jika saya mengalih keluar baris berikut yang menetapkan panjang fail, kod PHP berfungsi dengan baik. Saya rasa masalahnya ialah saya harus membiarkan PHP mengendalikan bahagian ini sendiri. </p> <pre class="brush:php;toolbar:false;">//header("Content-Length: filesize=" . strlen($bin));</pre></p>
P粉328911308
P粉328911308

membalas semua(1)
P粉966335669

Masalahnya terletak pada cara pengepala Kandungan-Panjang ditetapkan. Kod asal menetapkan pengepala

header("Content-Length: filesize=" . strlen($bin));

hendaklah ditetapkan seperti ini:

header("Content-Length: " . strlen($bin));

Teks tambahan "filesize=" dalam pengepala hanya akan mengelirukan penghuraian jawapan pelanggan. Apabila Panjang Kandungan kurang daripada atau sama dengan 8000, pelanggan mungkin mempunyai cara untuk pulih, tetapi ia tidak dapat menangani keadaan apabila Panjang Kandungan lebih besar daripada atau sama dengan 8001

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan