Le langage php 1. Introduction aux langages serveurs : Il y a deux modes d exécution d une page HTML : Local : en cliquant sur le fichier, le navigateur Serveur http est automatiquement lancé. Navigateur Http : lancement préalable du navigateur et recherche de la page sur un serveur distant. requête http Pour qu une machine puisse faire office de serveur http, il faut : Qu elle dispose d un service http (Apache, IIS, ) Serveur PC Que ce service http prenne en charge des langages dit serveur via des fichiers dll (sous "réseau" windows) ou des modules compilés (.o) sous linux. Ainsi quand une telle page est exécutée, la partie HTML ou script est exécutée par votre machine mais les requêtes lancées par les boutons d un formulaire seront exécutées par le serveur distant. Le code étant interprété (ou exécuté) par le serveur, il ne peut être vu par le client (en faisant voir le source). Mise en évidence des parties exécutées par le serveur et celles par le client (date.php) : <script language="javascript"> var d = new Date(); $LaDate = date("d/m/y"); var h = d.gethours(); $Lheure = date("h:i:s"); document.write("il est sur votre poste." + d); echo "il est sur le serveur $LaDate $Lheure <br/>"; </ script > Exécution locale : Exécution http : IE exécute seulement la partie javascript. IE exécute la partie javascript, le serveur web la partie php 2. Le PHP (personnal home page) : Logiciel freeware particulièrement adapté à des requêtes sur la base de données MySql. Les sites prennent souvent en charge le php qui permet une programmation plus puissante que le javascript. Syntaxe proche de celle du c et du c++ (classes). La première particularité de ce langage est que les variables commencent par un $. Représente le p dans un serveur lamp (linux + apache + mysql + php). Versions Windows (séparée ou dans la distribution easyphp) & linux. Le code est entouré par les chaînes et? > Le fichier doit avoir l extension php3..8 et peut s exécuter comme une page html (voir date.php plus haut) Il peut être aussi appelé par une page html : Par un lien, <a href SRC=URL> </a> Par une balise <script language="php" SRC=URL> </script> Par un formulaire avec un bouton SUBMIT. J:\JLP\Info\Internet\cours\5Php.doc JLPascal 1/6
3. Interaction avec un formulaire : On peut exécuter directement une page serveur (extension php, asp, pl ou cgi) mais on préfère l associer à un formulaire html qui soumettra au serveur l exécution d une page en précisant son URL dans l attribut ACTION de la balise FORM. De plus, pour signifier la fin de la saisie, on a un bouton de type SUBMIT. Exemple : <form method="post" action="page.php"> Auteur <input type = text name="auteur" > Prix <input type = text name="prix" > <input type= submit value=envoyer> </form> Une page php récupère ses paramètres soit par la méthode GET, soit par la méthode POST. Quand on utilise un formulaire pour appeler cette page, il suffit de le préciser dans l attribut METHOD de la balise form. La méthode GET a les particularités suivantes : les paramètres du formulaire apparaissent la suite de l URL, la liste démarrant avec un? et les paramètres étant séparés par un & : http://./page.php?auteur=zola&prix=100 Le maximum de la barre url à 255 caractères limite la quantité d informations La page php peut être appelée directement sans passer par un formulaire. La méthode POST a les particularités suivantes : Seule apparaît la page php dans la barre URL http://./page.php Pas de limite dans la tailles des paramètres Ne peut être appelée directement sans formulaire à moins qu il n y aie pas de paramètres. Les paramètres (ou variables d environnement) se récupèrent avec les instructions : o $auteur = $_GET["auteur"]; ou o $auteur = $_POST["auteur"]; On peut tester l existence de cette variable avec le test suivant : o if (isset ($_POST["auteur"])). 4. Exemple de page php mixant html & php : Voici une image qui change toutes les 10 minutes : <img src= $Lheure = date("h:i:s"); $image = substr ($Lheure,3,2); settype($image, "integer"); $image = round($image / 10); switch( $image ) { case 1: echo "gd_gaffe_000.gif"; break; case 2: echo " gd_gaffe_001.gif"; break; case 3: echo " gd_gaffe_002.gif"; break; default: echo " gd_gaffe_003.gif"; break; /* Fin du code PHP, reprise du code HTML */ height= 274 width= 394 border= 0 alt="bienvenue"> J:\JLP\Info\Internet\cours\5Php.doc JLPascal 2/6
5. Algorithmique : exemple un tri de tableau : $tab = array (2,5, 1,18,7,8,7,3,9,12); $nb = 10; for ($i = 1; $i < $nb ; $i++) { for ($j = 0 ; $j < $i ; $j++) { if ($tab[$i] < $tab[$j]) { $tempo = $tab[$i]; $tab[$i] = $tab[$j]; $tab[$j] = $tempo; // fin if // fin for // fin for echo "fin du tri <br/>"; for ($i = 0; $i < $nb ; $i++) echo "$tab[$i] "; 6. Accès aux fichiers : Counter.html <script language="php" src="counter1.php"> </script> Cette page a été accédée <object width="80" height="40" type="text/plain" data="compteur.txt"> </object> fois counter1.php $fichier = "compteur.txt"; if (!$fp = fopen($fichier,"r+")) { echo "fichier heure non trouvé, création\n"; $fp = fopen($fichier,"a"); $cpt = "000000"; else { $cpt = fgets($fp,6); fseek($fp, 0); $cpt++; fwrite ($fp, "$cpt\n\r"); fclose($fp); Création d un répertoire // Ce fichier creatdir.php est copié par ftp sur le site de free et executé par un accès http echo " realpath('creatdir.php') \n\r"; // permet de connaitre le nom reel du dossier $rep = "/mnt/109/sdb/c/e/jeanlouis.pascal/spip/img/html"; echo "Creation repertoire $rep \n\r"; if(mkdir ($rep,0755)) echo"création réussie"; else echo"erreur mkdir"; J:\JLP\Info\Internet\cours\5Php.doc JLPascal 3/6
7. Ecriture et utilisation de classes : testcounter.php " Compteur" moncpt soumet Compteur() affiche() include ("counter.php"); $moncpt = new Compteur( ); $moncpt->affiche(); class Compteur { var $cpt = "000000"; function Compteur () { $fichier = "compteur.txt"; if (!$fp = fopen($fichier,"r+")) { echo "fichier non trouvé création..\n"; $fp = fopen($fichier,"a"); else { $this->cpt = fgets($fp,6); fseek($fp, 0); $this->cpt = $this->cpt + 1; fwrite ($fp, "$this->cpt\n\r"); fclose($fp); // fin constructeur testcounter.php Counter.php function affiche () { $t4 =floor($this->cpt/1000); $this->cpt = $this->cpt % 1000; $t3 = floor($this->cpt/100); $this->cpt = $this->cpt % 100; $t2 = floor($this->cpt/10); $t1= $this->cpt % 10; echo "Cette page a été accédée <img src=$t4.gif > < img src=$t3.gif > < img src=$t2.gif > < img src=$t1.gif > fois"; // fin methode affiche // fin classe J:\JLP\Info\Internet\cours\5Php.doc JLPascal 4/6
8. Envoi de mails : <h2> Envoi de mail </h2> $dest = $_GET["dest"]; $sujet = $_GET["sujet"]; $message = $_GET["message"]; print ("Envoi mail à $dest <br/>"); ini_set("smtp","smtp.neuf.fr"); ini_set('sendmail_from', 'jean-louis.pascal@acxxx.fr'); mail($dest, $sujet, $message); print ("message envoyé <br/>"); 9. Gestion des cookies : Creation d un cookie // mise en place d'un cookie // d'une durée de vie d'une heure // 1 = ne peut être lu que par https // path : repertoire de validité $status = setcookie("cookie_jlp", "texte du cookie", time() + 3600, "/", "127.0.0.1", 0); echo " resultat de la creation = $status <br/>"; Lecture d un cookie echo " Lecture d'un cookie <br/>"; echo "mon cookie = ". $_COOKIE['cookie_jlp']." <br/>"; Destruction d un cookie $status = setcookie("cookie_jlp"); echo " resultat de la destruction = $status <br/>"; Emplacement des cookies J:\JLP\Info\Internet\cours\5Php.doc JLPascal 5/6
Fichier contenant les cookies 10. Fonctions de manipulation de chaines implode et explode : $tableau = array('nom', 'email', 'telephone'); $separateur = implode(",", $tableau); echo $separateur; $data = "jlp:*:1023:1000::/home/jlp:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); echo "utilisateur $user <br/> home directory $home"; 11. Exécution d une commande ou d un programme : //echo exec( whoami ) ; echo exec('ls -la'); //echo exec('ps -elaf grep apache2'); 12. Du graphic en php : $Largeur = 320; $Hauteur = 200; $image = imagecreate($largeur, $Hauteur ); $w = 100; $h = 100; $cx = 100; $cy = 100; $s=0; $e=360; $bleu = imagecolorallocate ($image, 0, 0, 255); $rouge = imagecolorallocate ($image, 255,0,0); $vert = imagecolorallocate ($image,200,250,220); imagefilledrectangle ($image, 0, 0, $Largeur, $Hauteur, $vert); imageline ($image, 25, 50, 166, 132, $rouge); imagepng ($image); imagedestroy ($image); J:\JLP\Info\Internet\cours\5Php.doc JLPascal 6/6