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.