Ralat Telah Dihantar dalam PHP
Apabila menjalankan skrip PHP, anda mungkin menghadapi ralat seperti:
Warning: Cannot modify header information - headers already sent by (output started at /some/file.php:12) in /some/file.php on line 23
Salin selepas log masuk
Ini berlaku apabila pengepala HTTP cuba dihantar/diubah suai selepas sebarang output dijana. Fungsi seperti header(), setcookie(), dan session_start() memerlukan pengepala dihantar sebelum sebarang output dibuat.
Punca Pengepala Telah Dihantar Ralat
Output Tidak Disengajakan:
- Ruang putih sebelum
- UTF-8 Byte Order Mark (BOM)
- Mesej atau notis ralat sebelumnya
Output Sengaja:
- Berfungsi seperti mencetak, gema atau lain-lain menghasilkan output
- HTML Mentah bahagian
Mengenal pasti Sumber Output
Mesej ralat biasanya termasuk baris di mana fungsi pengepala dipanggil (cth., baris 23) dan sumber output pramatang (cth., baris 12).
Penyelesaian
Elakkan Pramatang Output:
- Gunakan fungsi dan skema templat untuk menyusun semula aliran aplikasi.
- Pastikan panggilan header() dibuat sebelum menulis mesej atau memaparkan output.
Betulkan Spesifik Punca:
-
Cetak/Gema: Gunakan fungsi seperti trigger_error, ob_flush atau var_dump untuk mengurus output.
-
HTML Mentah: Place pemprosesan borang dan syarat skrip sebelum HTML bahagian.
-
Ruang putih: Alih keluar ruang putih terkemuka atau gunakan teg PHP yang panjang () dan bukannya teg trengkas (=).
- UTF-8 BOM: Tetapkan editor teks anda untuk menyimpan fail sebagai "UTF-8 (tiada BOM)" atau gunakan editor heks untuk mengalih keluar BOM.
- Mengekor Ruang Putih selepas ?>: Abaikan mengekori teg tutup PHP.
-
Lain-lain: Semak sambungan PHP atau tetapan php.ini yang mungkin menyebabkan output tersirat.
-
Ralat Mesej: Elakkan ralat, tangguhkan pelaksanaannya atau sekatkannya menggunakan isset() atau @().
Penimbalan Output (Penyelesaian):
- Dayakan output penimbalan dengan menetapkan output_buffering dalam php.ini atau menggunakan ob_start().
- Gunakan ob_clean() jika kandungan binari dijana.
- Perhatikan bahawa penimbalan output bukan pengganti untuk penstrukturan aplikasi yang betul.
Penyelesaian Saling Balik :
-
HTML Meta Teg: Suntikan
-
JavaScript Redirect: Gunakan location.replace () atau location.href= untuk mengubah hala pelanggan.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Tajuk Sudah Dihantar' dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!