根据我的研究,在脚本输出后无法更改标题.那么为什么在我编写的代码示例中,脚本在创建新标题之前有几个输出,但一切正常?
<?php
$name = "tommy" ;
?>
<?php
headers_sent($filename, $linenum) ;
header("name: $name") ;
echo "tommy <br>" ;
echo "Headers sent in $filename on line $linenum" ;
?>
Run Code Online (Sandbox Code Playgroud)
此外,输出表示标题是在第0行发送的...如果我之后添加了标题,那怎么可能呢?
如果我正确理解你的问题,那么我请你查看output_bufferingPHP.ini 中指令的值。默认值为 0,但 PHP 安装程序通常将其设置为 4096(从 php.ini-development 或 php.ini-product 复制)。您的示例中应该是这种情况,即缓冲已打开。
其次,你的代码示例有一个缺陷;它不检查函数返回的值headers_sent:
bool headers_sent ([ string &$file [, int &$line ]] )
Run Code Online (Sandbox Code Playgroud)
先检查返回值;如果返回值为 true ,则认为文件和行参数有效:
<?php
$name = "tommy";
?>
<?php
$sent = headers_sent($filename, $linenum);
header("name: $name");
echo "tommy <br>";
if ($sent) {
echo "Headers sent in $filename on line $linenum";
} else {
echo "Headers not sent";
}
?>
Run Code Online (Sandbox Code Playgroud)
输出:
bool headers_sent ([ string &$file [, int &$line ]] )
Run Code Online (Sandbox Code Playgroud)
总之:
注意:如果output_buffering设置为4096,那么这有效:
<?php
echo str_repeat(" ", 4095);
header("X-Foo: Bar");
echo ".";
Run Code Online (Sandbox Code Playgroud)
但这会失败,并出现标头已发送错误:
<?php
echo str_repeat(" ", 4096);
header("X-Foo: Bar");
echo ".";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |