LECTURE ECRITURE DANS UN FICHIER DE CONFIGURATION , DONNÉES

cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 - 28 nov. 2005 à 03:55
octopus999 Messages postés 1 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 21 mars 2013 - 21 mars 2013 à 23:49
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/34817-lecture-ecriture-dans-un-fichier-de-configuration-donnees

octopus999 Messages postés 1 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 21 mars 2013
21 mars 2013 à 23:49
Merci beaucoup Guill76 pour ce code :)
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
4 déc. 2005 à 23:01
Dernière réponse à tes remarques:

donc j'ai essayé de modifié les 40000 if pour n'en faire plus qu'un.
Résultat je me retrouve avec les bugs auxquels j'avais pensés lors de l'écriture des fonctions.Donc tous ces contrôles sont nécéssaires (helas peu esthétiques) .
Explications:
if (count($var)>1) -->assure que la ligne est de la forme 'clé=valeur' -->le cas ou la ligne serait 'cle' (sans =valeur) est géré par ce contôle. (j'ai prévu dans mes RG qu'on pouvait insérer des lignes manuellement dans le fichier sans que celui -ci ne soit vérolé ou provoque des bugs).
Les autres contrôles sont aussi nécessaires .
Mais tes remarques m'ont fait pensé que je n'ai pas géré le cas ou le fichier serait en lecture seule. Certes il n 'y aurait pas d'erreur fatale mais juste un warning .
Donc A voir avec is_writeable .
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
4 déc. 2005 à 18:06
Au fait pour le if (file_exists) , je suis obligé de le tourner comme ça (en double) car il y aurait un traitement qui passerait à la trappe.
Oups une petite rectif dans mon dernier post :
'dans le cas ou $p=false' et pas '$p=-1' , pardon...
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
3 déc. 2005 à 15:48
Au fait pour le $p=fopen c'est le même principe que pour la fonction get_infile.
si tu fais if ($p)
dans le cas ou $p=-1 ça passe pas donc c'est bon ,pas de fatal error .
Pour le reste je vais revoir pour les 4 tests peu élégants.
Merci
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
3 déc. 2005 à 14:36
Ben voilà , j'ai lu avec intérêt tes remarques,
mais je sais pas si tu sais que dans le cas ou la fonction (get_infile) retournerait NULL la condition serait fausse .Donc ça marche, cette syntaxe est correcte ( comme en C ou C++ ).Alors pourquoi ne pas l'utiliser .Un prof m'avait enseigné que c'est complétement rébarbatif de faire if($toto!=NULL) alors que if($toto)revient au même.(Mais bon tu as peut être raison dans l'absolu avec PHP je dis pas).
Sinon pour le reste, merci, j'avais pas tilté que je faisais le même test(file_exists) pour les 2 conditions.
Rq :
Pour is_empty je pense que c'est une alternative à (=='') donc ça à mon avis ça revient au même non ?.
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
1 déc. 2005 à 14:04
Enfin :)

"if ( get_infile ( $fileName , $inikey , $separator , $commentchar ) )"

Comment peut tu prévoir le fait que get_infile() va te sortir un TRUE alors que les seuls RETURN possibles dans ta fonction sont : $var[0] (string), ou NULL. ?

A la limite, tu tournes ton if autrement :
$update ( get_infile($fileName...) NULL ) ? false : true;
ou :
$update = ( get_infile($fileName...) !== NULL ) ? true : false;

La c'est mieux, parce que tu sais ce à quoi tu va t'attendre.
Tu a créer une fonction qui renvoit tout et n'importe quoi, de ce fait, tu ne sais même plus comment tester sa condition.

Je continu :
"# if ( file_exists ($fileName) )
# $p = fopen ( $fileName , 'a' );
# else $p = fopen ( $fileName , 'w' ); //le fichier est créé
# if ($p) {"
Beurk ... Tu fais : $p = fopen... <== si le fichier ne se charge pas, y'aura un beau fatal error, donc ta condition ne sert pas à grand chose la.

"# else {
# if ( file_exists ($fileName) ) {
# $p = fopen ( $fileName , 'r' ) ;"
Beurk², ta methode de test est mauvaise car tu réécris ton code pour rien. Tu fait : if ( !$update ) { file_exist()... } else { file_exist() ... }
Pourquoi taper du code en double ?

>
<?php
if ( file_exist() ... ) {
if ( !$update ) {
//
} else {
//
}
}
?>

Ensuite :
"# if ( count ( $var ) > 1 )
# if ( $var[0][0] != $commentchar )
# if ( $var[0] == $inikey ) {
# if ( isset ( $var[1] ) )"
40000 if alors qu'un seul aurait pu suffir ? C'est que ca deviendrait presque illisible :p

Et pour finir :
"# if ( $var[1] != '' ){"
if ( !empty($var[1]) ) ... !
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
29 nov. 2005 à 08:41
Hello,

suggestion à Guill76 : envoie donc ce message dans la boîte des admins, les développeurs auront plus de chances devoir ta réclamation.
Parce que bon, faut pas croire que les développeurs (ou les admins), regardent tous les commentaires de tous les codes en détail...(ça ferait beaucoup...!)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
28 nov. 2005 à 13:25
C'est pas nouveau, tu n'apprends rien à personne ;)
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
28 nov. 2005 à 08:12
Suggestion aux développeurs de phpcs pour améliorer l'affichage des codes:
J'ai collé un script qui était à l'origine bien indenté, mais l'entete de la fonction set_infile étant sur 2 lignes , l'indentation se retrouve complètement supprimée.
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
28 nov. 2005 à 03:56
non rien, j'avais pas vu le ";"
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
28 nov. 2005 à 03:55
J'ai pas lu le code et j'ai pas testé, mais je comprends pas la logique de ton exemple.
Ceci :
# set_infile ( $inifile , 'daysinmonth', '30' ) ;//crée
# set_infile ( $inifile , 'daysinmonth', '31' ) ;//modifie

retourne 31 si j'ai bien compris... Mais ceci :
# set_infile ( $inifile , 'jourferie', 'dimanche' ) ;//crée
# set_infile ( $inifile , ';jourferie', 'lundi' );

tu dis que ça retourne "dimanche". Mais en fait ça devrait retourner "lundi" non ?
Rejoignez-nous