PHP - MySQL [Retour au menu]
Arrêt et démarrage du code PHP, gestion des erreurs

Arrêt brutal avec exit

Sortie immédiate du code

<?
echo "Un";
echo "Deux";
exit;
echo "Trois";
echo "Quatre";
?>

Il affichera juste un et deux. Trois et quatre resteront ignorés.

L'exit est encore plus brusque que ça : il arrête carrément le chargement de la page HTML : Dans l'exemple qui suit, il y aura juste Un et Deux qui seront affichés, POINT ! Le code HTML restera ignoré !!!

<html>
  <head></head>
  <body>
    <?
      echo "Un";
      echo "Deux";

      exit;
      echo "Trois";
      echo "Quatre";
    ?>
    <H3> Bête code HTML </H3>
    <?
      echo "cinq";
    ?>
  </body>
  <?
    echo "six";
  ?>
</html>

Alors que sans l'exit, tout aurait été affiché, même le Six !

Message de fin d'exécution

il est possible d'afficher un texte qui marque la fin de l'exécution :

<?
  echo "Un";
  echo "Deux";
  exit ("On s'arrête là !");
  echo "Trois";
  echo "Quatre";
?>

Fin d'exécution si une condition est remplie

Imaginons le code étrange suivant :

echo "Un";
echo "Deux";
("Banane" == "Banane") or exit ("On s'arrête");
echo "Trois";

Donc, il y a une condition Banane égale banane ou alors on sort ! Débile, comme truc ... Pas tant que ça !

En fait si une des deux conditions est juste, l'autre n'est même pas regardée. Elle est snobée par PHP. Donc ici, comme Banane = Banane, OK, pas besoin d'aller lire exit ("On s'arrête"). Et puisque il ne le lit pas, il ne s'arrête pas !

Donc là il va afficher Un, Deux et Trois.

Mais si on écrit :

("Banane" == "Orange") or exit ("On s'arrête");

Banane n'est pas égal à Orange... Bon, PHP va alors aller vérifier si de l'autre côté du Or la proposition est considérée comme vraie... Oui, parce que pour l'opérateur or, il suffit que l'une des deux propositions soit vraie pour que le or soit vrai. Et, c'est ici que c'est génial : Le simple fait de lire l'exit fait sortir du programme !

Bon, c'est quoi l'utilité de ce truc ?

Eh bien, imaginons que nous essayons d'ouvrir un fichier avec la fonction fopen, comme on a vu dans le chapitre sur les fichiers :
$MonFichier = fopen("FichierInexistant.txt","r"); //lecture

On essaie donc d'ouvrir un fichier qui n'existe pas. Que contient alors $MonFichier ? Rien..., donc :
$MonFichier = fopen("FichierInexistant","r") or exit("Ce fichier n'existe pas !");

La partie en bleu va renvoyer 0, et donc, la partie de droite va être évaluée pour voir si elle est aussi égale à 0 : Et on s'en fout de ce que vaut la partie droite, puisque sa simple évaluation implique son exécution, et son exécution arrête le programme... Vous avez compris ?.

Et encore une chose : Telle quelle, cette ligne ne marche pas car comme la partie bleue renvoie une erreur PHP, il va s'arrêter de lui même immédiatement pour indiquer que le fichier n'existe pas avec ses mots à lui :
Warning: fopen("FichierInexistant", "r") - No such file or directory in machinbidule.php on line 6

Et nous, on ne veut pas de son message d'erreur. Il faut alors lui dire qu'avant d'afficher ses erreurs, il termine d'évaluer le or. Pour ce faire, on ajoute @ au début de la ligne, comme ceci :
@$MonFichier = fopen("FichierInexistant","r") or exit("Ce fichier n'existe pas !");

---