2. L’AFUP
Association Française des Utilisateurs de PHP
Association 1901 but non lucratif
●
Promouvoir PHP en France
–
~250 membres
●
Les activités :
●
Rendez-vous
–
ApéroPHP
–
Forum PHP
–
2
AFUP Supélec Mars 2009
3. Les intervenants
Julien PAULI
Architecte expert certifié PHP & ZF
●
● Membre AFUP
● Auteur (Eyrolles)
● Responsable pôle formation PHP
chez Anaska
Conférencier & Consultant
●
● Contributeur PHP
● Contributeur ZendFramework
3
AFUP Supélec Mars 2009
4. Les entreprises
ANASKA
Société de formation en logiciels libres
●
Depuis 2002
–
PHP très présent et très demandé
●
5 niveaux de formations
–
Certification
–
Les logiciels libres en pleine expansion
●
4
AFUP Supélec Mars 2009
5. Les entreprises
ALTER-WAY
Catalyseur de solutions open source
●
Intégrateur logiciels libres
●
Création 2006
–
Hébergement
●
Développement
●
Formation
●
Gestion de données
●
Audit & conseil
●
5
AFUP Supélec Mars 2009
6. Logiciel libre
Le logiciel libre est moins impacté par la crise
●
Il est en constante évolution
●
Contribuez
–
Le logiciel libre coûte moins cher que le
●
propriétaire
Il est plus souple à déployer
–
6
AFUP Supélec Mars 2009
7. PHP en dates
1995
Rasmus Lerdorf crée Personnal Homepage Tools
●
pour mettre à jour son CV en ligne
La librairie ancêtre de PHP est toujours en ligne
–
http://museum.php.net/
●
7
AFUP Supélec Mars 2009
8. PHP en dates
1998
Un groupe déjà important travaille autour de ce
●
langage
PHP 2 puis PHP 3 voient le jour
–
Déjà là : beaucoup de serveurs sont supportés
–
L'installation est très simple et légère
–
8
AFUP Supélec Mars 2009
9. PHP en dates
1998-2000
Zeev Suraski et Andi Gutmans réécrivent tout le
●
coeur du langage
Gestion de la mémoire anticipée
–
Nombreuses macros C
–
Le quot;Zend Enginequot; est né
–
Zend = Zeev + Andi
–
Un angouement international
●
La magie de l'open source fonctionne
–
Un langage modulaire
●
2000 : PHP4
●
9
AFUP Supélec Mars 2009
10. PHP en chiffre
2004
PHP 5
●
Zend Engine 2 : réécriture complète
–
Modèle Objet abouti
–
Traitements XML simplifiés
–
SOAP et Web Services
–
Amélioration support MySQL
–
Des centaines de contributeurs au langage
–
10
AFUP Supélec Mars 2009
11. PHP et le futur
PHP 5.3 (quelque part en 2009 ?)
Namespaces
●
Accès au garbage collector
●
Profiling Xslt
●
Closures et fonctions anonymes
●
Modèle objet amélioré et plus riche
●
Opérateur quot;gotoquot;
●
Meilleure gestion de l'I18n
●
Phar (PHPArchive)
●
11
AFUP Supélec Mars 2009
12. PHP et le futur
PHP 6 (quelque part en 2078 ?)
Tout le code est réécrit pour gérer Unicode
●
12
AFUP Supélec Mars 2009
16. Ils l'utilisent
Yahoo
●
Le Monde
●
SkyRock Ce n'est pas parce que ce n'est
●
●
pas marqué .php à la fin du
BNP Paribas
●
fichier, que ce n'est pas PHP qui
Facebook
●
traite :-)
Meetic
●
Nokia
●
TF1
●
Alapage
●
16
AFUP Supélec Mars 2009
17. Un langage modulaire
PHP est adopté car il est modulaire
●
Le Zend Engine possède les fonctionnalités de base
–
Que l'on active ou pas à la compilation
●
Le Zend Engine possède des connecteurs pour lui ajouter
–
des fonctionnalités
Et il existe un gros dépôt de modules (PECL)
–
Ecrits en C
●
Open Source
●
Branchés sur l'API du Zend Engine
●
Rajoutent des fonctionnalités au langage
●
Se chargent via des .so ou des .dll, très simplement
●
17
AFUP Supélec Mars 2009
18. Un langage modulaire
PHP est adopté car il existe une communauté
●
extrêmement importante autour
On utilise PHP en entreprise certes mais …
●
Beaucoup de projets écrits en PHP sont ouverts et libres
–
Des moteurs de recherches
●
Des ORM (Mapping Objet Relationnels)
●
Des frameworks
●
Des outils de testabilité logiciel
●
Des outils métiers (mathématiques)
●
...
●
http://pear.php.net
–
http://www.phpclasses.org
–
18
AFUP Supélec Mars 2009
19. Manières d'utiliser PHP
CLI
●
Pas mal d'administrateurs l'utilisent
–
Encore loin derrière Perl ou Python mais...
●
Présent dans certaines box, certains décodeurs TV
●
Syntaxe proche du C agréable pour les admins
–
19
AFUP Supélec Mars 2009
20. Manières d'utiliser PHP
PHP peut s'utiliser avec un serveur Web en CGI ou
●
Fast-CGI
Interface normalisé (Common Gateway Interface)
–
Ancêtre du Web Dynamique
–
Ancêtre de PHP, qui a la base était une toute petite
●
bibliothèque chargée en CGI
Problématique de performance
–
20
AFUP Supélec Mars 2009
21. Manières d'utiliser PHP
Module de serveur
●
Module de serveur écrit en C
–
Très performant
–
L'utilisation majeure de PHP, 90%
–
21
AFUP Supélec Mars 2009
23. Le Web client serveur
Clients Serveur
23
AFUP Supélec Mars 2009
24. Fonctionnement global
PHP tourne en tant que module Apache
●
Historiquement Apache est très utilisé pour PHP
–
Apache reçoit une requête demandant du PHP
–
Il la passe à PHP qui est alors exécuté sur le serveur
–
Le résultat de cette exécution produit une sortie
–
En général en HTML
●
Cette sortie est envoyée par Apache au client
–
Une page s'affiche
–
24
AFUP Supélec Mars 2009
25. Le serveur
PHP tourne donc (très majoritairement) sur un
●
serveur Web
La renommée de PHP vient du fait qu'il supporte
●
énormément de serveurs Web
PHP est présent partout
●
Apache (historiquement le plus utilisé)
–
Caudium
–
Lighttpd
–
Iplanet / Netscape (Sun)
–
IIS
–
25
AFUP Supélec Mars 2009
26. La plateforme
PHP tourne sous beaucoup de plateformes
●
GNU/Linux (le plus utilisé, le plus performant)
–
Unix (BSD Familly)
–
Mac OS
–
Windows
–
Solaris
–
HP-Ux
–
Même si ce n'est pas parfait, PHP abstrait
●
beaucoup la couche OS sous laquelle il tourne
PHP se comporte sensiblement de la même manière
–
quelque soit le système sur lequel il tourne
De gros efforts sont sans arrêt fournis dans ce but
●
26
AFUP Supélec Mars 2009
27. Un langage proche du C
PHP est le C du Web
●
Sans la gestion de la mémoire
–
Sans typage fort
–
Sans tous les aspects quot;chiantsquot; du C
–
Un simple éditeur de texte suffit pour taper du PHP
●
Un quot;simplequot; serveur Web suffit pour rendre une
●
page totalement quot;dynamiquequot;
27
AFUP Supélec Mars 2009
28. Un langage très riche
Le potentiel de PHP est vraiment inimaginable
●
C'est ce qui en fait un langage pas si facile que ça après
–
tout
PHP sait jouer avec XML
●
PHP sait créer des processus (fork et signaux
●
POSIX)
PHP peut s'interfacer avec tout programme
●
possédant des entrée/sortie
PHP peut communiquer via des sockets quelque
●
soit le protocole
PHP peut ouvrir des fichiers et lancer des tâches
●
externes
28
AFUP Supélec Mars 2009
29. Un langage très riche
PHP peut interagir avec la plupart des SGBD
●
MySQL
–
PostgreSQL
–
Ingres
–
SQLServer
–
IBM / DB2
–
Oracle
–
29
AFUP Supélec Mars 2009
30. Les autres langages
PHP est massivement adopté car
●
Sa syntaxe est proche du C
–
Sa syntaxe est très permissive
–
Langage de script
●
On ne s'embête pas 20h avant d'avoir du concrêt
●
On ne s'occupe pas de la mémoire
●
On ne s'occupe pas du typage
●
Il est très performant
–
Pour un langage de script
●
Il est massivement supporté par les serveurs
–
PHP est présent partout car Apache est présent partout
●
30
AFUP Supélec Mars 2009
31. Les autres langages
PHP cohabite bien avec ses quot;concurrentsquot;
●
Java
–
Python
–
Ruby (On Rail?)
–
Perl
–
Tous ces langages sont plus difficiles à utiliser pour
●
le néophyte
Ce qui ne signifie pas que PHP n'est pas capable de se
–
comporter en quot;PROquot;
Il suffit de le vouloir : il est capable
●
PHP peut communiquer avec ces autres langages
●
31
AFUP Supélec Mars 2009
32. PHP et les autres
langages
PHP est le seul langage qui a été conçu avec
●
comme point de départ le Web (1995)
Il est issu de la fusion de bibliothèques Web anarchiques
–
à l'époque
Il est un peu le pionnier du développement Web
–
PHP est tourné vers le Web
●
Même s'il sait faire autre chose
–
PHP évolue avec le Web
●
PHP évolue pour le Web
●
Et cela ne changera jamais
–
32
AFUP Supélec Mars 2009
33. exemples
PHP-GTK
●
<?php
class Php_Gtk_Twitter_Client extends GtkWindow {
public function __construct() {
parent::__construct();
$this->set_icon($this->render_icon(
Gtk::STOCK_ABOUT, Gtk::ICON_SIZE_DIALOG));
$this->set_size_request(300, 500);
$this->set_title('PHP-GTK Twitter Client');
$this->connect_simple('destroy', array('Gtk',
'main_quit'));
}
}
$window = new Php_Gtk_Twitter_Client;
$window->show_all();
Gtk::main();
33
AFUP Supélec Mars 2009
34. exemples
Indexation avec Java-Lucène (Zend Framework)
●
<?php
// Open existing index
$index = Zend_Search_Lucene::open('/data/my-index');
$doc = new Zend_Search_Lucene_Document();
// Store document URL to identify it in search result.
$doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
// Index document content
$doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
$docContent));
// Add document to the index.
$index->addDocument($doc);
HTML document:
<?php
$doc = Zend_Search_Lucene_Document_Html::loadHTMLFile($filename);
$index->addDocument($doc);
?>
34
AFUP Supélec Mars 2009
35. exemples
Tests unitaires (PHPUnit)
●
class AscenseurTest extends PHPUnit_Framework_TestCase
{
public function testAscenseurMonteAvecDesPersonnes ()
{
$p = $this->getMock('Personne',array('getEtage','setEtage'),array('julien2'));
$p->expects($this->once())->method('getEtage')->will($this->returnValue(3));
$p->expects($this->once())->method('setEtage')->with($this->equalTo(8));
$this->ascenseur->charger($this->personne);
$this->ascenseur->charger($p);
$this->ascenseur->go(8);
$this->assertEquals(8, $this->ascenseur->getPersonne($this->personne)->getEtage());
}
}
35
AFUP Supélec Mars 2009
39. exemples
Lecture d'un flux RSS
●
<?php
try{
if(!@$fluxrss=simplexml_load_file('http://www.lemonde.fr/rss/sequence/0,2-651865,1-0,0.xml')){
throw new Exception('Flux introuvable');
}
echo '<h3>'.(string)$fluxrss->channel->title.'</h3>
<p>'.(string)$fluxrss->channel->description.'</p>';
echo '<ul>';
foreach($fluxrss->channel->item as $item){
echo '<li><a href=quot;'.(string)$item->link.'quot;>'.(string)$item->title.'</a> <i>publié le'.
(string)date('d/m/Y à Ghi',strtotime($item->pubDate)).'</i></li>';
if(++$i>=$nb_affichage)
break;
}
echo '</ul>';
}
catch(Exception $e){
echo $e->getMessage();
}
39
AFUP Supélec Mars 2009
40. exemples
Enregistrement d'un service Windows
●
<?php
$ret = win32_create_service(array(
‘service’ => ‘PHPSvc’,
‘display’ => ‘PHP Test Service’,
‘path’ => ‘C:PHPphp.exe’,
‘params’ => ‘C:WindowsSystem32PHPSvc.php run’));
if ($ret === true) {
echo «PHPSvc a été enregistré comme service.n»;
} else {
echo «Echec de l’enregistrement de PHPSvc. Erreur : {$ret}n»;
}
?>
40
AFUP Supélec Mars 2009
41. exemples
Lecture d'un fichier ogg Vorbis
●
$fp = fopen('ogg://monaudio.ogg', 'r');
/* Collecte quelques informations sur le fichier. */
$metadata = stream_get_meta_data($fp);
/* Inspection de la première chanson (habituellement la seule chanson
mais les fichiers OGG/Vorbis peuvent être chaînés) */
$songdata = $metadata['wrapper_data'][0];
echo quot;Fichier OGG/Vorbis encodé par : {$songdata['vendor']}n.quot;;
echo quot; {$songdata['channels']} canaux de {$songdata['rate']}Hz encodé à
{$songdata['bitrate_nominal']}bps.nquot;;
foreach($songdata['comments'] as $comment) {
echo quot; $commentnquot;;
}
while ($audio_data = fread($fp, 8192)) {
/* Faire quelque chose avec l'audio PCM extrait depuis le OGG.
Copier vers /dev/dsp est une bonne chose sur les systèmes linux,
souvenez-vous juste de définir le périphérique pour votre mode d'échantillonage d'abord. */
}
fclose($fp);
41
AFUP Supélec Mars 2009
42. exemples
Dialogue avec un serveur Steam
●
define('PACKET_SIZE', '1400');
define('SERVERQUERY_INFO', quot;xFFxFFxFFxFFTSource Engine Queryquot;);
define ('REPLY_INFO', quot;x49quot;);
// Ip address and port
$_ip = '82.149.249.243';
$_port = '27017';
// Open connection with server
$socket = stream_socket_client('udp://'.$_ip.':'.$_port, $errno, $errstr, 30);
// Send command to server
$cmd = SERVERQUERY_INFO;
$length = strlen($cmd);
fwrite($socket, $cmd, $length);
// Get response from server
$response = fread($socket, PACKET_SIZE);
// Clean response
$pattern = quot;#xFFxFFxFFxFFquot;.REPLY_INFO.quot;#quot;;
$response = preg_replace($pattern, '', $response);
42
AFUP Supélec Mars 2009