Problème doctype flux RSS

WRInaute discret
Bonjour,

Je viens de créer mon premier flux RSS.
Il est créé en php avec une mise en cache.
En local avec wamp tout marche bien.

Par contre en production, j'ai un bug:
La première fois que j'ouvre mon flux, il s'affiche correctement et crée le cache (normal).
Par contre quand je l'ouvre une deuxième fois, il va chercher le cache et m'affiche ce message d'erreur "Parse error: syntax error, unexpected T_STRING in ******* on line 1"
La ligne 1 contient:

Code:
<?xml version="1.0" encoding="utf-8"?>

Je la crée tout simplement comme ceci:

Code:
echo '<?xml version="1.0" encoding="utf-8"?>'."\n";

Je ne vois pas ce qui ne va pas.
Si j'enlève cette ligne, il ouvre le cache et affiche le flux correctement.

Qu'est ce qui ne va pas dans cette ligne?

Merci d'avance.
 
WRInaute passionné
Ton fichier commence bien par
Code:
<?php
? Car si c'est la ligne un il manque quelque chose et dans le cas où tu aurais short tag sur ON, la première occurrence de <? serait ton xml.
 
WRInaute discret
tryan a dit:
Salut,
Essaye comme ça :
Code:
echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
Merci, mais ça ne change rien.
Le premier affichage fonctionne et ensuite quand il va chercher le cache ça marche plus.
 
WRInaute discret
Julia41 a dit:
Ton fichier commence bien par
Code:
<?php
? Car si c'est la ligne un il manque quelque chose et dans le cas où tu aurais short tag sur ON, la première occurrence de <? serait ton xml.

Mon fichier php commence bien par:
Code:
<?php

Mais je ne pense pas que cela vienne de mon php, puisqu'au premier lancement ca marche.
C'est quand il va chercher le cache qu'il plante.

Mon cache commence comme cela:
Code:
<?xml version="1.0" encoding="utf-8"?>
  <rss version="2.0">
   <channel>
Cela me parait bon, non ?
 
WRInaute passionné
Cela me parait bon, ton cache doit alors être "mal" récupéré, sans ton code de cache, je ne peux pas t'en dire plus.
 
WRInaute discret
Voici une partie du code php qui crée le flux et la mise en cache:
Code:
<?php
//Debut de la mise en cache
$urldemandee=$_SERVER['REQUEST_URI'];
$urldemandee = ereg_replace('/','-',$urldemandee);
if($urldemandee=="-") $urldemandee="index.html";
$fichierCache="cache/".$urldemandee;
if (@filemtime($fichierCache)<time()-(3600*24*1)) {
   ob_start();
//Fin du debut du cache

echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
echo '<rss version="2.0">'."\n";
    echo '<channel>'."\n";
    .......
    .......
     ect


//Fin du cache
$contenuCache = ob_get_contents();
   ob_end_flush();
   $fd = fopen("$fichierCache", "w");
   if ($fd) {
	  fwrite($fd,$contenuCache);
	  fclose($fd);
	 }
} else {
  include ($fichierCache);
}
?>

Voyez-vous quelque chose d'anormal ?
Ma mise en cache fonctionne bien pour tous le reste du site.
Ce qui est bizarre c'est que pour le rss ca marche bien sous wamp et pas en production!
 
WRInaute passionné
Code:
if (@filemtime($fichierCache)<time()-(3600*24*1)) {
   ob_start();
//Fin du debut du cache

echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";

Voilà à rempalcer par :
Code:
if (@filemtime($fichierCache)<time()-(3600*24*1)) {
   ob_start();
}
//Fin du debut du cache

echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
 
WRInaute discret
Julia41 a dit:
Code:
if (@filemtime($fichierCache)<time()-(3600*24*1)) {
   ob_start();
//Fin du debut du cache

echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";

Voilà à rempalcer par :
Code:
if (@filemtime($fichierCache)<time()-(3600*24*1)) {
   ob_start();
}
//Fin du debut du cache

echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";

Ben non, Cette condition doit-être fermé aprés création du cache donc à la fin.
 
Nouveau WRInaute
N'oublie pas :

if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')!==false){
header('Content-Type:text/xml');
}else{
header('Content-Type:application/rss+xml');
}

Si tu veux que ça soit parfait :D
 
Discussions similaires
Haut