– 10 Juin 2004 WebÉducation

Download Report

Transcript – 10 Juin 2004 WebÉducation

WebÉducation – 10 Juin 2004
Jonathan Dumas
Technicien en informatique
Conseil du statut de la femme
Téléphone : (418) 644-9200
[email protected]
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];
if(isupper(c)) c = tolower(c);
value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;
return(value);
}
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,"&"));
void main(int argc, char *argv[]) {
char *params, *data, *dest, *s, *tmp;
char *name, *age;
printf("Hi %s, you are %s years old\n",name,age);
}
puts("</body></html>");
}
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>");
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'),
p,
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
PHP en bref
●
–
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é
–
●
Oracle, SQL Serveur, MySQL, dbase,PostgreSQL, ODBC, XML,
LDAP, etc.),
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
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
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/
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' '--withapxs2=/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)
–
●
Des outils afin de centraliser les ressources et encourager le coopération
et le partage
●
●
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.
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...
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
PHP: Exécution
Programmation des modules principaux:
carnet.php
modifications.php
utils.inc.php
PHP: Exécution
Ajout de l'authentification
index.php
login.php
minos.class.php
erreurs.php
PHP: Exécution
Ajout de la journalisation
log.class.php
PHP: Exécution
Varia
Ajustements finaux
PHP: Conclusion
Question et réponses
FIN