Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amaran PHP: Tidak boleh mengubah suai maklumat pengepala - Penyelesaian

Amaran PHP: Tidak boleh mengubah suai maklumat pengepala - Penyelesaian

WBOY
WBOYasal
2023-08-20 22:05:091141semak imbas

PHP Warning: Cannot modify header information - 解决方案

Amaran PHP: Tidak boleh mengubah suai maklumat pengepala - Penyelesaian

Semasa proses pembangunan menggunakan PHP, kadangkala kita menemui mesej amaran ini: "Tidak boleh mengubah suai maklumat pengepala - pengepala sudah dihantar". Mesej amaran ini biasanya disebabkan oleh cuba mengubah suai maklumat pengepala HTTP selepas mengeluarkan kandungan dalam kod. Artikel ini akan memperkenalkan analisis sebab dan penyelesaian mesej amaran ini, dan menyediakan beberapa contoh kod untuk membantu pembaca memahami dengan lebih baik.

  1. Punca mesej amaran

Sebelum mengetahui cara menyelesaikan masalah ini, fahami dahulu mengapa mesej amaran ini muncul. Apabila kami menggunakan fungsi header() dalam kod PHP untuk mengubah suai maklumat pengepala HTTP, PHP perlu memastikan pengubahsuaian dibuat sebelum sebarang output. Jika anda memanggil fungsi pengepala() untuk mengubah suai maklumat pengepala selepas mengeluarkan kandungan, mesej amaran ini akan muncul.

Jadi apakah kandungan output? Dalam PHP, sebagai tambahan kepada fungsi output biasa kami seperti echo dan print_r, kandungan lain seperti ruang, baris baharu, tag HTML dan baris kosong akan dianggap sebagai kandungan output. Apabila kandungan output ini muncul sebelum fungsi header() dipanggil, mesej amaran akan berlaku.

  1. Penyelesaian

Untuk menyelesaikan masalah ini, ia bukanlah satu perkara yang rumit. Berikut ialah beberapa penyelesaian biasa:

2.1 Alihkan kod sebelum kandungan output ke sebelum panggilan fungsi header()

Cara paling mudah ialah memastikan panggilan fungsi header() berlaku sebelum sebarang kandungan output. Mengalihkan kod yang mungkin menghasilkan kandungan output sebelum fungsi header() boleh mengelakkan mesej amaran.

Berikut ialah contoh:

<?php
// 其他代码

ob_start(); // 开启输出缓冲区

// 输出内容
echo "Hello, World!";

// 其他代码

ob_end_flush(); // 输出缓冲区内容并关闭缓冲区

// 修改HTTP头信息
header("Content-type: text/html; charset=utf-8");
?>

Dalam kod di atas, kami menggunakan dua fungsi ob_start() dan ob_end_flush() untuk membuka dan menutup penimbal output PHP. Selepas membuka penimbal output, semua kandungan output akan dicache dalam ingatan sehingga ia dikeluarkan sekali apabila penimbal ditamatkan.

2.2 Gunakan fungsi exit() atau die() function

Jika bahagian tertentu kod anda perlu menghentikan pelaksanaan serta-merta dan mengubah suai maklumat pengepala HTTP, anda boleh menggunakan fungsi exit() atau die() di mana anda perlukan untuk menghentikan pelaksanaan )fungsi. Kedua-dua fungsi ini akan segera menamatkan pelaksanaan skrip dan tidak lagi mengeluarkan apa-apa, sekali gus mengelakkan berlakunya mesej amaran.

Berikut ialah contoh:

<?php
// 其他代码

// 输出内容
echo "Hello, World!";

// 修改HTTP头信息并立即停止执行
header("Content-type: text/html; charset=utf-8");
exit();
?>

2.3 Menggunakan fungsi Output Buffering

Dalam PHP, terdapat beberapa fungsi Output Buffering yang boleh membantu kami menangkap kandungan output sebelum mengubah suai maklumat pengepala. Fungsi ini termasuk ob_start(), ob_get_contents(), ob_end_clean(), dsb. Dengan menggunakan fungsi ini, kami boleh mengubah suai maklumat pengepala selepas mengeluarkan kandungan tanpa mencetuskan mesej amaran.

Berikut ialah contoh:

<?php
// 其他代码

ob_start(); // 开启输出缓冲区

// 输出内容
echo "Hello, World!";

// 获取缓冲区内容并清空缓冲区,之后再修改HTTP头信息
$content = ob_get_contents();
ob_end_clean();

// 修改HTTP头信息
header("Content-type: text/html; charset=utf-8");

// 输出内容
echo $content;
?>

Dalam kod di atas, kami menggunakan fungsi ob_get_contents() untuk mendapatkan kandungan penimbal output, fungsi ob_end_clean() untuk mengosongkan penimbal output, dan kemudian mengubah suai maklumat pengepala. Akhir sekali, kandungan penimbal yang diperoleh sebelum ini adalah output melalui gema.

  1. Ringkasan

Dengan penyelesaian di atas, kita boleh mengelakkan kemunculan mesej amaran PHP: "Tidak boleh mengubah suai maklumat pengepala - pengepala sudah dihantar". Sama ada anda mengalihkan kod sebelum kandungan output sebelum fungsi header(), gunakan fungsi exit() atau die() atau gunakan fungsi Output Buffering, anda boleh menyelesaikan masalah ini dengan berkesan.

Dalam pembangunan sebenar, jika kita boleh mengikuti tabiat pengekodan yang baik dan cuba mengelak daripada mengubah suai maklumat pengepala selepas mengeluarkan kandungan, kita boleh mengelakkan berlakunya mesej amaran tersebut. Pada masa yang sama, memahami penyelesaian yang berkaitan dan menerapkannya dengan sewajarnya boleh mengelakkan masalah ini dengan lebih baik dan memastikan kebolehpercayaan dan kestabilan kod.

Atas ialah kandungan terperinci Amaran PHP: Tidak boleh mengubah suai maklumat pengepala - Penyelesaian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn