Apabila melaksanakan skrip PHP, anda mungkin menghadapi ralat berikut:
Warning: Cannot modify header information - headers already sent by (output started at /some/file.php:12) in /some/file.php on line 23
Ralat ini berlaku apabila pengepala cuba dihantar selepas output telah dihantar kepada klien. Inilah sebabnya perkara ini berlaku dan cara menyelesaikannya:
Fungsi seperti header(), header_remove(), session_start(), dan setcookie() memerlukan pengepala dihantar sebelum sebarang output dijana. Jika output dijana sebelum fungsi ini dipanggil, amaran akan dicetuskan.
Output boleh berlaku secara tidak sengaja disebabkan oleh:
Sengaja, output boleh dijana oleh:
Ralat mesej menyediakan nombor baris dan fail di mana output pramatang berlaku dan tempat header() digunakan. Cari baris yang disebut dalam bahagian "output dimulakan pada" mesej ralat untuk menentukan tempat output dijana.
1. Keluarkan Output Pramatang:
Pastikan tiada output pramatang sebelum panggilan header(). Ini termasuk mengalih keluar ruang kosong tambahan, BOM atau output yang disengajakan seperti pernyataan gema.
2. Gunakan Penimbalan Output:
Penimbalan output boleh membantu mengurangkan isu ini dengan melambatkan output daripada dihantar kepada klien. Dayakan penimbalan output melalui tetapan konfigurasi penimbalan_keluaran dalam php.ini, .htaccess atau .user.ini.
3. Semak dengan headers_sent():
Gunakan headers_sent() untuk menyemak sama ada boleh menghantar pengepala sebelum melaksanakan tindakan sensitif. Jika headers_sent() mengembalikan benar, gunakan kaedah alternatif seperti teg meta HTML atau ubah hala JavaScript.
4. Kawalan Berasingan dan Logik Output:
Kod refactor untuk memisahkan logik kawalan dan penjanaan output. Ini membantu menghalang keluaran pramatang dengan memastikan bahawa panggilan pengepala dibuat sebelum sebarang output dipaparkan.
5. Betulkan BOM dengan Editor atau Alat:
BOM boleh hadir dalam fail teks dan boleh membawa kepada output pramatang. Gunakan editor teks dengan pengesanan BOM atau alatan seperti phptags untuk membetulkan isu BOM.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Tajuk Sudah Dihantar' dalam PHP dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!