CLASS { GESTION DE FICHIERS : MODIFICATION, CRÉATION }

audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008 - 6 déc. 2006 à 21:41
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 7 déc. 2006 à 10:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40610-class-gestion-de-fichiers-modification-creation

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 déc. 2006 à 10:12
Hello,
je vais m'y mettre aussi.
D'abord, en réponse à Audayls : mettre if (is_dir (DIR) false) n'est pas faux non plus. Cela peut-être pour une question de lisibilité. Perso, je ne suis pas contre. Sauf que pour être plus exact, il aurait fallu mettre if (is_dir (DIR) false), afin de typer la comparaison.

Pour les questions de rapidité...franchement, vu la différence...je préfère privilégier la lisibilité, et dans ce cadre...file_get_contents () l'emporte haut la main. Tant qu'on y est, on peut aussi utiliser SPLFileObject.
Et tant qu'à utiliser file_get_contents () autant utiliser file_put_contents (si on est en php5 en tous cas).

Par contre, je suis désolé, mais ce code, en l'état, n'est franchement pas bon. La classe ne sert à rien : une seule action...pas besoin d'une classe. Elle impose le html (pas terrible, en plus, l'attribut name dans une balise form étant déprécié depuis longtemps). Elle impose aussi un mode pour le fichier, mode FAUX...777 ne mets pas les autorisations que tu crois. Il faut mettre 0777. C'est une base octale, pas décimale. Et réafficher sans aucune vérification le contenu d'une saisie utilisateur est assez dangereux...au passage.
Naixn Messages postés 455 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 22 juillet 2007
7 déc. 2006 à 10:05
Tout à fait d'accord avec audayls, sauf sur :
1) "if(is_dir(DIR) == FALSE) {" Olà pourquoi tu compares à false ? if suffit de mettre "if (is_dir(DIR)) {".
>> C'est faux ! Lui il regarde si le dossier est absent, et toi tu regarde si le dossier existe.
Il faudraut : "if (!is_dir(DIR)) {"

Pour le mkdir, je confirme, il est mieux d'utiliser 0777, car c'est la réelle notation octale des droits d'un fichiers. PHP transforme en fait 777 par 0777 :)

Sinon, tous les autres points énoncé sont tout à fait exact.

Je pense que tu n'as pas compris l'utilité d'un objet ni d'une constante.

1/ MyFile est censé être un object de type "fichier". Personellement, les méthodes que j'attacherais à un fichier seraient : read, create, delete, rename, modify, append, setChmod, etc.
Une méthode "Action" sur un object "fichier" ne signifie rien de rien.
De plus, dans ta classe, tu n'utilise AUCUN avantage de la programmation orientée objet. Mais alors vraiment aucun. Tu as une fonction dans une classe, alors que tu aurais pu faire la fonction tout seule ça aurait largement suffit.
Dernier point : ce n'est pas à ta classe de gérer l'évenement $_POST. C'est à ton code qui, en fonction de si un post a été effectué, va envoyer les paramètres nécessaires à ta classe pour que celle-ci remplisse le fichier correctement.

2/ Pour ce qui est des deux constantes : premièrement, elle n'ont PAS à être définie dans une classe !
Dans une classe, tu définis des attributs, genre private $lefichier; auquel tu accèdes via $this->lefichier par la suite. Mais surtout pas en constante DANS une classe, et encore moins dans une méthode d'une classe. Si tu dois définir des constantes, c'est en dehors des fonction, classes, et méthodes.
De plus, une constante est, comme son nom l'indique, constante. L'idée de lui attribuer une valeur en fonction d'une variable n'est pas des plus logiques... Surtout là, dans ton cas, une variable suffit largement plutôt qu'une constante.
audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008
6 déc. 2006 à 21:49
désolé pour le flood, mais bizarrement le reste du commentaire n'a pas été pris ...
J'avais marqué : "Sinon l'utilisation de la class ne sert pas à grand chose içi... Et en passant ne le prends pas mal mais celà ne vaut pas le niveau initié puisque tu n'utilises que des fonctions de PHP."
audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008
6 déc. 2006 à 21:41
Salut,
Plusieurs petites choses à dire :
1) "if(is_dir(DIR) == FALSE) {" Olà pourquoi tu compares à false ? if suffit de mettre "if (is_dir(DIR)) {".
2) "mkdir (DIR, 777);" il me semble (à vérifier) qu'il est préférable d'utiliser "0777" à la place de "777".
3) Cette class ne fonctionnera pas sur Free car Free a désactivé la fonction "flock" (vas savoir pourquoi ...).
4) "echo file_get_contents(LE_FICHIER);" fais plutôt "$fp = fopen(LE_FICHIER,'r'); while (!feof($fp)) echo fgets($fp, 4096); fclose($fp);" c'est plus rapide.
5) "if (file_exists(LE_FICHIER))" utilises plutôt "if (is_file(LE_FICHIER))" c'est plus rapide.
6) Pourquoi utiliser des constantes alors que des variables aurait pu très bien faire l'affaire ?
7) "echo '</textarea>'."\n"" dans un echo tu peux utiliser une virgule "," à la place du point "." c'est plus rapide.
Rejoignez-nous