Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 50 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
50
Dung lượng
1,05 MB
Nội dung
6.5 En-têtes HTTP et variables globales Elles comprennent les requêtes HTTP, les variables fournies par le serveur et nourries automatiquement par le navigateur de l’internaute et les tableaux créés par le moteur PHP pour conserver les requêtes CGI pour les formulaires (POST, GET…). Il est indispensable de les connaître car elles participent constamment à l’interactivité de vos programmes. En-têtes HTTP Voici les fonctions qui vous permettent d’interagir avec les en-têtes HTTP, en y lisant, en y écrivant des valeurs ou en les effaçant. Tab. 6.1 : Les fonctions pour les en-têtes HTTP Fonction Description int setcookie ( string nom [, string valeur [, int expire [, string chemin [, string domaine [, int secure]]]]]) Envoie un cookie sur la machine client. bool session_destroy ( void) Efface les données enregistrées dans la session. string session_id ( [string id]) Retourne le nom (id) de la session courante et, si un id est ajouté en paramètre, change l’id courant par celui- ci. bool session_is_registered ( string nom) Vrai si une variable est enregistrée dans une session string session_name ( [string nom]) Retourne ou change le nom de la session courante. bool session_register ( mixed nom [, mixed .]) Enregistre une ou plusieurs variables dans la session courante. bool session_unregister ( string nom) Efface une variable de la session courante. string session_save_path ( [string chemin]) Retourne ou change le chemin de la session courante. En-têtes HTTP et variables globales Double Poche PHP & MySQL • 201 Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Tab. 6.1 : Les fonctions pour les en-têtes HTTP Fonction Description bool session_start ( void) Crée une session si aucune session n’est active ou reprend la session existante en initialisant les variables. int header ( string chaîne [, bool remplace]) Envoie un en-tête HTTP. Si remplace est sur FALSE, votre en-tête ne remplacera pas un en-tête de même type. array getallheaders ( void) Retourne un tableau de tous les en-têtes HTTP passés à la page. Ces fonctions doivent impérativement être placées au début de votre script, avant la balise <HTML>. Quelques utilisations de la fonction header() Vous pouvez rediriger un navigateur sur une autre page avec le paramètre location qui est un équivalent de la balise HTML refresh : header("Location: http://www.ebizous.com/"); URL absolue L’URL de redirection doit être absolue. Si votre URL est un chemin relatif, la redirection n’aura pas lieu. Plusieurs noms de domaine sur le même site Certains hébergeurs vous permettent gratuitement de pointer plusieurs noms de domaine sur le même site. Il vous suffit alors de mettre quelques lignes sur votre page d’accueil pour rediriger le visiteur sur la page choisie selon l’URL demandée, cela d’une manière transparente. if (eregi($_SERVER["HTTP_HOST"],"votreautresite.com")){ echo ’<meta http-equiv="refresh" content="0;URL=http://monsite.com/repertoire/">’; exit; } 6 L’internaute est d’abord une personne 202 • Double Poche PHP & MySQL Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Il est conseillé de mettre le deuxième site, si c’est un site différent, dans un répertoire qui lui est propre, et de créer des fichiers de redirection dans le répertoire principal pour toutes les pages du deuxième site afin d’éviter de taper à chaque fois le nom du répertoire. N’oubliez pas la fonction exit, sinon vous afficherez les deux pages. Vous ne pouvez ici utiliser la fonction header() car aucune ligne ne doit la précéder. Les fournisseurs d’accès utilisent les proxys. Ces machines stockent les pages les plus fréquemment vues par leurs internautes. Ce procédé évite de payer de la bande passante mais se révèle gênant pour le webmestre d’un site, car la page sera mise à jour seulement de temps en temps. D’autre part, le navigateur, si certaines options sont laissées par défaut, peut enregistrer les pages sur le disque dur. Pour peu que vous affichiez la date et/ou de l’heure, ou mettiez fréquemment à jour votre site, l’inter- naute pensera que votre site fonctionne mal ou n’est pas mis à jour. Voici des lignes de programmes qui, envoyés dans la fonction header(), obligeront le proxy à recharger la page à chaque visite. header("Last-Modified: " . gmdate("D,dMYH:i:s") . " GMT"); Ici la page envoie une information indiquant qu’elle est constamment modifiée. header("Pragma: no-cache"); ici elle empêche l’ordinateur de mettre la page dans son cache ou le proxy de la stocker. Si votre site est multilingue, vous pouvez afficher des liens sur des drapeaux à la page d’accueil, mais pour le confort des visiteurs, vous pouvez aussi rediriger l’internaute vers la page adéquate selon la langue choisie dans le navigateur. Ainsi ils court-circuitent la page d’accueil qui affiche un lien par langue et n’a, en général, pas d’intérêt. if (eregi($_SERVER["HTTP_ACCEPT_LANGUAGE"],"fr")){ echo ’<meta http-equiv="refresh" content="0;URL=http://www.bonsvivants.com/fr/">’; exit; } En-têtes HTTP et variables globales Double Poche PHP & MySQL • 203 Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Ajoutez ensuite des blocs elseif pour les langues que vous proposez, jusqu’à un else qui oriente le visiteur vers la page d’accueil, si son navigateur n’a été réglé pour aucune des langues que vous proposez. Variables PHP Le moteur PHP dispose de variables globales qui complètent les variables Apache (ou variables d’environnement) que nous avons vues dans le chapitre 4. Tab. 6.2 : Les variables PHP Variable Description $PHP_SELF Équivalent à SCRIPT_NAME $HTTP_COOKIE_VARS Tableau des variables reçues d’un cookie $HTTP_GET_VARS Tableau des variables reçues d’un formulaire par la méthode GET $HTTP_POST_VARS Tableau des variables reçues d’un formulaire par la méthode POST $HTTP_POST_FILES Tableau des variables reçues d’un formulaire de téléchargement de fichiers $HTTP_ENV_VARS Tableau des variables d’environnement $HTTP_SERVER_VARS Tableau des variables reçues d’un cookie $HTTP_SESSION_VARS Tableau des variables reçues d’une session Voici les nouvelles variables fournies avec la version 4 de PHP : Tab. 6.3 : Les variables PHP (PHP4) Variable Description $_COOKIE Tableau des variables globales reçues d’un cookie $_GET Tableau des variables globales reçues d’un formulaire par la méthode get $_POST Tableau des variables globales reçues d’un formulaire par la méthode post 6 L’internaute est d’abord une personne 204 • Double Poche PHP & MySQL Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Tab. 6.3 : Les variables PHP (PHP4) Variable Description $_FILES Tableau des variables globales reçues d’un formulaire de téléchargement de fichiers $_ENV Tableau des variables globales d’environnement $_SERVER Tableau des variables globales reçues d’un cookie $_SESSION Tableau des variables globales reçues d’une session $_REQUEST Tableau né de la fusion des tableaux $_GET, $_POST et $_COOKIE Ces variables servent de raccourcis de code, de marqueurs ou de variables génériques pour tout type d’environnement. Il est plus simple de taper $_SERVER["PHP_SELF"] dans l’action d’un formulaire pour que l’application se rappelle elle-même plutôt qu’elle n’appelle le chemin relatif ou absolu au fichier. Vous pouvez déplacer votre fichier dans un autre répertoire ou le placer sur un autre serveur sans le changer. Nous avons vu aussi que vous pouvez tester la présence du tableau $_GET pour savoir si un lien a été cliqué avec les données qui s’y rattachent. Avec $_POST, nous avons créé une application qui traite les données de toutes sortes de formulaires. Voyez le traitement générique d’un formulaire quelconque dans le chapitre Les clefs du PHP. Variable d’environnement Les variables d’environnement sont les variables du serveur, en l’occur- rence Apache. Le navigateur du visiteur ne fournit pas forcément toutes celles qui lui sont imparties. Ainsi, essayez en stockant la variable $_SERVER["HTTP__REFERER"] de vos visiteurs. C’est une variable inté- ressante car elle donne l’URL de la page qui a appelé la page courante. Ainsi, vous verrez les sites qui ont placé des liens vers votre site, donc En-têtes HTTP et variables globales Double Poche PHP & MySQL • 205 Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. ceux qui attirent le plus de monde chez vous. Vous remarquerez aussi que parfois, la page ne contient aucune valeur. Avec la version 4, $HTTP_AC- CEPT est remplacé par $_SERVER comme $_SERVER["HTTP_ACCEPT"]. Tab. 6.4 : Les variables d’environnement Variable Description $HTTP_ACCEPT Liste des formats acceptés par le navigateur web $HTTP_ACCEPT_LANGUAGE Langage accepté par le navigateur $HTTP_CONNECTION Numéro d’IP et numéro de port éventuel $HTTP_HOST Numéro d’IP et numéro de port éventuel $HTTP__REFERER Page d’origine de la requête $HTTP_USER_AGENT Version du navigateur $REMOTE_ADDR Adresse IP de l’internaute $REMOTE_PORT Port client $REQUEST_METHOD Méthode GET ou POST $SERVER_PROTOCOL Nom du protocole utilisé par le serveur (HTTP/1.0) $SERVER_SOFTWARE Nom du serveur HTTP (Apache/1.3.20 (Win32) PHP/4.0.6 ) b Figure 6.8 : Les variables d’environnement 6 L’internaute est d’abord une personne 206 • Double Poche PHP & MySQL Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 6.6 Récapitulation Créons un fichier variables.inc.php dans lequel nous stockons les cons- tantes et les variables prédéfinies comme celles concernant le jour courant… Au début de vos fichiers, vous obtiendrez une liste de commande include que vous modulerez avec les deux barres obliques caractérisant les commentaires. Ainsi vous neutraliserez la ligne concer- nant l’authentification pour les fichiers hors du club. Dans votre répertoire administration, vous n’aurez pas besoin d’authentification ni de statisti- ques. Au début de vos fichiers, vous obtiendrez à peu près : include " /commun/variables.inc.php"; include RACINE."/commun/fonctions.inc.php"; include RACINE."/commun/connexion.inc.php"; //include RACINE."/commun/authentification.inc.php"; //include RACINE."/commun/stats.inc.php"; Il sera sans doute mieux pour vous d’avoir une liste imprimée des fonctions contenues dans le fichier fonctions.inc.php avec leurs fonction- nalités et paramètres. Imprimez également la liste des variables et des constantes contenues dans le fichier variables.inc.php, ainsi que la liste des variables extraites par l’authentification dans la table membres. Récapitulation Double Poche PHP & MySQL • 207 Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 7 Des algorithmes, des outils et des fonctions Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Lorsque vous connaissez les fonctions principales et savez les articuler dans un programme, vous pouvez résoudre n’importe quel problème, à condition de bien le poser au départ. Avant de créer une application, que ce soit par passion ou dans le cadre de votre travail, pensez-y plusieurs jours durant, compulsez des documents sur Internet, validez les différentes méthodes et choisissez enfin celle qui apporte un juste équilibre entre la difficulté et la simplicité. Une application trop simple peut se révéler fastidieuse, mais une application trop complexe demande parfois beau- coup d’énergie pour un détail qui se révèle finalement inutile. Si d’autres personnes ont déjà résolu votre problème, totalement ou partiellement, proposez-leur des améliorations. Si le programme n’existe pas mais qu’il vous dépasse par son ampleur, élaborez-le en partie. Puis rédigez une documentation en détaillant vos objectifs et les étapes à venir. Une fois le programme finalisé, proposez-le sur votre site personnel ou sur un site touchant la communauté du Libre. Dans le chapitre Mettre de l’ordre, nous vous donnons des clés pour simplifier votre application et créer un fichier de configuration qui regroupe toutes les variantes de l’application. Nous vous proposerons quelques outils pour ajouter à votre site. Mais, avant cela, nous nous pencherons sur les tableaux car la plupart des applications les utilisent, y compris dans leurs fonctions de tri. 7.1 Tableaux Quand vous avez plusieurs résultats de SQL et avez besoin de les ordonner, les tableaux deviennent indispensables. Tab. 7.1 : Les fonctions de manipulation d’éléments de tableau Fonction Description array array(…) Crée un tableau à partir d’une liste de valeurs. array array_keys(array tableau1) Crée un tableau avec les clés de l’autre tableau. array array_merge (array tableau1, tableau2…) Fusionne deux tableaux ou plus. Pour deux clés identiques, il gardera seulement la dernière valeur. 7 Des algorithmes, des outils et des fonctions 210 • Double Poche PHP & MySQL Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. [...]... $valeur){ $a=str_replace($valeur,$lalettre.$i,$a); $b=str_replace($valeur,$lalettre.$i,$b); $i++; } if ($a == $b) return 0; return ($a < $b) ? -1 : 1; } Cette fonction sapplique chaque ộlộment du tableau Ici, nous utilisons une astuce qui consiste remplacer la lettre accentuộe par la lettre alphabộtique suivante et un chiffre Un chiffre sera toujours triộ avant une lettre Ce nouveau mot donnera la clộ... $valeur){ $a=str_replace($valeur,$lalettre.$i,$a); $b=str_replace($valeur,$lalettre.$i,$b); $i++; } Voici le vrai corps de la fonction Les lignes qui suivent ne font que rộpộter le mờme schộma pour chaque lettre accentuộe, savoir que chaque lettre accentuộe est placộe aprốs sa lettre gộnộrique et avant la lettre suivante en insộrant un chiffre : Listing 7.2 : Tri avec les lettres accentuộes : tri_franc.php... $a=str_replace($valeur,$lalettre.$i,$a); $b=str_replace($valeur,$lalettre.$i,$b); $i++; } $un_tableau=array(ỗ); $i=0; $lalettre=d; 216 Double Poche PHP & MySQL Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark Tableaux foreach($un_tableau as $valeur){ $a=str_replace($valeur,$lalettre.$i,$a); $b=str_replace($valeur,$lalettre.$i,$b); $i++; } $un_tableau=array(ự,ỷ); $i=0; $lalettre=v; foreach($un_tableau... $un_tableau=array(ộ,ố,ờ,ở); $lalettre=f; $i=0; foreach($un_tableau as $valeur){ $a=str_replace($valeur,$lalettre.$i,$a); $b=str_replace($valeur,$lalettre.$i,$b); $i++; } $un_tableau==array(ụ,ử); $lalettre=p; $i=0; foreach($un_tableau as $valeur){ $a=str_replace($valeur,$lalettre.$i,$a); $b=str_replace($valeur,$lalettre.$i,$b); $i++; } $un_tableau=array(ợ,ù); $i=0; $lalettre=j; foreach($un_tableau as... appeler cette fonction, il vous reste ộcrire la ligne suivante : usort ($tableau, "cmp"); Double Poche PHP & MySQL 217 Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 7 7.2 Des algorithmes, des outils et des fonctions Calendriers, dates et autres agendas Les fonctions de date sont des outils pour nettoyer la base, trier des donnộes, connaợtre lactualitộ dune donnộe et amộnager... Formulaire pour lagenda : agenda_ecrire.php if ($_POST[cettedate]){ $clefdesol =$_POST[clefdesol]; $type =$_POST[type]; $contenu =$_POST[contenu]; $datedujour =$_POST[datedujour]; $cettedate=substr($_POST[cettedate], 0, 8); $cettedate.=$heure.$minutes.00; if ($clefdesol==1){ $sql="UPDATE agenda SET type=$type, contenu=$contenu, Double Poche PHP & MySQL 235 Please purchase PDF Split-Merge on www.verypdf.com... Le test sur !$variable_mois (ou $variable_mois==0) permet davoir le mois courant, qui sera le mois affichộ par dộfaut dans le menu dộroulant 220 Double Poche PHP & MySQL Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark Calendriers, dates et autres agendas Nous nissons cette partie de programme en extrayant le mois et lannộe de la variable $instant pour afficher le mois... bgcolor=\#FFFF66\">"; } /*cette condition sinterroge si ce jour est aujourdhui et Double Poche PHP & MySQL 221 Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 7 Des algorithmes, des outils et des fonctions dans ce cas la case est colorộe*/ else { echo ""; } if ($cellules Maintenant, lintộrieur de chaque cellule du tableau crộộ pour afficher le calendrier, nous allons introduire un tableau pour afficher le jour et en dessous deux cases, lune pour la prộsence dun ộvộnement et lautre pour un autre ộlộment de votre choix, par exemple le saint du jour 226 Double Poche PHP & MySQL Please . même schéma pour chaque lettre accentuée, à savoir que chaque lettre accentuée est placée après sa lettre générique et avant la lettre suivante en insérant. $a=str_replace($valeur,$lalettre.$i,$a); $b=str_replace($valeur,$lalettre.$i,$b); $i++; } $un_tableau=array(’ç’); $i=0; $lalettre=’d’; 7 Des algorithmes, des outils et des