On Fri, Jan 31, 2003 at 09:03:48PM -0700, Ludwin wrote:
> //Ouverture en �criture du fichier commentaires
> $commentaires=fopen("commentaires.txt", "a");

Manque du test d'erreur pour voir si les droits sont accord�s, voir la
manpage PHP de fopen.

> fclose($commentaires);

Il y aurait �ventuellement un test d'erreur � faire ici aussi vu que on
utilise les entr�es/sorties tampon�es (bufferis�es en fran�ais).

> Pour ceux qui connaissent: quelle est la mani�re la plus simple 
> d'ins�rer le nouveau texte au d�but du fichier?

Cette fonctionnalit� n'existe pas sous UNIX, d'ailleurs elle n'existe
probablement pas ailleurs (� la rigueur dans des formats de fichier
structur�s peut-�tre sur des syst�mes comme VMS, et encore).

Aucun syst�me d'exploitation que je connaisse permet de faire cela.

Deux m�thodes possibles:
   1. lent, inefficace, risqu�:
         - mettre ta ligne dans un fichier nouveau
         - poser un verrou externe sur le fichier original (.lock)
         - ajouter le contenu du fichier original � la suite du fichier
           nouveau
         - renommer atomiquement nouveau en original
         - supprimer le verrou
   2. passer � un format de fichiers structur�: par exemple travailler
      avec un fichier dbm par identifiant croissant ou timestamp,
      ou une base de donn�es:

         CREATE TABLE guest_book(id SERIAL NOT NULL,
                                 message TEXT NOT NULL,
                                 UNIQUE(id), PRIMARY KEY(id));

      ajouter:
         INSERT INTO guest_book(message) VALUES('le message');

      consulter par ordre inverse, limiter � 10 entr�es, commencer
         SELECT message FROM guest_book ORDER BY id DESC LIMIT 10;
      (on peut avoir envie de r�cup�rer id aussi s'il s'agit
       d'impl�menter du browsing depuis id (WHERE id < ...).)

     risques de cette m�thode:
        - ne pas oublier de filtrer ou attacher les donn�es de fa�on
          � ce qu'il n'y ait pas d'erreur si l'utilisateur met
          des guillemets par exemple, pas de possibilit� d'infiltrer
          du code SQL, et pas de possibilit� d'infiltrer du code
          HTML (cette derni�re attaque s'appelle cross-scripting, ou
          XSS).

     En Perl je fais ainsi:
        insertion: � l'aide du `binding', via le place-holder '?'
        affichage: utilisation de encode_entities() de fa�on � rendre
                   '<' inop�rant.

     PS: le SQL a certains avantages, on peut aller tr�s loin avec des
         bases de donn�es comme PostgreSQL. On peut aussi aller moins
         loin, ou pr�f�rer un format de fichier index� sans
         client/serveur SQL: dans ce dernier cas consulter la
         documentation de gdbm.

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se d�sabonner aussi.

Répondre à