WebÉducation – 10 Juin 2004 Jonathan Dumas Technicien en informatique Conseil du statut de la femme Téléphone : (418) 644-9200 jonathan.dumas@csf.gouv.qc.ca
1ere Partie Introduction au PHP Le PHP 1ere Partie Introduction au PHP
Historique « Le besoin est la mère de toutes les inventions... » Besoin primaire: Pages Web dynamiques Applications Web Outils existant C/C++ Grande complexité Pas du tout taillé pour le besoin initial Perl (cgi) Processeur de texte Commun et largement utilisé Un peu plus d'affinité avec le besoin initial, on approche de la solution.
Formulaire simple en langage C #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #define ishex(x) (((x) >= '0' && (x) <= '9') || ((x) >= 'a' && (x) <= 'f') || ((x) >= 'A' && (x) <= 'F')) int htoi(char *s) { int value; char c; c = s[0]; if(isupper(c)) c = tolower(c); value=(c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16; c = s[1]; value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10; return(value); } void main(int argc, char *argv[]) { char *params, *data, *dest, *s, *tmp; char *name, *age; puts("Content-type: text/html\r\n"); puts("<html><head><title>Form Example</title></head>"); puts("<body><h1>My Example Form</h1>"); puts("<form action=\"form.cgi\" method=\"GET\">"); puts("Name: <input type=\"text\" name=\"name\">"); puts("Age: <input type=\"text\" name=\"age\">"); puts("<br><input type=\"submit\">"); puts("</form>"); data = getenv("QUERY_STRING"); if(data && *data) { params = data; dest = data; while(*data) { if(*data=='+') *dest=' '; else if(*data == '%' && ishex(*(data+1))&&ishex(*(data+2))) { *dest = (char) htoi(data + 1); data+=2; } else *dest = *data; data++; dest++; } *dest = '\0'; s = strtok(params,"&"); do { tmp = strchr(s,'='); if(tmp) { *tmp = '\0'; if(!strcmp(s,"name")) name = tmp+1; else if(!strcmp(s,"age")) age = tmp+1; } while(s=strtok(NULL,"&")); printf("Hi %s, you are %s years old\n",name,age); puts("</body></html>"); Et avec le Perl, c'est comment?
Formulaire simple en Perl use CGI qw(:standard); print header; print start_html('Form Example'), h1('My Example Form'), start_form, "Name: ", textfield('name'), p, "Age: ", textfield('age'), submit, end_form; if(param()) { print "Hi ",em(param('name')), "You are ",em(param('age')), " years old"; } print end_html; Et en PHP ...
Formulaire simple en PHP <html><header><title>Form Example</title></header> <body><h1>My Example Form</h1> <form action="form.php" method="POST"> Name: <input type="text" name="name"> Age: <input type="text" name="age"> </form> <?PHP if($name): ?> Hi <?echo $name?>, you are <?echo $age?> years old <?endif?> </body></html>
Historique des versions 1994 « Personnal HomePage Tool » de Rasmus Leidorf Conception automne 1994 Version 1.0: Personal Home Page Tools au début 1995 Version 2.0: PHP/FI 1995-1997 Été 1997 Zeev Suraski & Andi Gutmans (ZEND engine) Version 3.0: PHP 1997-2000 (Syntaxe et sémantique actuelle) Version 4.0: PHP mid-2000 (PHP: Hypertext Preprocessor) Version 4.1: 10 Dec 2001 Version 4.2: 22 Apr 2002 Version 5 Release Candidate 3: 8 juin 2004
PHP en bref Le PHP est : À la fois un langage de programmation (Java, C#) et une plate-forme globale d'entreprise (.Net et J2EE) Langage mature et évolué. (OO) Extrêmement versatile et comporte plusieurs atouts: Simplicité Modèle de développement simple Proche du style de programmation Java/C/C++ Souplesse Deux syntaxe ou mode: orienté scripting et orientée objet Peut s'adapter autant à la couche présentation (WWW dynamiques) qu'aux tâches plus complexes (applications client-serveur) Interropérabilité Champion de l'intégration bas niveau: COM, JAVA, .NET pear::SOAP Adapté à la quasi-ensemble des moteurs de base de données...
PHP en bref Oracle, SQL Serveur, MySQL, dbase,PostgreSQL, ODBC, XML, LDAP, etc.), Supporte de nombreux protocoles (SMTP, IMAP, FTP, HTTP, TCP, etc.) Support des Socket (TCP/IP) Repose sur des standards ouvert Tonnes de ressources (IDE, Modules, Classes) dont la plupart sont gratuites Communauté solide (SourceForge, PHP Québec, PHPBuilder) Portabilité PHP est disponible sur l’ensemble des systèmes d’exploitation du marché :Windows toutes versions, Linux et Unix toutes versions,IBM iSeries (AS/400), SGI IRIX 6.5.x, RISC OS, Novell Netware, Mac OS X, AmigaOS, etc. Performance et stabilité Performances et stabilité inégalées en comparaison aux langages et plateformes utilisés dans le même but : ASP, JSP .NET
PHP en bref Performance (suite) Commande SELECT effectuée 40 fois de suites sur un serveur Microsoft SQL Server 7 en utilisant l'extension PHP's MSSQL7 extension, l'extension PHP ODBC et COM.
PHP en bref Utilisation sur l'Internet: PHP: 15,528,732 Domains, 1,343,899 IP Addresses Source: Netcraft
PHP en bref Se prête à de multiples utilisations : Utilisations nombreuses et variées WebApplications(HTML, WML, XML, XHTML.) Modèle :server-side scripting CMS :OpenSourceCMS, phpWebSite, Mambo, XOOPS Systèmes de gestion (Au CSF: GESCOUR, GCP+) Intégration à des services web reposant sur SOAP Client-serveur (PHP-GTK et PHP4Delphi) Ligne de commande (CLI) Un fier compétiteur aux plateformes de développement .NET, J2EE, Oracle et plus
« It's about getting things done. » PHP en bref Le PHP n'est PAS : Un simple langage de script Une nouveauté ou une mode passagère Un langage réservé aux débutants et aux hobbyistes Un langage destiné à remplacer le C/C++ (bien qu'il en soit capable dans bien des cas) En un mot: « It's about getting things done. »
PHP: Un écosystème L'écosystème PHP Architecture technique Diversification de la faune PHP Outils, Classes, API, Framework, Librairies Relations entres les différentes composantes d'un envirronnement PHP Fonctionnement global et modèle d'exécution Hypertext Preprocessor? Zend Engine Relations Serveur HTTP et PHP et Base de donnée Exemples de déploiement typique LAMP Envirronement de développement mono-utilisateur Envirronement de développement multi-utilisateurs Envirronement de production
PHP: Un écosystème Diversification de la faune PHP Extensions de l'engin Zend Optimizer Zend Encoder Framework PEAR (PHP Extension and Application Repository) Une librairie structurée de code source libre pour les utilisateurs de PHP Un système de distribution du code source et de maintenance des packages (modules) Des Classes PHP Fondamentales (PFC - PHP Foundation Classes) Un style de codage pour les programmes écrit en PHP(Coding Standard) Extensions PHP-GTK, PHP4DELPHI http://www.priadoblender.com/ Classes PDF, EXCEL (Biffwriter), très nombreuses et variées
PHP: Fonctionnement Architecture Technique
PHP: Fonctionnement Fonctionnement global et modèle d'exécution Hypertext Preprocessor? HYPERTEXT: Généralement, tout texte qui contient des liens à d'autres documents - des mots ou des expressions dans le document qui peut être choisi par un lecteur et qui causent un autre document d'être recherché et affiché. Contexte PHP :On travaille avec le Hyper Text Markup Language PREPROCESSOR : Une phase du compilateur qui examine le programme source pour des marqueurs (balise, « tags ») qui sont alors exécutés, ayant pour résultat le changement du programme source. Contexte PHP : L'interpréteur (le Zend engine) trouve et exécute le code PHP entre les balises PHP et génère un fichier HTML
PHP: Fonctionnement Modèle d'exécution simplifié L'interpréteur exécute le code PHP entre les balises <?PHP ?> et renvoi un fichier html consommable par un navigateur standard
PHP: Fonctionnement Fonctionnement global et modèle d'exécution avancé
PHP: Déploiement Déploiement typique Environnement de développement mono-utilisateur
PHP: Déploiement Déploiement typique Environnement de développement multi-utilisateurs
PHP: Déploiement Déploiement typique Environnement de production
PHP: Déploiement Particularité selon les installations Environnement de production Qualités recherchées Haute disponibilité Stabilité Performance Sécurité
PHP: Déploiement Environnement de production Solutions Matérielle et logicielles : Ex. « Clustering fail-over » BeoWulf Installer l'ensemble sur un OS stable: Ex: BSD,Linux Utiliser les versions dites « stable » des logiciels serveurs (Apache, mySQL) À la limite aller chez un produit comme Oracle pour la BD si disponible Compiler ses propres sources en incluant le support pour les extensions les plus utilisées: EX: ./configure' '--prefix=/usr/local/php' '--with- apxs2=/usr/local/apache2/bin/apxs' '--with-mysql=/usr/local/mysql' '-- with-ldap=/usr/local/ldap-3.3' '--with-gettext' Configuration réseau appropriée (firewall, ssl, DMZ) Analyse et programmation orientée vers la sécurité Respecter les standards de programmation Utiliser un modèle relations données-processus-interractions (workflow) sécuritaire
PHP: Déploiement Particularité selon les installations Environnement de développement multi-utilisateurs Qualités recherchées Stabilité Sécurité Coopérativité
PHP: Déploiement Environnement de développement multi-utilisateurs Solutions Linux ou Windows au choix Apache ou IIS au choix Concurrent Versions System (CVS) Part of the open-source toolcraft, CVS is used for collaborative software configuration management on the Internet. Developers favor CVS for making current work available and also for bringing together and managing configurations using configurations developed at different locations around the world. Des outils afin de centraliser les ressources et encourager le coopération et le partage Groupware Bibliothèques et librairies de code réeutilisable Répertoire d'outils Forums Analyse et programmation orientée vers la sécurité Respecter les standards de programmation Utiliser un modèle relations données-processus-interractions (workflow) sécuritaire
PHP: Mini Projet BUT: Monter une application web de style « Carnet d'adresse » en utilisant la technologie PHP. Outils et technologies utilisées Modélisation des données avec DB Designer Utilisation d'outils (win32) MySQLFront, MySQL Administrator && MySQL Contro Center NVU, PHPEdit PHP (!), CSS, HTML, Javascript, Et bien plus...
2e Partie Développement d'une mini application Le PHP 2e Partie Développement d'une mini application
PHP: Mini Projet BUT: Monter une application web de style « Carnet d'adresse » en utilisant la technologie PHP. Outils et technologies utilisées Modélisation des données avec DB Designer Utilisation d'outils (win32) MySQLFront, MySQL Administrator && MySQL Contro Center NVU, PHPEdit PHP (!), CSS, HTML, Javascript, Et bien plus...
PHP: Étapes de conception Planification Description du besoin et mini-analyse Montage d'un modèle de travail (Workflow) Modélisation des données Description des processus Modularisation du projet Exécution Préparation de la DB Configuration des accès Insertion des données tests
PHP: Étapes de conception (suite) (Exécution) Programmation Classes et librairies (OO) utilisées Identification (Minos) Sanitarisation des données Module principal Listing Ajout Modification Suppression Recherche Gestion des accès appliquée (Minos) Interaction avec la base de données
PHP: Un mot sur le SQL SQL Structured Query Language Langage développé par IBM dans les années 1970 comme étant un moyen de placer, modifier, supprimer ou extraire de l'information logées dans un système de base de données relationnelles. Exemple: « INSERT INTO tblClients SET NomClient = 'Pierre'; » Pour insérer une nouvelle entrée (Pierre) dans le champ NomCLient de la table tblCLients. « En PHP on utilise le SQL et les bases de données relationnelles pour ranger de l'informations que l'on voudra utiliser plus tard » Principes: Un bon modèle de données (tables, relations, etc) qui respecte les formes normales (FN) telles que définis par le modèle relationnel réduit à néant le risque de perte de données (intégrité) tout en augmentant la productivité et évite de se retrouver dans des impasses et pièges logiques. Plus on optimise ses requêtes SQL plus le PHP et donc le système au complet s'en trouve amélioré. Des gains considérable en vitesse d'exécution sont à faire en optimisant son code au niveau des requêtes SQL.
PHP: Planification Description des besoins Application accessible via un intranet Multi-utilisateurs Possibilité d'administration à distance Sécuritaire Recherche
PHP: Planification Modèle de travail Décortiquer le problème Module : Gestion des accès Sécurité Multi-utilisateurs Administration à distance Fichier journal Paramétrages Module : Corps de l'application Saisie de données Validation Gestion des erreures Modification / Suppression de données Recherche
PHP: Planification Modèle de travail pour notre application:
PHP: Exécution Préparation de la DB
Programmation des modules principaux: PHP: Exécution Programmation des modules principaux: carnet.php modifications.php utils.inc.php
Ajout de l'authentification PHP: Exécution Ajout de l'authentification index.php login.php minos.class.php erreurs.php
Ajout de la journalisation log.class.php PHP: Exécution Ajout de la journalisation log.class.php
Varia Ajustements finaux PHP: Exécution Varia Ajustements finaux
PHP: Conclusion Question et réponses
FIN