LECTURE ECRITURE DANS UN FICHIER DE CONFIGURATION , DONNÉES
cs_stailer
Messages postés507Date d'inscriptionjeudi 28 mars 2002StatutMembreDernière intervention13 mai 2009
-
28 nov. 2005 à 03:55
octopus999
Messages postés1Date d'inscriptionsamedi 16 février 2013StatutMembreDernière intervention21 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.
octopus999
Messages postés1Date d'inscriptionsamedi 16 février 2013StatutMembreDernière intervention21 mars 2013 21 mars 2013 à 23:49
Merci beaucoup Guill76 pour ce code :)
guill76
Messages postés193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 1 déc. 2005 à 14:04
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 ?
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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 28 nov. 2005 à 13:25
C'est pas nouveau, tu n'apprends rien à personne ;)
guill76
Messages postés193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és507Date d'inscriptionjeudi 28 mars 2002StatutMembreDernière intervention13 mai 20091 28 nov. 2005 à 03:56
non rien, j'avais pas vu le ";"
cs_stailer
Messages postés507Date d'inscriptionjeudi 28 mars 2002StatutMembreDernière intervention13 mai 20091 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 ?
21 mars 2013 à 23:49
4 déc. 2005 à 23:01
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 .
4 déc. 2005 à 18:06
Oups une petite rectif dans mon dernier post :
'dans le cas ou $p=false' et pas '$p=-1' , pardon...
3 déc. 2005 à 15:48
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
3 déc. 2005 à 14:36
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 ?.
1 déc. 2005 à 14:04
"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]) ) ... !
29 nov. 2005 à 08:41
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...!)
28 nov. 2005 à 13:25
28 nov. 2005 à 08:12
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.
28 nov. 2005 à 03:56
28 nov. 2005 à 03:55
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 ?