Académique Documents
Professionnel Documents
Culture Documents
G. Rey
Cours/TP n° 3 2015-2016
1 Présentation
Les objectifs de ce cours/TP sont de vous montrer comment installer et configurer un serveur web pour qu’il puisse
interpréter des scripts PHP. Nous verrons également comment fonctionne le langage PHP et comment utiliser PHP
conjointement avec AJAX. Enfin, dans la dernière partie du TP nous expérimenterons d’autres technologies
concurrentes à PHP tel que l’ASP.Net de Microsoft.
1.1 Pré-requis
Pour réaliser ce cours/TP, vous avez besoin d’un serveur web fonctionnel. Vous utiliserez le serveur http sous Linux
que vous avez configuré lors du cours/TP 1.
Vous aurez également besoin d’un éditeur de texte pour écrire le code de vos pages. Vous pouvez par exemple
utiliser un des logiciels Notepad++, ConText, Quanta+, WebExpert, SciTE …
Pour réaliser ce cours/TP, vous garderez les groupes constitués lors du premier cours/TP.
1.2 Le rendu
Vous devrez, en fin de séance, rendre un compte rendu de votre TP. Ce compte rendu devra OBLIGATOIREMENT
respecter les contraintes suivantes :
• Contenir dans le corps de l’email les questions que vous pourriez avoir (si vous souhaitez avoir une
réponse rapide car les comptes rendu ne sont pas évalués immédiatement).
• Contenir en attachement 1 seul fichier .zip, .7z ou .tar.gz contenant lui-même 1 fichier de compte rendu (au
format pdf, rtf, doc, docx ou txt) ainsi que les divers fichiers (fichiers de configuration, pages (x)html, CSS,
php…) écrits dans le TP.
2.1 Installation
Commençons par ajouter mysql à notre installation :
> apt-get install mysql-server
ou
> aptitude install mysql-server
Nous devons également installer les modules php pour apache. Pour cela, vous devez installer un interpréteur php
à l’aide de la commande suivante :
> apt-get install php5
ou
> aptitude install php5
2.2 Configuration
La ligne suivante est nécessaire pour que les fichiers php soient bien interprétés par apache.
AddType application/x-httpd-php .php .php3 .php5 .phtml
Normalement celle-ci ou une ligne équivalente doit être ajoutée dans apache2.conf ou httpd.conf ou dans le fichier
de configuration du module correspondant.
Comme nous l’avons vu dans le cours/TP1, pour une gestion plus « propre », celle-ci se trouve aujourd’hui dans le
fichier de configuration du module php5 pour apache. Vérifiez cela :
> cat /etc/apache2/mods-enabled/php5.conf
Depuis la version 2.2.16 (introduite dans la version stable de debian 6), la ligne de configuration a été remplacée
par les lignes suivantes (toujours dans le fichier php5.conf) :
<FilesMatch "\.ph(p3?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
Connectez-vous avec les droits root sous mysql. Créez une nouvelle base nommée tp3db puis créez un nouvel
utilisateur ayant les droits sur cette base.
> mysql –u root –p mysql
mysql> CREATE DATABASE tp3db;
mysql> USE mysql;
mysql> GRANT ALL PRIVILEGES ON tp3db.* TO 'phpuser'@'localhost' IDENTIFIED BY 'passphp' WITH
GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON tp3db.* TO 'phpuser' IDENTIFIED BY 'passphp' WITH GRANT
OPTION;
mysql> COMMIT;
mysql> QUIT;
2.3 Test
Créez un fichier index.php à la racine de votre serveur web (dans /var/www/ si vous n’utilisez pas d’autres serveurs
virtuels). Ce fichier devra contenir cette unique ligne :
<?php phpinfo(); ?>
Rendez-vous sur http://xxx.xxx.xxx.xxx/ (à modifier suivant l’adresse IP de votre serveur). Si votre serveur http est
bien configuré vous devriez voir la page suivante :
3 PHP
3.1 Présentation du PHP
PHP a été créé en 1994 par Rasmus Lerdorf pour les besoins des pages web personnelles (livre d’or, compteurs,
etc.). A l’époque, PHP signifiait Personnal Home Page. PHP est un langage de script, c'est-à-dire que le code est
enregistré sous forme de fichier texte sur le disque dur, et qu'il est exécuté à la demande par un programme chargé
de l'interpréter. C'est habituellement l'internaute (par l'intermédiaire de son navigateur Web) qui demande
l'exécution d'un script lorsqu'il consulte une page Web. La demande est reçue par le serveur Web (par exemple
Apache HTTPD), qui se rend compte qu'il doit la sous-traiter à PHP.
En 1997, PHP devient un projet collectif et son interpréteur est réécrit par Zeev Suraski et Andi Gutmans pour
donner la version 3 qui s’appelle désormais « PHP Hypertext Preprocessor ».
Sa gratuité et le libre accès à ses sources en fait un langage très populaire surtout auprès de la communauté GNU
Linux. Sa syntaxe proche du C, et sa programmation « intuitive » en font le langage qui a fait la plus grande percée
auprès des webdesigners en 2001. De nombreux sites lui sont consacrés, on y trouve des scripts, des astuces et
même des concours de logos...
3.2 Documentation
Le site officiel de PHP est extrêmement bien fait. La documentation de n'importe quelle fonction est accessible
depuis l'URL :
http://php.net/nom_de_la_fonction
N'oubliez pas de consulter les commentaires utilisateurs, car de très nombreux commentaires donnent des conseils
très utiles.
La documentation complète de PHP est disponible en français à l’adresse :
http://www.php.net/manual/fr/
Pour vous aider dans l’identification et la correction des erreurs dans votre code php, nous allons modifier le fichier
de configuration pour qu’il fasse afficher celle-ci. Editez le fichier /ect/php5/apache2/php.ini et activez les traces de
debug des directives suivantes :
Licence Professionnelle Nice – Sophia
Université de Nice – Sophia Antipolis
930, Route des Colles – B.P. 145 - 06903 Sophia Antipolis Cedex – France
3
Tél : +33 (0)4 92 96 50 50 – Fax : +33 (0)4 92 96 50 55
http://www.polytech.unice.fr/
Licence Professionnelle Nice – Sophia
G. Rey
Cours/TP n° 3 2015-2016
// Constructeur de la classe
public function __construct($type = 'N/A', $km = 'N/A') { // Paramètres optionnels
if (!is_numeric($km) || !($km > 0 && $km < 1000000))
$this->km = self::km_initial;
else
$this->km = $km ;
// Constantes de classes
echo 'Les km d’une voiture neuve sont de ', Voiture::km_initial;
?>
Pour plus d’informations sur l’utilisation et le fonctionnement des tableaux en PHP, consultez cette page.
Indice : le fichier transmis par un formulaire est récupérable en PHP via la variable superglobale $_FILES[]. La
description de cette variable (que vous pouvez obtenir avec « print_r($_FILES); ») est la suivante :
Array
(
[nom_du_fichier] => Array
(
[name] => nom.jpg
[type] => image/jpg
[tmp_name] => chemin_complet_du_fichier_uploadé
[error] => 0
[size] => 1250
)
)
Par exemple, $_FILES[‘nom_du_champs_name_de_l_input’][‘name’] vous donne le nom du fichier transmis.
Pour des explications sur les messages d'erreurs de chargement de fichiers, vous pouvez consulter la page suivante
sur le site de php.net.
Ajoutez, ensuite, une fonction qui affiche le contenu de ce répertoire images et qui propose de visualiser chacune
des images qu’il contient. On limitera la taille des fichiers transférables à environ 900Ko.
Que se passe-t-il si on change le formulaire si dessus en définissant une limite à 10Mo (MAX_FILE_SIZE) au lieu
des 900 Ko actuel ? Que doit ton modifier pour que cela fonctionne ?
// version PDO_mysql
$pdo = new PDO('mysql:host=serveur;dbname= base_de_donnees, utilisateur, mot_de_passe);
// version PDO_mysql
$pdo = null ;
// version PDO_mysql
public PDOStatement PDO::query ( string $statement )
Licence Professionnelle Nice – Sophia
Université de Nice – Sophia Antipolis
930, Route des Colles – B.P. 145 - 06903 Sophia Antipolis Cedex – France
8
Tél : +33 (0)4 92 96 50 50 – Fax : +33 (0)4 92 96 50 55
http://www.polytech.unice.fr/
Licence Professionnelle Nice – Sophia
G. Rey
Cours/TP n° 3 2015-2016
<?php
$sql = "SELECT * FROM " . $table;
$res = mysql_query($sql);
// Tant qu'une ligne existe, place cette ligne dans la variable $val
// sous la forme d'un tableau associatif.
while ($val = mysql_fetch_assoc($res)) {
$nom = $val['nom'];
$email = $val['email'];
$dateheure = $val['dateheure'];
echo $dateheure . ' : ' . $nom . '(' . $email . ')<br />';
}
?>
Adaptez le code ci-dessus en utilisant mysqli ou PDO au lieu de mysql.
• Un article aura un nom, une description, un prix, une disponibilité (en stock / 48 heures / 5 à 7 jours / 3
semaines / épuisé) et un identifiant unique.
• Un client aura un nom, un prénom, une date d’anniversaire (jour et mois), un mot de passe, une adresse
email et un identifiant unique.
• Un achat aura un numéro de commande, un identifiant d’article et une quantité d’article.
• Une commande aura une date de commande, un état (en préparation / bloquée / annulée / en livraison /
terminée), un identifiant de client et un numéro de commande
Peuplez votre base de données avec des éléments dont vous choisirez le thème.
• Affiche votre login, un lien de déconnexion et un message de bienvenue si une session PHP contenant
votre login existe.
• Affiche un lien vers une page de connexion et un message vous invitant à vous connecter si aucune session
PHP est actuellement ouverte.
Créez, ensuite une page co_deco.php qui va gérer les connexions et déconnexions. Cette page prend deux
paramètres :
• le mode (login ou logout) qui lui permettrons de connaitre s’il s’agit d’une action de connexion ou une
action de déconnexion. Exemple http://xxx.xxx.xxx.xxx/co_deco.php?mode=login
• un identifiant de session permettant de savoir, en cas de déconnexion seulement, qu’elle session doit être
fermée. Exemple http://xxx.xxx.xxx.xxx/co_deco.php?mode=logout&sid=125369
Si on vient sur cette dernière page pour une déconnexion, elle devra fermer la session et afficher un lien vers la
page d’accueil. Si on vient sur cette page pour une connexion, elle devra afficher deux champs de saisie, un pour
l’identifiant un autre pour le mot de passe ainsi qu’un bouton de connexion. Vous vérifierez si le couple saisie
correspond bien à un utilisateur enregistrer dans votre base de données. La page réagira donc en fonction des
valeurs saisies :
• Au moins un des champs de saisie est resté vide : la page se réaffiche et signale à l’utilisateur qu’il n’a pas
saisi le champ en question.
• Les champs sont bien saisis mais le couple ne correspond pas à un couple login/pass existant : la page se
réaffiche et signale à l’utilisateur que les informations saisies sont incorrectes.
• Les champs sont bien saisis et le couple correspond bien à un couple login/pass existant : la page se
réaffiche sans afficher les champs de saisie mais en faisant apparaitre un lien vers la page d’accueil.
• Modifiez une page web permettant de créer un nouvel utilisateur. Cette page de création sera accessible à
tous les clients. Les clients enregistrés pourront modifier leur profil.
Un cookie peut être envoyé depuis un script PHP avec la fonction setCookie(). Cette fonction doit être utilisée
avant tout envoi d'en-tête HTTP au navigateur (il ne faut rien afficher avant d'utiliser cette fonction).
• La page de connexion/déconnexion crée un cookie sécurisé contenant le login et un autre le mot de passe
de l’utilisateur en plus de créer la session. Cette création devra uniquement se faire lors d’une connexion
valide.
• La page d’accueil, dans le cas où il n’y a pas de session, vérifie la présence du cookie de connexion. S’il
existe, elle crée la session et s’affiche comme en cas de session ouverte. S’il n’existe pas, elle affiche le
même message qu’avant quand la session n’existait pas.
4 ASP.NET
Nous allons finir ce cours/TP en regardant rapidement une autre technologie pour concevoir des pages
dynamiques coté client. Puisque vous devriez voir JSP/Servlet (la technologie de Sun Microsystems basé sur Java)
dans un autre cours, nous allons nous attarder un peu sur la troisième force, je veux bien sûr parler d’ASP de
Microsoft.
Asp.NET est basé sur la technologie .NET. Il permet la programmation d’applications Web dynamiques, du côté du
serveur. Les navigateurs Web, à l’aide de pages au format html, servent donc d’interface entre l’application .NET et
l’utilisateur. Contrairement à asp et php, où le code était inclus directement dans la partie html, asp.NET est un
Serveur ASP.NET
Première Non
exécution ?
Oui
Oui
Compilation Changement ?
MSIL
Non
HTML
Requête
Il est important de comprendre le fonctionnement de l’architecture client/serveur pour développer dans cette
architecture. C’est la raison pour laquelle nous allons voir cette architecture de manière schématisée.
Une page asp.NET possède une extension .aspx. Cette page a la forme générale suivante :
<head>
<script language= "c#" runat="server">
type fct (type i) { … }
</script>
<script language= "javascript">
function f ;
</script>
</head>
<body>
<table> … </table>
<asp :Label [Propriétés]></asp :Label>
<% =fct(5) %>
</body>
• La première partie fait apparaître les scripts. On remarque que du c# et du JavaScript cohabitent dans la
même page. En quelques lignes, nous verrons ce qu'il est possible de mettre dans les balises de ce type.
• La deuxième, permet de montrer que le code html est identique au code html d'une page web statique.
• Et la dernière montre les balises qui déroutent le plus le non initié, c'est à dire <asp :…> et <% … %>. Il
s'agit en fait de, respectivement, la balise d'ouverture pour un WebForm asp.NET et d'une balise de
fonction. Nous allons les détailler quelque peu.
Tout script écrit en c# pour asp.NET doit se trouver entre les balises suivantes :
<script language= "c# " runat= "server ">
…
</script>
Le tout doit se trouver entre la balise html ouvrante et celle fermante. Mais en asp.NET, on peut utiliser n’importe
lequel des langages .Net. Par exemple,si l'on avait utilisé un autre langage tel que VB.NET, on aurait eu :
<script language= "VB.NET " runat= "server ">
…
</script>
Nous allons maintenant détailler ce qui se trouve dans ces balises.
• La propriété language permet de déclarer le langage dans lequel le script est écrit. On ne peut définir qu'un
seul langage .NET pour la partie script par page .aspx.
• La valeur "server" assignée à la propriété runat signale que le script doit s'exécuter sur le serveur
d'application. Le navigateur client ne recevra que du code html.
• Entre les balises <body> et </body>, nous allons trouver les balises suivantes : <form runat= "server"> et
</form> qui signifient que nous utilisons un formulaire qui doit être traité par le serveur. Effectivement, le
client ne doit recevoir que du code html, le seul code compris par tous les navigateurs. Les balises <asp :
seront donc traitées avant l’envoi de la page html.
Allez dans votre page Default.aspx et ajouter un champ texte, un bouton et un label :
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
<br />
Testez votre page en cliquant sur la petite flèche verte, vous devriez obtenir la page suivante :
Bien sûr, il est possible de faire toute ces manipulations (et bien plus) à l’aide de l’interface graphique de Visual
Web Developer. Par exemple dans le cadre de cet exemple, seul le contenu de la méthode Button1_Click est à saisir.
On se rend vite compte que le principe est semblable à la programmation classique sous Visual Studio.
4.4 Exercices
4.4.1 Exercice 1 : vérification de valeurs (conseillé)
Ecrire une page ASP.NET qui fait la somme de 2 nombres saisis dans des champs textes. Si un champ texte ne
contient pas un nombre, il sera mis en rouge et le résultat sera vide.
Ajoutez un champ date de naissance. Ce champ pour être rempli soit directement par l’utilisateur soit en utilisant
un calendrier comme celui-ci :
La validation de la page par le bouton « envoi ! » ne pourra avoir lieu que si toutes les contraintes sont vérifiées.
Cela affichera une page avec les informations saisies comme un récapitulatif. Pour cela vous utilisez (pour le
moment) la méthode Response.Redirect(url) pour l’envoi des données. L’url sera du type :
nom_de_ma_page.aspx?att1=val1&att2=val2
Le traitement sur la page du récapitulatif se fera avec la méthode Request.Params[att] comme dans l’exemple :
Label1 = "<span>Nom de famille: " + Request.Params["nomF"].ToString() + "</span>";
La syntaxe et l’utilisation des variables d’application sont les mêmes que pour les variables de sessions si ce n’est
que ces variables sont accessibles par toutes les sessions, il est donc possible de les faire communiquer. Celles-ci
sont dans le tableau Application[« nom_de_la_variable »].
5 Références
Vous pourrez trouver des informations complémentaires à ce cours/TP dans les ouvrages et sites suivants :
• PHP 5 - MySQL 5 – AJAX : 1ère édition, 12/2007 Editions Editions ENI, ISBN13 : 978-2-7460-4057-1
• Pratique de MySQL et PHP : 3ème édition, Janvier 2005 Editions O'Reilly, ISBN13 : 9782841773381
• Les Cahiers du programmeur PHP 5 : 1 édition, 2004-06-01 Editions Eyrolles, ISBN13 : 9782212112344
• Premières applications Web 2.0 avec Ajax et PHP : Janvier 2008 Editions Eyrolles, ISBN13 : 9782212120905
• PHP 5 Avancé : 3eme édition, 2 octobre 2006 Editions Eyrolles, ISBN10 : 2212120044
• ASP.NET : une architecture novatrice pour vos sites dynamiques par Thomas Pétillon