IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Question à propos de l'opérateur "OR" (comme dans "or die") [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Question à propos de l'opérateur "OR" (comme dans "or die")
    Salut !

    Cela fait maintenant quelques années que je travaille avec PHP et j'ai bien sûr l'habiture d'utiliser la méthode suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $link = mysql_connect(...) or die('Impossible de se connecter au serveur MySQL');
    Aujourd'hui j'ai fais quelques tests sur la lecture de fichier avec un ami, et je me suis posé une question en utilisant la fonction file() (récupère le contenu d'un fichier sous forme de tableau).
    Celle-ci lance une erreur lorsque le fichier lu n'existe pas sur le serveur.

    J'avais donc commencé à faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $log_file = @file('fichier_de_log.log') or die(...);
    Puis j'ai eu l'idée d'écrire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $log_file = @file('fichier_de_log.log') or $log_file = array();
     
    if (count($log_file) > 0) {
         [TRAITEMENT]
    }
    Derrière cela j'ai une boucle foreach() qui me permet de traverser le contenu du fichier.
    L'idée est donc que, lorsque je vérifie la taille du tableau (count), j'affiche une erreur si le tableau est vide.
    La ligne du "or" me permet donc de définir un tableau vide si le fichier est inexistant, ce qui affichera donc l'erreur par la suite.

    J'ai testé le code, et ce dernier fonctionne sans afficher d'erreur, mais je me demande quand même cela est normal ?
    Peut-on vraiment faire cela et est-ce "propre" ?

    Car, si c'est vraiment une technique qui marche, je pourrais être amené à m'en servir assez régulièrement en fin de compte !

    Merci d'avance pour vos réponses !

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pas besoin de or die c'est une mauvaise pratique dans ce cas la (pour mysql aussi), il suffis de faire un file_exists et/ou is_readable en premier, je te déconseille aussi de mettre des @
    si derriere c'est pour lire des CSV utilise fgetcsv en SplFileObject ou en fopen

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 385
    Points : 10 413
    Points
    10 413
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    ... il suffis de faire un file_exists et/ou is_readable en premier, je te déconseille aussi de mettre des @
    Oui c'est vrai que l'on conseille d'éviter d'utiliser l'opérateur de suppression des erreurs "@" et de gérer les erreurs soit-même, mais dans ce cas je me demande si au final (niveau utilisation des ressources globales) le file_exists() suivi d'un file() n'est pas plus gourmand

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Oui c'est vrai que l'on conseille d'éviter d'utiliser l'opérateur de suppression des erreurs "@" et de gérer les erreurs soit-même, mais dans ce cas je me demande si au final (niveau utilisation des ressources globales) le file_exists() suivi d'un file() n'est pas plus gourmand
    http://www.php.net/manual/en/languag...trol.php#99805

    et même si c'etait l'inverse je pense pas que la question est à se posé, on fait d'abord un code propre et ensuite on voit les perfs, surtout qu'ici celui qui va prendre toute la ressources c'est bien file et si il fait un boucle pour traité derrière il a plus intérêt a faire du stream

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Juste pour rejoindre ce qui a été déjà dit, soit que les @ ou autre techniques qui masquent les erreurs n'est pas une bonne approche.
    C'est un peu comme débrancher les organes de sécurité ou d'alerte sur des machines/équipements.

    Ce que tu évoque, c'est la gestion des erreurs, et ceci peu se gérer simplement, ne serait ce quand on débute et qu'on ne sait pas trop, c'est d'agir sur 2 directives du php.ini :
    display_error et error_reporting
    Le error_reporting le définir à E_ALL qui correspond à un niveau d'erreur.
    Pour le display_error, il y a une alternative normalement :
    Quand on développe chez soit, on l'a définie à On, comme ça tous les messages seront affichés, ça aidera alors à corriger son code
    Pour le site sur son hébergeur (en production), on la définie à Off, aucun message affichés, mais ils seront dans un fichiers log dispo.

    Certes, cette manière ci-dessus reste basique, mais ça reste néanmoins un bon début à mon sens.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    bonjour,

    Citation Envoyé par stealth35 Voir le message
    pas besoin de or die c'est une mauvaise pratique dans ce cas la (pour mysql aussi), il suffis de faire un file_exists et/ou is_readable en premier, je te déconseille aussi de mettre des @
    si derriere c'est pour lire des CSV utilise fgetcsv en SplFileObject ou en fopen
    En plus il serait beaucoup plus simple de levé une exception et de la traitée avec un try catch.

    enfin il serait bon que l'on finissent par déprécié ce genre de commandes nœud nœud qui viennent d'un autre temps

    bon courage

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par burndev Voir le message
    bonjour,



    En plus il serait beaucoup plus simple de levé une exception et de la traitée avec un try catch.

    enfin il serait bon que l'on finissent par déprécié ce genre de commandes nœud nœud qui viennent d'un autre temps

    bon courage
    on va pas mettre des exceptions partout, la seul vrai solution c'est de tester si le fichier existe ou pas, tu vas en faire quoi ton exception après ? un exit avec le message d'erreur ? si c'est ça c'est ridicule, si c'est pour autre chose de toute façon les log sont la pour ça donc c'est ridicule aussi.

  8. #8
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    on va pas mettre des exceptions partout, la seul vrai solution c'est de tester si le fichier existe ou pas, tu vas en faire quoi ton exception après ? un exit avec le message d'erreur ? si c'est ça c'est ridicule, si c'est pour autre chose de toute façon les log sont la pour ça donc c'est ridicule aussi.
    si on suit ton raisonnement ca marche ou ca marche pas. C'est une façon de voir les choses qui n'est pas du tout mauvaise.

    Le contexte que je soulève est uniquement pour mettre évidence une autre façon de faire et de façon global.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par burndev Voir le message
    si on suit ton raisonnement ca marche ou ca marche pas. C'est une façon de voir les choses qui n'est pas du tout mauvaise.

    Le contexte que je soulève est uniquement pour mettre évidence une autre façon de faire et de façon global.
    je vois toujours pas l’intérêt et l'avantage de cette façon dans ce contexte...

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par burndev
    En plus il serait beaucoup plus simple de levé une exception et de la traitée avec un try catch.
    Plus simple ?

    Le code de Bastountan est totalement procédural alors que les Exceptions c'est Objet.
    Pour ma part, c'est tout sauf simple de mettre en place une gestion des erreurs et d'exceptions, ça réclame de maitriser la POO justement.
    C'est comme vouloir faire le grand écart du jour au lendemain sans même l'avoir fait 1 fois.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  11. #11
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Plus simple ?

    Le code de Bastountan est totalement procédural alors que les Exceptions c'est Objet.
    Pour ma part, c'est tout sauf simple de mettre en place une gestion des erreurs et d'exceptions, ça réclame de maitriser la POO justement.
    C'est comme vouloir faire le grand écart du jour au lendemain sans même l'avoir fait 1 fois.
    effectivement vu sous cette angle je vais trop loin (cela fait bien longtemps que je ne connais plus un code procédurale). Malgré cela, Je ne vois pas en quoi il faut une maitrise du dev objet pour levée une exception.

    Même avec du procédurale rien ne t’empêche dans une fonction pour ce genre de manipulation de levée une exception de la non existence ou la non lecture du fichier. Et de traiter ton erreur dans ton traitement plus général.

    J'ai exposé une idée qui me parait répondre a un besoin, qui permet de ce décharger d'une multitudes de manipulations diverses (consultation de log, refouille du code, et avec le temps une assiette de spaghettis sans la tomate, ...).

    bonne journée a tous

  12. #12
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par burndev
    Même avec du procédurale rien ne t’empêche dans une méthode pour ce genre de manipulation de levée une exception ...
    A bon ?

    Quand on lève une Exception, il faut faire appel à un Objet non ?
    De même que dans un block try/catch, on tente justement d'attraper l'erreur d'exception déclenchée auparavant, et là encore c'est un Objet qu'on obtient.

    On est donc toujours dans un contexte Objet, et si la personne ne maitrise pas la POO, ça va pas être simple.


    On peut toujours utiliser une fonction comme trigger_error() pour lancer ses propres erreurs, mais ce n'est en rien des Exceptions, c'est des erreurs tout court.


    Tout ce ci n'est pas juste pour contredire, mais il me semble qu'il est bon de proposer des solutions qui seraient en phases.
    Là, passer du or die au try/catch, c'est un grand écart, c'est tout sauf simple à mon sens.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par burndev Voir le message
    J'ai exposé une idée qui me parait répondre a un besoin, qui permet de ce décharger d'une multitudes de manipulations diverses (consultation de log, refouille du code, et avec le temps une assiette de spaghettis sans la tomate, ...).
    en quoi un try...catch annule la consultation des log et la refouille du code ? je voudrais bien un exemple de cette "simplification"

  14. #14
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Sujet résolu?

    file_exists().
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par radicaldreamer Voir le message
    Sujet résolu?

    file_exists().
    dans le fond c'est plus judicieux de faire un is_readable, puisque que le fichier peut exister mais çà lecture peut etre non autorisé

  16. #16
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    dans le fond c'est plus judicieux de faire un is_readable, puisque que le fichier peut exister mais çà lecture peut etre non autorisé
    Je plussoie.
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008R2] Question à propos de l'opérateur EXISTS
    Par Kropernic dans le forum Développement
    Réponses: 2
    Dernier message: 10/06/2013, 11h01
  2. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31
  3. Petite question à propos du redbook...
    Par Michaël dans le forum OpenGL
    Réponses: 3
    Dernier message: 04/11/2004, 12h54
  4. Petite question à propos d'une requete
    Par ViBy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/09/2004, 12h21
  5. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo