Exercices
Questions à choix multiple

Leçon N° 18 : Les entrées/sorties vers le navigateur

echo
Print
Print_r : Print récursif
Show_source
Var_dump
Flush
Header : Chargement automatique d'une page
Sleep : Pause dans le programme
Connexion

Notes de page

echo

echo() i>n'est pas une fonction à proprement parler, ce qui rend l'usage des parenthèses facultatifs.
En fait, si vous voulez passer plus d'un paramètre, vous ne devez pas utiliser les parenthèses
Utilisation de echo
Nom du fichier : exercises_18/lesson_18_a0_echo.php

Print

Par contre print est une fonction, et peut donc être mis dans un argument de fonction contrairement à echo :
Utilisation de print
Nom du fichier : exercises_18/lesson_18_b0_print.php

Print_r

Imprime récursivement principalement le contenu de tableaux, evntuellement contenus les uns dans les autres.
Attention, le format de sortie est bien plus lisible si l'envoi vers le navigateur est en mode <pre> (faire précéder le print_r de echo "<pre>";
Utilisation de print_r
Nom du fichier : exercises_18/lesson_18_c0_print_r.php

Show_source

Permet d'imprimer un fichier avec coloration syntaxique, synonyme de highlight_file ( string filename)
highlight_string("$myString")
permet d'afficher de morceaux de sources dans des strings avec coloration syntaxique.
Utilisation show source
Nom du fichier : exercises_18/lesson_18_d0_show_source.php

Var_dump

Semblable à print_r mais imprime en plus le type de variable
Utilisation var_dump
Nom du fichier : exercises_18/lesson_18_e0_var_dump.php

Flush

Lorsqu'un texte est envoyé vers le navigateur avec echo ou print, cette information peut être conservée en mémoire tempon et envoyé simplement quand le buffer est plein ou en fin de page. Lorsque le serveur et le navigateur supportent cette possibilité, il est parfois intêressant de provoquer l'envoi de messages, pour faire patienter le visiteur du site .
De nombreux serveurs, essentiellement sous Windows, continueront à bufferiser l'affichage de votre script jusqu'à ce qu'il soit terminé, avant de transmettre les résultats à l'internaute. certains modules Apache utilisent leur propre bufferisation, ce qui fait que flush n'enverra pas les données jusqu'au navigateur client immédiatement. Même le navigateur peut réaliser une bufferisation avant de l'afficher.
Netscape, par exemple, met en cache le texte jusqu'à ce qu'il recoive une fin de ligne, ou une nouvelle et il ne va effectuer aucun affichage tant que les balises </table> ne seront pas toutes refermées.
Certaines versions de Microsoft Internet Explorer ne commençeront l'affichage de la page qu'après avoir reçu 256 octets d'affichage.
Cela obligera à envoyer des espaces supplémentaires pour afficher la page.
Voir aussi les fonctions ob_flush,ob_clean,ob_sart...
Cette fonctionnalité permet aussi d'augmenter la rapidité de la navigation : plutôt que d'attendre le transfert d'une très longue page, vaut mieux partager la page et l'envoyer par morceaux pour que le lecteur reçoive le début de page plus rapidement.
Peut aussi être utile lors de l'ecriture de cookies ou de variables de session permer de faire comme si l'on envoyait du texte vers le navigateur avant d'ecrire le coookie.
L'exercice suivant ne fonctionne pas sur le serveur de mon prestataire car on ne peut modifier le parametre "output_buffering" du PHP.ini, par contre il doit fonctionner en local sur votre PC
Utilisation de flush
Nom du fichier : exercises_18/lesson_18_f0_flush.php

Header : Chargement automatique d'une page dans le navigateur à partir de son adresse :

Exemple :
header("Location: http://www.php.net/");
Note : En PHP version <4.22 La fonction header() doit être appelée avant la première balise HTML, et avant n'importe quel envoi de commande PHP. C'est une erreur très courante que de lire du code avec la fonction include() ou avec auto_prepend et d'avoir des espaces ou des lignes vides dans ce code qui produisent un début de sortie avant que header() n'ait été appelé.
Exemple de fonction header
Nom du fichier : exercises_18/lesson_18_g0_header.php

Pause du programme

Pause dans un programme
Nom du fichier : exercises_18/lesson_18_h0_sleep.php

Gestion des connexions

int connection_status ();
Lorsqu'un script PHP est en cours d'exécution, son état est NORMAL.
Si le client distant se déconnecte, le statut devient ABORTED. En général, une telle déconnexion provient d'un arrêt temporaire. Si la durée maximale d'exécution de PHP est dépassée, (voir set_time_limit()), le script prend le statut TIMEOUT.
Vous pouvez en outre décider si vous voulez que la déconnexion d'un client provoque l'arrêt de votre script. Il est parfois pratique de terminer le script, même si le client n'est plus là pour recevoir les informations. Cependant, par défaut, le script sera interrompu, et terminé dès que le client se déconnecte.
Ce comportement peut être modifié avec la directive ignore_user_abort dans le fichier php.ini ou bien avec la directive Apache ignore_user_abort du fichier Apache httpd.conf ou avec la fonction ignore_user_abort().
Si vous ne demandez pas à PHP d'ignorer la déconnexion, et que l'utilisateur se déconnecte, le script sera terminé. La seule exception est si vous avez enregistré une fonction de fermeture, avec register_shutdown_function(). Avec une telle fonction, lorsque l'utilisateur interrompt sa requête, à la prochaine exécution du script, PHP va s'apercevoir que le dernier script n'a pas été terminé, et il va déclencher la fonction de fermeture. Cette fonction sera aussi appelée à la fin du script, si celui-ci se termine normalement. Pour pouvoir avoir un comportement différent suivant l'état du script lors de sa finalisation, vous pouvez exécutez des commandes spécifiques à la déconnexion grâce à la commande int connection_aborted() : Cette fonction retournera TRUE si la connexion a été annulée.
Votre script peut aussi expirer après un laps de temps. Par défaut, le délai est de 30 secondes. Cette valeur peut être changée en utilisant la directive PHP max_execution_time dans le fichier php.ini ou avec la directive php3_max_execution_time, dans le fichier Apache .conf ou encore avec la fonction set_time_limit(). Lorsque le délai expire, le script est terminé, et comme pour la déconnexion du client, une fonction de finalisation sera appelée. Dans cette fonction, vous pouvez savoir si c'est le délai d'expiration qui a causé la fin du script, en appelant la fonction connection_timeout(). Cette fonction retournera vrai si le délai d'expiration a été dépassé.
Une chose à noter est que les deux cas ABORTED et TIMEOUT peuvent être appelés en même temps. Ceci est possible si vous demandez à PHP d'ignorer les déconnexions des utilisateurs. PHP va quand même noter le fait que l'utilisateur s'est déconnecté, mais le script va continuer. Puis, lorsqu'il atteint la limite de temps, le script va expirer. A ce moment-là, les deux fonctions connection_timeout() et connection_aborted() vont retourner TRUE. Vous pouvez aussi vérifier les deux états en un seul appel avec la fonction connection_status(). Cette fonction va retourner un champs de bits, avec les états. Si les deux états sont actifs, l'état retourné prendra la valeur 3.

Tous droits réservés. 2005-2008