Php et preg replace avec liste xml [résolu]
Posté : 04 avr. 2010, 22:16
Bonjour à tous,
voilà le soucis qui m'anène par ici.
Pour un site, j'utilise une galerie d'images simpleviewer. Pour rappel il s'agit d'un plugin photoshop qui crée une galerie d'images sous forme d'un flash qui se sert d'une playlist au format xml qui puise les images dans un dossier et les vignettes dans un autre dossier.
Voilà en gros à quoi ressemble cette playlist:
J'ai alors imaginé un scrip php pour mettre à jour cette galerie d'image depuis le site directement. Cette mise à jour comporte deux parties, la première pour ajouter des images, la seconde pour en retirer.
Ce que fait le script:
Première partie: Upload d'une image, création de la vignette et stockage dans le dossier ad-hoc, et modification du fichier xml par ajout d'une chaine
Je n'ai pas de problème a faire fonctionner cette première partie, si ça interesse quelqu'un, je peux fournir le script. C'est dans la seconde partie où je rencontre un problème. Si la supression physique des images et vignette ne me fait pas soucis, c'est la modification du fichier xml qui ne va pas.
En effet,
Il me faut retirer de ce fichier une chaine formée des caractères suivants
Je suis partie sur l'idée d'employer preg_replace comme ceci:
je récupère le contenu de mon fichier xml dans la variable $page.
puis j'essaie de remplacer la chaine à retirer par une chaine vide ""
$newpage = preg_replace($retrait,"",$page);
Mais voilà, ça ne fonctionne pas, preg_replace me retourne une erreur "Unknown modifier '>'".... Il semble que les codes au format html me pose un problème et ne soit pas interprété par preg_replace. Quelqu'un aurait il une idée pour que que ça fonctionne, que je puisse retirer ce code xml de la page ?
avec ou sans preg replace...
Merci.
Au cas où, voici mon code:
voilà le soucis qui m'anène par ici.
Pour un site, j'utilise une galerie d'images simpleviewer. Pour rappel il s'agit d'un plugin photoshop qui crée une galerie d'images sous forme d'un flash qui se sert d'une playlist au format xml qui puise les images dans un dossier et les vignettes dans un autre dossier.
Voilà en gros à quoi ressemble cette playlist:
Code : Tout sélectionner
<image>
<filename>nom_image_1</filename>
<caption>titre_image_1</caption>
</image>
<image>
<filename>nom_image_2</filename>
<caption>titre_image_2</caption>
</image>
<image>
<filename>nom_image_3</filename>
<caption>titre_image_3</caption>
</image>
Ce que fait le script:
Première partie: Upload d'une image, création de la vignette et stockage dans le dossier ad-hoc, et modification du fichier xml par ajout d'une chaine
$ajout = "<image> \n";
$ajout .= "<filename>".$filename."</filename> \n";
$ajout .= "<caption>".$caption."</caption> \n";
$ajout .="</image> \n";
Je n'ai pas de problème a faire fonctionner cette première partie, si ça interesse quelqu'un, je peux fournir le script. C'est dans la seconde partie où je rencontre un problème. Si la supression physique des images et vignette ne me fait pas soucis, c'est la modification du fichier xml qui ne va pas.
En effet,
Il me faut retirer de ce fichier une chaine formée des caractères suivants
Code : Tout sélectionner
<image>
<filename>nom_image</filename>
<caption>titre_image</caption>
</image>
$retrait = "/\b";
$retrait .= "<image> \n";
$retrait .= "<filename>".$filename."</filename> \n";
$retrait .= "<caption>".$caption."</caption> \n";
$retrait .="</image> \n";
$retrait .= "\b/i";
je récupère le contenu de mon fichier xml dans la variable $page.
puis j'essaie de remplacer la chaine à retirer par une chaine vide ""
$newpage = preg_replace($retrait,"",$page);
Mais voilà, ça ne fonctionne pas, preg_replace me retourne une erreur "Unknown modifier '>'".... Il semble que les codes au format html me pose un problème et ne soit pas interprété par preg_replace. Quelqu'un aurait il une idée pour que que ça fonctionne, que je puisse retirer ce code xml de la page ?
avec ou sans preg replace...
Merci.
Au cas où, voici mon code:
if (isset($_POST['supprimer']))
{
$fichier = $_POST['erase'];
if (($fichier != ".") && ($fichier != "..")) {
echo "effacer :".$fichier;
// correction fichier xml
$dir_xml = "../../job/gallerie/";
$xml = $dir_xml."gallery.xml";
$file=explode ("/", $fichier);
$fichier = $file[5];
$retire = "<image> \n";
$retire .= "<filename>".$fichier."</filename> \n";
$retire .= "<caption></caption> \n";
$retire .="</image> \n";
if (is_file($xml)) {
if (!$fp = fopen($xml,"r+")) {
echo "Echec de l'ouverture du fichier";
}
else {
if ($TabFich = file($xml)) {
for($i = 0; $i < count($TabFich)-1; $i++)
$page .= $TabFich[$i];
}
}
fseek($fp,0);
fclose($fp);
}
else {
echo "erreur lecture fichier xml!";
}
echo nl2br(htmlentities($page))."<br><br><br><br>"; // Affiche la page complète pour vérifier
if ($page != "")
{
$char = "/\b".nl2br(htmlentities($retire))."\b/i";
$newpage = preg_replace($char,"",nl2br(htmlentities($page)));
$page = $newpage;
}
}
echo nl2br(htmlentities($page)); // Affiche la page corrigée pour vérif.
echo "<br>";
}