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:
<?xml version="1.0" encoding="utf-8"?>


Je la crée tout simplement comme ceci:
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.
Modifié par yann123 (28 Dec 2009 - 22:59)
Aurais-tu, par hasard, oublié d'ouvrir la balise PHP selon sa notation complète ?
Modifié par Victor BRITO (24 Dec 2009 - 17:04)
Voici une partie du code php qui crée le flux et la mise en cache:


<?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";
    .......
    .......


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

PS: Je n'ai pas précisé que c'était du code php pour afficher mon code sinon il s'arrête après utf-8" ?> et n'affiche pas le reste. Il doit croire que c'est la fin du php.
Peut-être un indice!!!
Modifié par yann123 (24 Dec 2009 - 17:57)
bonjour,

d'après ce que tu nous dis tu utilises Wamp donc un systeme Microsoft et tu utilise un retour à la ligne (retour chariot) unix ( \n).

Essaie avec "\r\n" comme "délimiteur de fin de ligne.

Par contre tu 'guillemettes' tes chaînes de caractères de 2 manières différentes : une fois avec double quotes et la ligne suivante avec simple quote .
Pour la lisibilité ( et éviter les manipulations intempestives du cerveau Smiley langue ) essaie de garder une seule syntaxe.

par exemple tu peux très bien écrire ta première ligne plus simplement

echo "<?xml version='1.0' encoding='utf-8' ?>" . "\r\n";
// sauf pour la lisibilite les 'fin de ligne' ne sont pas nécessaire je pense


en espérant que cela puisse t'aider.

PS : as tu vérifié ce que suggérait Victor BRITO ?
++
Modifié par kzone (26 Dec 2009 - 16:50)
Salut,
En fait il interprète le fichier xml comme du php ?
Pour afficher du texte préfère file_get_contents

Quand tu fait un include il considère que c'est du code php (même si ce n'est pas le cas). Donc si à un moment il a un <?php il interprète le php à l'intérieur. Et si short_open_tag = On il considère que <? également du php.
Victor BRITO a écrit :
Aurais-tu, par hasard, oublié d'ouvrir la balise PHP selon sa notation complète ?

Non, je l'ouvre bien sous sa forme complète.
jo_link_noir a écrit :
Salut,
En fait il interprète le fichier xml comme du php ?
Pour afficher du texte préfère file_get_contents

Quand tu fait un include il considère que c'est du code php (même si ce n'est pas le cas). Donc si à un moment il a un <?php il interprète le php à l'intérieur. Et si short_open_tag = On il considère que <? également du php.


Avec file_get_contents j'obtiens une page blanche, mais cela marche bien avec readfile () en local comme en production.
Merci à tous pour vos réponses.
Joyeuses fêtes de fin d'années.