Troll Posté 5 Mai 2007 Posté 5 Mai 2007 Salut à toutes et à tous. J'en appel à votre savoir pour un bête problème...que mes recherches n'ont pas résolu. Je voudrais ajouter à un endroit précis d'un fichier "news.xml" du texte par exemple contenu dans $data. Seulement je n'arrive pas à placer précisément le pointeur à la fin de la sixième ligne et à trouver comment ajouter le texte sans supprimer ce qui suit...j'ai pourtant passé deux heures à chercher sans résultat :'(. Merci d'avance à tous ceux qui répondront
captain_torche Posté 6 Mai 2007 Posté 6 Mai 2007 Il n'existe pas à ma connaissance de possibilité d'insérer du texte en plein milieu d'un fichier, il faut que tu récupères tout ton fichier, que tu le modifies, et que tu l'écrases. Tu peux utiliser pour cela la fonction file() de PHP, qui te retournera un tableau de ton fichier, chaque entrée correspondant à une ligne. A partir de là, il te sera aisé d'ajouter des lignes où bon te semble, puis d'écraser le fichier en utilisant les données du tableau modifié.
Troll Posté 6 Mai 2007 Auteur Posté 6 Mai 2007 (modifié) Bonjour à toi, C'est bien ce que je pensais...seulement j'ai déjà essayé également, alors je dois mal m'y prendre En fait, il me faudrait récupérer tout ce qui dans le fichier, se situe après la ligne 6 (donc à partir de la ligne 7...)... Je connais le contenu jusqu'à la ligne 6, il ne changera pas, je pourrais ainsi former le nouveau contenu en ajoutant le contenu qui ne change pas + le nouveau contenu + la suite du fichier précédemment récupérée. Seulement j'ai eu beau essayer...je n'ai pas réussi... un petit indice ? Modifié 6 Mai 2007 par Troll
captain_torche Posté 6 Mai 2007 Posté 6 Mai 2007 Il te suffit tout simplement de récupérer le contenu de ton fichier dans un array avec la fonction file(), puis d'effectuer six fois un array_shift() pour supprimer les 6 premières lignes. Il ne te restera plus qu'à recréer ton fichier, avec les six premières lignes connues, puis ton ajout, puis l'array ainsi obtenu, ligne par ligne.
Troll Posté 6 Mai 2007 Auteur Posté 6 Mai 2007 Hum... donc ça ? : $farray = file('fichier.xml');for($i = 0; $i <=6; $i++){$farray = array_shift($farray);}$content_add = 'contenu a ajouter';$content = 'contenudessixpremièreslignes'.$content_add.implode("", $farray);$fh = fopen('fichier.xml', "w");fwrite($fh, $content); C'est bien ça ?
captain_torche Posté 6 Mai 2007 Posté 6 Mai 2007 Il faudrait sans doute que tu crées tes lignes en ajoutant un retour chariot à chaque fois, sinon tu ne pourras plus refaire la manipulation. Et sinon, ta boucle for a 7 incrémentations (de 0 à 6); fais-là aller de 1 à 6, ou de 0 à 5 (ou change tout simplement le <= en < strict).
Troll Posté 6 Mai 2007 Auteur Posté 6 Mai 2007 Ok pour la boucle, par contre je ne sais pas ce que c'est que le "retour chariot", je me demandais justement ce qu'il fallait mettre pour le retour à la ligne... =) \f ? \n ? \t ? Merci bien =)
captain_torche Posté 6 Mai 2007 Posté 6 Mai 2007 Sous unix, il me semble que c'est "\n" (les guillemets doubles sont importants). Pour Windows, c'est "\r\n" (Mais également compatible Unix, si je ne m'abuse).
Troll Posté 7 Mai 2007 Auteur Posté 7 Mai 2007 (modifié) Hum...j'ai un joli : "Warning: array_shift() [function.array-shift]: The argument should be an array in *****.php on line 5" La ligne 5 c'est la ligne $farray = file('news.xml'); Qu'est-ce qui ne va pas là ? O_o edit : J'ai aussi essayé comme ca : $f = fopen('news.xml', "r");while(!feof($f)) { $farray[] = fgets($f); }fclose($f); A la place de file(), mais rien n'y change, on dirait qu'il ne reconnait pas que le fichier est sur plusieurs lignes... :-/ Modifié 7 Mai 2007 par Troll
captain_torche Posté 7 Mai 2007 Posté 7 Mai 2007 Après "$farray = file('news.xml');", fais un "var_dump($array)", pour voir ...
Troll Posté 7 Mai 2007 Auteur Posté 7 Mai 2007 (modifié) J'avais déjà essayé avec print_r, qui ne trouvait rien dans les 8 premières clés, et qui trouvait le tiers du texte du fichier... Voilà avec var_dump : array(8) { [0]=> string(40) " " [1]=> string(21) " " [2]=> string(11) " " [3]=> string(27) " " [4]=> string(41) "http://www.pcinfo-web.com/ " [5]=> string(125) "Communauté et entraide informatique, news informatique et multimédia, tutoriaux... " [6]=> string(12) " " [7]=> string(6) "" } Je dois avouer que je n'arrive pas à piger le problème là :-/ (à noter : les chiffres entre parenthèses dans string(xx) changent selon où le fichier à ouvrir est situé j'ai remarqué... ) Pour info, voilà le contenu du fichier : <?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>PcInfo-Web</title><link>http://www.pcinfo-web.com/</link><description>Communauté et entraide informatique, news informatique et multimédia, tutoriaux...</description></channel></rss> Modifié 7 Mai 2007 par Troll
Troll Posté 7 Mai 2007 Auteur Posté 7 Mai 2007 Plus personne n'a d'idée ? En regardant le code source de la page en fait je me rends compte que l'array contient bien ce qu'il faut, les guillemets ne contiennent rien car les balises font disparaitre le texte, le code source donne, lui : array(8) { [0]=> string(40) "<?xml version="1.0" encoding="utf-8"?>" [1]=> string(21) "<rss version="2.0">" [2]=> string(11) "<channel>" [3]=> string(27) "<title>PcInfo-Web</title>" [4]=> string(41) "<link>http://www.pcinfo-web.com/</link>" [5]=> string(125) "<description>Communauté et entraide informatique, news informatique et multimédia, tutoriaux...</description>" [6]=> string(12) "</channel>" [7]=> string(6) "</rss>"} Donc l'array est bien un array, il contien bien ce qu'il faut...pourquoi ce warning ?!
captain_torche Posté 7 Mai 2007 Posté 7 Mai 2007 Tu peux poster ton code depuis la définition de l'array, jusqu'à l'appel de la fonction array_shift ?
Troll Posté 7 Mai 2007 Auteur Posté 7 Mai 2007 (modifié) Le code n'avait pas changé... Mais en fait j'ai trouvé d'où venait le bug, en effet array_shift retourne le contenu du premier élément du tableau, en plus de le raccourcir, donc en fait à la fin de la première boucle, $farray n'était plus un tableau. D'autres bugs sont venus s'ajouter ensuite mais j'ai résolu ça. Je vous donne le code fini, avec des notes pour ceux qui liront : <?//On récupère le fichier sous forme de tableau$farray = file("rss/news.xml");// On supprime les 6 premières lignesfor($i = 1; $i <=6; $i++){$useless = array_shift($farray);}// On défini un contenu à ajouter$content_add = "<item><title> Est-ce au bonne endroit ?</title><description> Bon bah premier test hein...</description></item>\n";// On définit le contenu des 6 premières lignes que l'on a supprimé$six_first = "<?xml version=\"1.0\" encoding=\"utf-8\"?><rss version=\"2.0\"><channel><title>PcInfo-Web</title><link>http://www.pcinfo-web.com/</link><description>Communauté et entraide informatique, news informatique et multimédia, tutoriaux...</description>\n";// ON additionne sixpremiereslignes+contenu à ajouter+contenu après les 6 premieres lignes$content = $six_first.$content_add.implode($farray);//On écrase le ficheir avec le nouveau contenu$fh = fopen("rss/news.xml", "w+");fwrite($fh, $content);fclose($fh);echo 'Effectué';?> Voilà, j'espère que ça servira à quelqu'un Ah aussi en passant : file() inclut déjà le retour à la ligne, donc si dans implode() on définit un retour comme séparateur des éléments du tableau, ca fait deux lignes Et aussi : quand on fait un retour à la ligne entre guillemets pour le contenu du variable, php le prends en compte, pas besoin de mettre "\n" =) Voili voilou =) Merci de t'être penché sur mon problème captain torche(pour ne pas dire flamme c'est ça ? =P ) A bientot peut-être =) Modifié 7 Mai 2007 par Troll
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant