将PHP的header()放在函数内调用是否会引发错误?
PHP中封装
header()到函数仍会引发头部已发送错误的原因 这种将header()放入函数再调用的写法依然会引发错误,无法正常实现跳转。
核心原因
PHP的header()函数有严格的执行要求:必须在任何HTTP输出(包括echo内容、HTML标签、甚至文件开头的空白字符)发送到浏览器之前调用。
你提供的两段test.php代码,执行逻辑本质完全一致:
- 先执行
echo 'Nice';,此时已经向输出缓冲区写入了内容(若缓冲区未开启或已满,内容会直接发送到浏览器); - 再调用
header()(不管是直接调用还是通过函数间接调用),PHP会检测到已有输出产生,随即抛出"Headers already sent"的错误,Location跳转也不会生效。
函数封装只是改变了代码的组织形式,并没有改变代码的执行顺序和输出时机,因此无法解决头部已发送的问题。
正确的解决方式
要实现正常跳转,必须保证header()调用在所有输出之前,比如调整代码顺序:
function process () { header ( "Location: https://example.com" ); } process(); echo 'Nice';
或者使用输出缓冲区控制(开启缓冲区后,输出会先暂存,直到缓冲区被刷新,此时头部已发送完成):
ob_start(); // 开启输出缓冲区 echo 'Nice'; function process () { header ( "Location: https://example.com" ); } process(); ob_end_flush(); // 刷新缓冲区
内容的提问来源于stack exchange,提问作者yobebix932
相关产品推荐
相关产品推荐

