cari

Rumah  >  Soal Jawab  >  teks badan

Apabila menggunakan gema untuk mengeluarkan rentetan binari yang besar kepada respons HTTP dalam PHP, pelayan mengembalikan respons yang tidak betul.

<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粉328911308P粉328911308453 hari yang lalu509

membalas semua(1)saya akan balas

  • P粉966335669

    P粉9663356692023-08-29 09:05:32

    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

    balas
    0
  • Batalbalas