<h3>警告:无法修改标题信息-标题已发送</h3>
<p>当脚本尝试将HTTP头发送到客户端但之前已经有输出时发生,这导致头已发送到客户端。</p>
<p>这是一个<a href="http://www.php.net/manual/en/errorfunc.constants.php" rel="noreferrer">^{<cd1>}</a>,它不会停止脚本。</p>
<p>典型的例子是这样的模板文件:</p>
<pre><code><html>
<?php session_start(); ?>
<head><title>My Page</title>
</html>
...
</code></pre>
<p><code>session_start()</code>函数将尝试将带有会话cookie的头发送到客户端。但是PHP在将<code><html></code>元素写入输出流时已经发送了头。你得把<code>session_start()</code>移到上面。</p>
<p>您可以通过在触发警告的代码</em>之前遍历<em>行并检查其输出位置来解决这个问题。在该代码之前移动任何发送头代码。</p>
<p>一个经常被忽略的输出是PHP关闭后的新行<code>?></code>。当<code>?></code>是文件中的最后一项内容时,省略它被认为是一种标准做法。同样,此警告的另一个常见原因是,当开头的<code><?php</code>前面有空格、行或不可见字符时,导致web服务器发送头和空白/换行符,因此当PHP开始解析时将无法提交任何头。</p>
<p>如果文件中有多个<code><?php ... ?></code>代码块,则它们之间不应该有任何空格。(注意:如果有自动构造的代码,则可能有多个块)</p>
<p>还要确保代码中没有任何字节顺序标记,例如脚本编码为带BOM的UTF-8时。</p>
<p>相关问题:</p>
<ul>
<li><a href="https://stackoverflow.com/questions/8028957/headers-already-sent-by-php">Headers already sent by PHP</a></li>
<li><a href="https://stackoverflow.com/search?q=headers+already+sent+[php]">All PHP "Headers already sent" Questions on Stackoverflow</a></li>
<li><a href="https://stackoverflow.com/search?q=BOM+php">Byte Order Mark</a></li>
<li><a href="https://stackoverflow.com/questions/4673747/what-php-functions-create-output">What PHP Functions Create Output?</a></li>
</ul>