Aller au contenu

ecrire en haut d'un fichier sans ecraser


cedricpc

Messages recommandés

enfaite voila...

J'ai dans l'idée de faire un système de news tres simple, sans fonction d'edition, ou suppression...

Ce que je veux faire, c'est ecrire la news en haut du fichier...

Pour ca je fait fopen("news.php",'r+'), jusqu'a la pas de probleme...

Mais la ca se corse ! Quand je fait appel a fwrite(fopen("news.php",'r+'),$msgnew) (je suppose que vous avez compris que $msgnew est la new a mettre dans le fichier), ca ecrit bien la news en haut du fichier, mais elle ecrase les precedentes !

Par exemple si la premiere new c'est :

"voici la premiere new du site"

et que par la suite j'en rajoute une qui est :

"c'est la 2eme new"

ca me mets dans le fichier news.php :

"c'est la 2eme new new du site"

alors que moi je voudrais que ca me mette :

"c'est la 2eme new

voici la premiere new du site"

Vous comprennez ? Merci par avance...

Lien vers le commentaire
Partager sur d’autres sites

la methode la plus simple est l'utilisation des temps.

tu crées un fichier (ou tu vide son contenu)

tu copies ton fichier dans ce nouveau fichier

tu vides le premier fichier

tu ecris ta dernière news

tu recopies ton temps dans ton premier fichier

une methode plus propre serais de faire un fichier compteur.txt avec la valeur 0 dedans

pour ajouter une news :

tu vas lire la valeur de compteur.txt ($valeur)

tu vas l'incrementer et la noter dans compteur.txt en l'ecrasant

tu vas créer un fichier $valeur.txt

tu mes dedans ton texte et tu fermes

pour lire,

tu regardes la valeur de compteur.txt ($valeur)

tu fais un include des fichiers de $valeur.php à 1.php

et c'est dans le sac. En plus, tu pourras plus facilement ajouter les options d'editions plus tard si tu le souhaites

Lien vers le commentaire
Partager sur d’autres sites

la methode la plus simple est l'utilisation des temps.

(...)

T'as pas plus compliqué ?

J'ai pas la doc php sous la main mais je suis persuadé que t'as moyen d'ouvrir ton fichier en écriture et d'y inserer le texte a partir de la position zéro.

Je check ca tout a l'heure mais à mon avis c'est quasiment certain.

Ensuite tu travaille ca comme un bete fichier ini sauf que tu mets un repere qui te dit que tu changes de news, plutot que de jouer avec des numéros que tu devras checker et updater a chaque fois.

nws="ta news"

nws="ta news2"

ainsi tu te casse pas le q a faire des checks sur les numéros et les positions, tu sais que nws=" te donne une nouvelle news et tant que t'as pas le " final tu es dans ta news.

Lien vers le commentaire
Partager sur d’autres sites

T'as pas plus compliqué ?

oui si tu veux... mais direct ça sort du cahier des charges donné au premier post :transpi:

si tu trouves une fonction qui ecrit au debut du fichier sans l'ecraser, renseigne toi sur sa methode de fonctionnement :francais:

sinon tu crées un fichier a access sequentiel mais je ne sais pas comment php gere ce genre de choses :pleure:

Lien vers le commentaire
Partager sur d’autres sites

hum moi aussi il me semble que c'est faisable sans utiliser des temps !

Par contre en ce qui concerne d'y mettre dans un ini...

j'utilise un format qui marche tres bien ! =>

$msgnew = "<div class=\"newsp\">.:: www.********.***.****.*** ::. ".$datenew."</div>

<div class=\"newshead\">".$titrenew."</div>

<div class=\"news\">

".$messagenew."

</div>";

où :

$datenew = le jour + la date au format 31/12/2004

$titrenew = le titre de la new

$messagenew = le contenu de la new

et donc j'obtient un format de fichier près a etre utiliser par un include !

Seul trucs c'est qu'il faut que je présente avec les <p>....</p> le contenu mais je pense mettre des raccourcies pas la suite :francais:

(ps : le format que j'ai dit marche tres bien actuellement et j'ai juste envie de pouvoir mettre des news en ligne directement par internet... je ferai ca en sql quand j'aurais un peu mieux compris sont fonctionnement...)

Lien vers le commentaire
Partager sur d’autres sites

J'ai moi aussi eut besoin de rajouter un texte au début d'un fichier. Malheureusement je n'ai pas trouvé de syteme pour inserer le texte a partir de la position zéro.

J'ai procédé comme suit :

Lecture du contenu du fichier

Placer le contenu du fichier dans une variable

Ajouter le nouveau texte à la variable ( $var=$text."\n".$var; )

Ecrire la variable dans le fichier en effaçant le reste.

Ci-dessous le code de ma fonction :

	function Ecriture_Au_Debut($fichier, $texte){
 if (file_exists("$fichier")){
 	if($id = fopen("$fichier", "r+")){
   $contenu_original = fread ($id, filesize($fichier));
   $nouveau_contenu = $texte."\n".$contenu_original;
   fseek($id,0,SEEK_SET);
   fputs ($id, $nouveau_contenu);
   fclose($id);
   return TRUE;
 	}else{
   return FALSE;
 	}
 }else{
 	return FALSE;
 }
} 

Lien vers le commentaire
Partager sur d’autres sites

Bon voilà, pour réécrire en début de fichier c'est tout con

Tu fais ton

$f = fopen ('\test.txt');

ensuite un

fseek ($f,0);

et zou le problème est réglé ce que t'écriras via fwrite et ton pointer $f se placeras en début de fichier.

Country t'étais pas loin mais là y avait plus simple.

Me semblait bien que fallait pas chercher midi a 14h.

Lien vers le commentaire
Partager sur d’autres sites

Heu, je veut bien mais j'ai pas réussi à faire marché ton truc :

Tu fais ton

$f = fopen ('\test.txt');

Il manque le 2ème argument.

J'ai essayé avec w,w+,a,a+ mais avec aucun d'eux je n'ai réussi à écrire devant le contenu du fichier.

Pourrai tu poster un exemple de ta fonction, stp ?

hum pour le fseek, faut a nouveau l'enregistrer dans $f ?

J'ai essayé et le script il est pas daccord :D

Lien vers le commentaire
Partager sur d’autres sites

J'avoue je fais mon mea-culpa la dessus.

Le r+ va écraser ce qui est existant, le a meme en changeant l'offset écrira en fin de fichier.

Bref au plus simple faire un :

file_get_contents pour récuperer le contenu du fichier existant (plus rapide que fopen, fread, fclose)

ensuite soit si t'as php 5 tu restockes avec un file_put_contents et en 2 lignes c'est réglé, soit t'as un >4 et la tu fais un fopen(file,w+) et fwrite etc.

Désolé sur ce coup, j'y croyais :D

Lien vers le commentaire
Partager sur d’autres sites

Le plus simple c'est quand meme soit la soluce que j'ai donné 1 post plus haut, soit tu fais des append et quand tu lis le fichier tu stockes les thread dans une array que tu lis de bas en haut...

Par contre si ton fichier est assez conséquent, alors passe par un base de données c'est quand meme bien plus logique et + rapide!

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...