Amaran: Tidak dapat mengubah suai maklumat pengepala - pengepala sudah mula menghantar output pada baris 12 /some/file.php pada baris 23 /some/file.php
P粉164942791
2023-07-30 11:19:01
<p>Untuk memahami sebab pengepala mesti dihantar sebelum output, anda perlu melihat respons HTTP biasa. Skrip PHP terutamanya menjana kandungan HTML dan juga menghantar satu set pengepala HTTP/CGI ke pelayan web. Ralat ini berlaku apabila anda mengehoskan tapak web dengan pangkalan data atau tapak PHP pada pelayan. Mula-mula, anda perlu pergi ke tapak web pengehosan anda, cari fail .htaccess, tambah arahan berikut di dalamnya (php_flag output_buffering on), dan masalah anda akan diselesaikan. </p>
Inilah perkara yang boleh anda lakukan untuk menyelesaikan masalah dan menyelesaikan isu ini:
Semak baris yang ditentukan: Mesej amaran menunjukkan bahawa output bermula pada baris 12 /some/file.php, dan anda cuba mengubah suai maklumat pengepala dalam talian 23. Pergi ke baris ini dan pastikan tiada ruang, gema, cetakan, HTML atau output lain sebelum panggilan fungsi header() pada baris 23.
Alih keluar mana-mana ruang utama: Jika mana-mana fail PHP disertakan atau diperlukan sebelum fail semasa (cth. menggunakan sertakan atau memerlukan), pastikan fail ini tidak mempunyai sebarang ruang utama sebelum teg <?php pembukaan. Ruang kosong di luar teg PHP dianggap sebagai output dan boleh menyebabkan amaran ini.
Elakkan teg PHP penutup: Dalam fail PHP yang mengandungi hanya kod PHP (tiada HTML), biasanya disyorkan untuk meninggalkan teg PHP penutup (?>) pada penghujung fail. Ini memastikan tiada ruang atau aksara yang tidak dijangka selepas teg penutup untuk mengelakkan daripada mencetuskan output.
Gunakan penimbalan output: Jika terdapat beberapa output yang tidak dapat dielakkan sebelum panggilan header() (cth. disebabkan kebergantungan perpustakaan atau pernyataan bersyarat), anda boleh menggunakan penimbalan output untuk menangkap output dan menghalangnya daripada dihantar ke penyemak imbas dengan segera. Gunakan ob_start() pada permulaan skrip PHP untuk memulakan penimbalan output, dan gunakan ob_end_flush() atau ob_end_clean() untuk menamatkan penimbalan output sebelum panggilan header().
Contoh menggunakan penimbalan output: