Exécution de code PHP

Résolu
gaerebut Messages postés 1060 Statut Membre -  
Dr Zoidberg Messages postés 547 Statut Membre -
Bonjour,

je voulais savoir si une page PHP était lu dans son intégralité avant d'être éxécutée !
Voici un exemple :

<?php
header('location: ../');

echo 'Bonjour';
?> 


Par exemple, est-ce que elle aura quand même lu le fichier en entier avant de l'éxécuter.

Autrement-dit, est-il plus rapide de mettre une vérification (redirection en cas d'échec) au tout début du fichier, même avant le inclusions de fichiers que de le mettre à la fin ???

En gros, est-ce que il li quand même le code jusqu'à la fin ou il s'arrête sur ce genre d'opération et ne va pas plus loin ?!!!

A+

Gaerebut
--
Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1:  ne jamais dire tout ce que l'on sait...
-Règle 2: ...
Configuration: Windows Vista
Firefox 3.0.10

9 réponses

  1. empty Messages postés 931 Statut Membre 176
     
    Il lit tout le code, mais tu peux lui demander de s'arrêter avec exit(); je pense, mais c'est censé être utilisé dans les condition du style

    if($etat == success) {
    // code
    } else {
    // redirection
    exit();
    }

    // autre code qui sera exécuté si success mais pas si unsuccess...
    1
  2. le père
     
    Bonjour

    D'après son comportement, il lit le code complètement une première fois sans l'exécuter, puis il reprend au début pour l'exécution.
    Ça ne change rien au fait que si tu fais une vérification au début de ton code, il sera toujours plus rapide que si tu le fais à la fin. Ton code sera lu une seule fois au lieu de deux
    0
    1. empty Messages postés 931 Statut Membre 176
       
      Peux tu concrétiser ce que tu avance ? Je ne vois pas dans quel cas PHP lit 2x le code... Tu sais nous écrire un petit bout de code ?
      0
  3. gaerebut Messages postés 1060 Statut Membre 171
     
    Oui moi je vois de quoi il parle !

    Par exemple, tu mets un exit en début de page et après tu mets un echo "salut" mais sans ; (donc erreur).
    L'erreur sera relevé alors que le programme se termine plus tôt !

    :=)

    A+

    Gaerebut
    0
    1. le père
       
      Merci d'avoir répondu pour moi (j'ai été pris ailleurs). Ton exemple est parfait.
      0
    2. empty Messages postés 931 Statut Membre 176
       
      Justement pas... Je viens de faire le test pour voir si ce que j'avance est vrai... PHP ne lit pas d'abord. Il exécute directement. Essaye si tu veux la méthode ci-dessous.

      Code

      <?php

      echo "hello";

      exit();

      echo fkldms;

      ?>


      Résultat

      hello

      ----------------------------------------------------------------------------

      Code

      <?php

      echo "hello";

      echo fkldms;

      ?>


      Résultat

      hello
      Notice: Use of undefined constant fkldms - assumed 'fkldms' in C:\wamp\www\test\index.php on line 5
      fkldms



      PS
      J'ai en fait volontairement oublié les guillemet.
      0
  4. le père
     
    Il a tout lu une première fois en analysant le code sans l'exécuter; il l'a exécuté lors de la deuxième fois
    Introduis une erreur après le exit comme l'a suggéré gaerebut. D'après toi, elle ne devrait pas être détectée. Essaye.
    0
    1. empty Messages postés 931 Statut Membre 176
       
      Lis ce que j'ai écrit avant de répondre ça :-) J'ai fait un exemple dans mon message essaye le :-) il exécute directement (sans lire tout le code au-par-avant)...

      Car quand je met mon erreur après exit(); il ne me l'affiche pas et lorsque je retire exit(); il m'affiche une notice.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Dr Zoidberg Messages postés 547 Statut Membre 100
     
    le père à raison, PHP lit tout un fois et fait l'analyse syntaxique, c'est la qu'il va faire les include et retourner les parse error entre autre, mais à ce niveau il n'en a rien à faire des variables, exit, et autres commandes;
    A la deuxième lecture il exécute.

    un exemple:
    echo $test;
    exit;
    echo 'test2'
    

    Donne : Parse error: syntax error, unexpected $end, expecting ',' or ';'
    Il a tout lu jusqu'a la fin est a trouvé l'erreur du ; manquant;
    Pas de notice sur la variable non définie car il ne l'a pas vérifiée à la première lecture
    En corrigeant l'erreur:
    echo $test;
    exit;
    echo 'test2';
    

    Notice: Undefined variable: test
    A l'exécution il s'arrête bien au exit.
    0
  7. empty Messages postés 931 Statut Membre 176
     
    J'AI RAISON :-) (sans crier lol) je m'explique, tu as oublié les parenthèses, et oui en programmation un simple oubli peut tout changer...

    Donc exit(); et non exit;

    Pas tout lu mon message en détail ^^ il suffisait de faire copier coller pourtant...
    0
    1. Dr Zoidberg Messages postés 547 Statut Membre 100
       
      Juste pour info exit (tout court) est valable (voir l'exemple https://www.php.net/exit et synonyme de exit() et exit(0).
      Mais je l'avoue ce n'est peut-être pas la syntaxe la plus propre, juste une habitude de ma part.

      a+
      0
  8. Dr Zoidberg Messages postés 547 Statut Membre 100
     
    Bien sur que si et c'est bien la même chose, dans ton 1er exemple il s'arrête au exit sans lire la suite, mais ça n'empêche pas qu'il est déjà fait une lecture précédemment POUR LA VERIF DE SYNTAXE et tu n'as pas d'erreur de syntaxe. Dans le 2eme exemple il va à la fin et trouve l'erreur de constante. Je ne vois pas ce que ca prouve.
    0
  9. le père
     
    Je précise car je ne suis pas sûr que tout le monde (empty en particulier) te suive sur l'erreur de constante
    Dans le programme donné message 6, il n'y a aucune raison d'afficher une erreur à la première passe, car il n'y a pas d'erreur de syntaxe.
    fkldms pourrait être une constante définie plus loin dans le script par define ('fkldms', 'qqchose');. Il serait donc prématuré d'afficher une erreur dès la première passe.
    Par contre, à la seconde passe, il y a une erreur parce qu'au moment d'exécuter l'instruction, fkldms n'est toujours pas défini, alors qu'il est indispensable pour l'exécution.
    0
  10. empty Messages postés 931 Statut Membre 176
     
    D'accord autant pour moi ^^ j'ai testé toutes les erreurs possible et celle qui n'est pas bloquée par exit(); est l'erreur lié au parsing "Parse error"...

    Les notices et warnings sont bloqué par exit...

    Donc parfaitement d'accord il lit pour voir si la syntaxe est correcte :-)

    Mais important à retenir que les notices et warnings (erreur mineures) ne sont pas pris en compte en cas de exit(); avant...
    0