警告:无法修改标头信息 - 已发送的标头

时间:2009-02-03 06:09:39

标签: php html xml

当我运行player.php时,它会出现此错误:

Warning: Cannot modify header information - headers already sent by (output started 
at /www/110mb.com/m/u/s/i/c/k/i/n/musicking/htdocs/player.php:8) in
/www/110mb.com/m/u/s/i/c/k/i/n/musicking/htdocs/player.php on line 24

你能帮忙吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Player</title>
</head>
<body>
<?php
if(isset($_POST["song"])&& $_POST['song'] != "")
    {
        $song = $_POST["song"];
    }
    else {$song=array();}
for ($i="0"; $i<count($song); $i++) {
}
//start of new php codep
// create doctype
//$array = array(
  //  'song.mp3','song.mp3','song.mp3',
//);
$dom = new DOMDocument("1.0");
// display document in browser as plain text
// for readability purposes
header("Content-Type: text/plain");
// create root element
$root = $dom->createElement("xml");
$dom->appendChild($root);
$i = "1";
foreach ($song as $counter) {
// create child element
$song = $dom->createElement("track");
$root->appendChild($song);
$song1 = $dom->createElement("path");
$song->appendChild($song1);
// create text node
$text = $dom->createTextNode($counter);
$song1->appendChild($text);
$song1 = $dom->createElement("title");
$song->appendChild($song1);
$text = $dom->createTextNode("song ".$i);
$song1->appendChild($text);
$i++;
}
// save and display tree
$dom->save("playlist.xml");
?>
<script type="text/javascript" src="swfobject.js">
</script>
<div id="flashPlayer">
  This text will be replaced by the flash music player.
</div>
<script type="text/javascript">
   var so = new SWFObject("playerMultipleList.swf", "mymovie", "295", "200", "7", "#FFFFFF");  
   so.addVariable("autoPlay","yes")
   so.addVariable("playlistPath","playlist.xml")
   so.write("flashPlayer");
</script>
</body>
</html>

5 个答案:

答案 0 :(得分:7)

由于在您的第一个<?php标记之前显示的HTML,因此会触发错误消息。在调用header()之前,您无法输出任何内容。要修复此错误,请使用<?php标记启动文档,并在完成处理输出XML for flash的条件后才开始输出HTML。

更清洁的解决方案是将flash的XML生成和HTML输出分离到不同的文件中。

答案 1 :(得分:4)

错误消息表示php脚本在调用header()函数或需要修改http标头的任何其他内容之前已经将输出发送到浏览器。

如果没有看到脚本格式正确,很难尝试和诊断出问题的位置,但是这一行:

header("Content-Type: text/plain");

应该在php标签的脚本开头。

答案 2 :(得分:1)

似乎你正在尝试使用Flash MP3播放器,但是你混淆了一些东西。

你在播放器所在的同一个文件上生成XML播放列表文件,你可以这样做,但我认为让一个生成XML的genPlayList.php文件更清晰,更简单档案给你。

然后在您的MP3播放器页面中,您只能引用该脚本:

....
so.addVariable("playlistPath","genPlayList.php");
....

答案 3 :(得分:0)

像nav说的那样,这意味着已经发送了输出。在这种情况下,它是所有的

<!DOCTYPE html PUBLIC ...
....
<body>
你去那里了。 你应该在此之前移动整个php处理块。

答案 4 :(得分:0)

尝试使用 javascript重定向,而不是使用标题重定向。