2009-02-03 5 views
1

Quand je lance player.php cela donne cette erreur:Avertissement: Impossible de modifier les informations d'en-tête - têtes déjà envoyés par

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 

Pouvez-vous s'il vous plaît aider?

<!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> 

Répondre

7

Le message d'erreur est déclenché en raison du code HTML qui apparaît avant votre première balise <?php. Vous ne pouvez rien sortir avant l'appel de header(). Pour corriger cette erreur, démarrez votre document avec la balise <?php et commencez seulement à sortir le code HTML une fois que vous avez terminé de gérer la condition qui sort XML pour flash.

Une solution plus propre serait de séparer la génération XML pour Flash et la sortie HTML dans différents fichiers.

+0

Cela vaut la peine de noter que vous pouvez commencer à sortir des choses avec php avant un appel d'en-tête si vous activez la mise en mémoire tampon de sortie. Utile dans certaines situations autrement frustrantes. http://php.net/manual/en/ref.outcontrol.php – navitronic

+0

La mise en mémoire tampon de sortie peut être très utile. Notez que dans le code original, il faudrait supprimer la sortie précédente avant de renvoyer le XML, ce qui est une mauvaise pratique. –

4

Le message d'erreur signifie que le script php sortie a déjà envoyé au navigateur avant d'appeler la fonction header() ou toute autre chose qui nécessite de modifier les en-têtes HTTP.

il est vraiment difficile d'essayer de diagnostiquer où le problème est sans INTERVENUES voir le script correctement formaté, mais cette ligne:

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

devrait être au début du script dans les balises php.

+0

thn x un lot .............. – musicking123

+0

upvote pour un conseil pratique Navitronic! – patrick

0

Comme dit nav, cela signifie que la sortie a déjà été envoyée. Dans ce cas, c'est tous les

<!DOCTYPE html PUBLIC ... 
.... 
<body> 

vous y êtes allé. Vous devez déplacer tout le bloc de traitement php avant cela.

1

Il semble que vous essayiez d'utiliser un lecteur MP3 Flash, mais vous mélangez certaines choses. Vous générez le fichier de playlist XML sur le même fichier que vous avez le lecteur, vous pouvez le faire, mais je pense que ce sera plus clair et plus simple d'avoir un fichier genPlayList.php qui va générer le fichier. Fichier XML pour vous.

Ensuite, dans la page du lecteur MP3 vous pouvez avoir seulement une référence à ce script:

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

javascript Essayez d'utiliser rediriger au lieu de rediriger avec en-tête.

Questions connexes