Comprendre le model objet en PHP

Cette présentation explique plutôt bien le modèle objet en PHP de manière assez simple et concrète.

Ca fait jamais de mal de revoir nos bases :)

Filed under  //  Development   Howtos   Php   model   objet   online   ppt   presentation   screencast   slideshare  
Posted by Cyril Nicodème 

Tutoriels sur l'installation d'un serveur Web : Mise en place

Bien, nous allons tout d'abord préparer l'environnement, histoire d'avoir quelque chose d'accueillant ! :)

Première chose, nous allons modifier le fichier /etc/apt/sources.list, afin qu'il prenne les fichiers de la version stable, et non le nom de la version que vous avez téléchargez (lenny). Ceci afin de toujours disposer des dernières versions stables.

Pour ce faire, éditez le fichier /etc/apt/sources.list et remplacez toutes les occurences de lenny en stable ! :) C'est tout !

Ensuite, mettez à jour la liste des paquets :

apt-get update

Puis installez les éventuelles mises à jours :

apt-get upgrade && apt-get dist-upgrade

Ensuite, nous allons créer un petit fichier qui va s'avérer utile, .email. Ce fichier ne contiendra qu'un email, ne sera visible que par vous, et permettra à des services tels que cron de vous envoyer un email en cas de problème. (Bon, ca ne fonctionnera pas tout de suite puisque nous avons encore aucun serveur mail, mais pour la suite, ce sera vraiment utile !).

Voici la commande :

echo "votre_email@example.org" > .email

Ensuite, nous allons nommer correctement le serveur. Pour cela, plusieurs éléments à modifier :
/etc/hosts, rajoutez le nom de domaine sur l'ip publique :

127.0.0.1       localhost webserv
192.168.0.8     example.org

/etc/hostname, donnez lui le nom voulu :

WebServ

Ensuite, exécutez le script /etc/init.d/hostname.sh, afin de mettre à jour votre nom de serveur. Le changement sera effectué lors de la prochaine connection.

/etc/init.d/hostname.sh

Pour ceux qui auraient des problèmes d'accents dans leur console, il faut modifier le fichier .bashrc, et y ajouter cette ligne :

echo "export LANG=fr_FR.UTF-8" >> ~/.bashrc

La configuration basique est terminée !

Maintenant, prêt pour attaquer le gros du travail ? :)

Filed under  //  .email   Howtos   Scripts   Unix/Linux   apt-get   hostname   mise en place   server   serveur   sources.list   web  
Posted by Cyril Nicodème 

Tutoriels sur l'installation d'un serveur Web : Informations sur le serveur

Normallement, vous disposez d'une version de  Debian toute fraîche, prête à l'emploi.

Vous connaissez son IP, pour mon tutoriel, ce sera la 192.168.0.8, et vous avez définit votre dns afin que le nom de domaine que vous disposez pointe bien sur votre ip.

Dans mon cas, j'ai modifié mon fichier hosts :

192.168.0.8         www.example.org

Mais si vous êtes chez un hébergeur, vous pouvez très bien faire pointer les dns sur votre IP ! :)

Il faut aussi que nous donnions un nom à la machine, ce sera WebServ.

Et bien voilà ! Tout est prêt pour attaquer les configurations ! :)

Filed under  //  Howtos   Scripts   Unix/Linux   example   informations   server   web  
Posted by Cyril Nicodème 

Tutoriels sur l'installation d'un serveur Web : Installation et pré configuration

Tout d'abord, installez un logiciel d'émulation type VMWare ou VirtualBox.
Je recommande personnellement VirtualBox, qui est libre.

Téléchargez la version vous concernant, installez là et, probablement, redémarrez.

Ensuite, rendez-vous sur le site de Debian, afin de récuperer la toute dernière version, notre petite Lenny : http://www.debian.org/distrib/.
Comme à l'accoutumé, téléchargez la version vous concernant.

Pour ma part, j'ai opté pour la version NetInst, petit iso de 180Mo qui contient l'essentiel, le reste étant mis à jour une fois l'installation terminée. C'est la version la plus propre d'après moi.

Ensuite, il va falloir définir le réseau de votre environnement émulé.
Deux options s'offrent à vous :

  • En tant que Bridge, histoire qu'il soit considéré comme une autre machine à part entière sur le réseau.
  • Ou en tant que "Host Only", si vous souhaitez que le serveur ne puisse communiquer qu'avec votre machine.

Comme cela dépends de votre choix, de votre émulateur et de votre OS, je ne vais pas faire un détail ici ! Vous êtes suffisamment grand pour trouver la porte d'entrée de Google :)

Afin que notre machine soit reconnue comme un serveur ayant une url (en supposant que l'on dispose d'un nom de domaine), on va modifier le fichier hosts, afin de pointer l'ip du serveur sur un faux nom. Nous utiliserons le nom de domaine http://www.example.org.

Vous trouverez le fichier hosts :

  • Windows : C:\Windows\System32\Drivers\etc\hosts
  • Linux : /etc/hosts

Ceci est pour la plupart des distribs, si vous ne le trouvez pas à l'adresse indiquée, googlez :p

Ensuite, créez votre environnement virtualisé, en choisissant le mode (Bridge/Host-Only) et démarrez l'installation.

L'installation en elle-même n'est pas très compliquée, c'est pour cela qu'elle ne sera pas détaillée ici :) Je vous conseil juste de n'installer que le système standard (une invite vous proposera d'installer, avec, divers serveurs, environnement de bureau, etc. Ne prennez que "Système  Standard").

L'installation est terminée ! :) Maintenant, nous allons définir l'ip en statique, histoire de ne pas avoir de mauvaise surprise :p

Editez le fichier /etc/network/interfaces avec votre éditeur préféré (vi, vim, nano, ...), et mettez ceci :

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

#eth0 is enabled during initrd
auto eth0:0
iface eth0:0 inet static
        address xxx.xxx.xxx.xxx
        netmask 255.255.255.0

Ou xxx.xxx.xxx.xxx sera l'ip que vous aurez définit (à vous d'adapter le netmask ensuite). Nous récapitulerons toutes ces informations dans le prochain article.

Et bien voilà ! Votre nouvelle Debian est prête à subir des attaques d'apt !

Le prochain article récapitulera les différentes informations nécéssaires, qui seront récapitulées au début de chaque tutoriels.

Si vous avez des questions/conseils, n'hésitez pas !

Filed under  //  Debian   Howtos   Scripts   Unix/Linux   host-only   installation   lenny   pré configuration   server   virtualbox   vmware   web  
Posted by Cyril Nicodème 

Multi-Threading en PHP5

L'article rédigé par Martin Roest nous montre à quel point il peut-être facile de jouer avec plusieurs processus en même temps, même en PHP.

J'ai personnellement été très séduit par la simplicité, mais je trouve que l'on pouvais encore faire plus simple : une petite classe :)

L'utilité d'un tel code se trouve sur des scripts de traitement, tel qu'un remaniement de base de donnée, une modifications sur plusieurs fichiers, etc. Par contre, il est important de savoir que la gestion des processus tel qu'il est utilisé ici ne fonctionne pas sous Windows, et qu'il n'est pas conseillé d'appeler ce script depuis un environnement type Apache.

En gros et pour faire simple, ce type de script s'utilise en ligne de commande (php-cli) et dans un environnement Unix, type cron.

Pour vous prouver l'efficacité de mes dires, voici un code bateau qui utilise 5 processus simultanés pour exécuter un script :

<?php
require_once ('ProcessManager.php');

function doBigWork ($iWork) {
        echo 'Sleeping for Work N° '.$iWork."\n";
        sleep (20);
}

try {
        // We instanciate the ProcessManager with 5 childs
        $oPM = new ProcessManager (5);
}
catch (Exception $oE) {
        die ('Your configuration does not support "pcntl" methods.');
}

for ($i = 0; $i &:t; 12; $i++) {
        // It could happen that the script couldn't fork a process. In that case, an Exception would be raised
        try {
                $oPM->fork ('doBigWork', array ($i));
        }
        catch (Exception $oE) {
                echo 'Using non forked way :'."\n";
                doBigWork ($i);
        }
}
?>

Au final, sans utiliser plusieurs processus, ce code aurait pris 12*20 = 240 secondes. Avec 5 enfants, le temps de travail est divisé par ... 5, soit 48 secondes ! Quand même !

Bien entendu, vous pouvez augmenter le nombre d'enfant, tout dépendra des ressources que consomment votre fonction de travail (histoire de ne pas tuer votre machine (je l'ai fait pendant les tests :p)).

Une dernière modification qui serait sympathique, c'est d'inclure les fonctions lambdas dans la méthode fork, au lieu de l'appel à une méthode en utilisant le call_user_func_array. Mais ma configuration actuelle de Php n'est pas encore en 5.3, donc je ne peux ni jouer avec les closures, ni avec les fonctions lambdas :p Peut-être plus tard ? :)

Voici la classe à proprement parler :

Read the rest of this post »

Filed under  //  Development   Howtos   Php   cli   command   fork   line   multi   pcntl   pid   processus   script   thread  
Posted by Cyril Nicodème 

Les fonctions mysql_* sont à considérer comme obsolètes !

On voit encore beaucoup de fonctions mysql_* traîner sur les applications web car les développeurs ont toujours connu cette pratique, surtout ceux qui ont démarré PHP à l'ère de PHP 3 et PHP 4. Néanmoins, ces fonctions sont aujourd'hui beaucoup trop limitantes car elles ne permettent pas de profiter des spécificités d'un environnement MySQL 5 à savoir :

  • Les transactions,
  • Les triggers,
  • Les requêtes préparées,
  • Les procédures stockées...

C'est pour ces raisons que l'extension MySQLi est apparue en PHP 5 pour venir petit à petit essayer de supplanter l'extension MySQL classique. Ainsi en utilisant l'extension MySQLi, le développeur peut jouir des mêmes fonctionnalités qu'avec MySQL ainsi que des nouveautés propres à MySQL 5 avec des performances légèrement meilleures.

Quant à PDO, il est vrai que cette extension est légèrement moins performante en terme de vélocité du fait notamment de la POO mais a le mérite d'être beaucoup plus performante en terme de fonctionnalités offertes (support des transactions, procédures stockées, triggers, requêtes préparées...) et d'indépendance. Avec PDO, on dépend beaucoup moins de son SGBDR contrairement aux fonctions propres à MySQL. Dans le cadre d'une application de forum open-source, c'est un réel avantage de pouvoir offrir aux utilisateurs un support de l'application sur plusieurs SGBDR. Grâce à PDO, la difficulté de cette tâche est largement réduite puisqu'il n'est pas nécessaire d'avoir à écrire soi même les connecteurs pour chaque base. Il suffit juste d'adapter les requêtes SQL. Il est bon de noter qu'en PHP, seul PDO est capable de se connecter à une base de type SQLite 3 par exemple.

Je tiens à préciser également qu'une version 2 de PDO est en cours de réécriture et devrait paraître avec PHP 6 si je ne me trompe pas (à vérifier). Toujours est-il que c'est un chantier en cours du côté de l'équipe de développement de PHP. Le succès de PDO grandit de jour en jour, notamment grâce aux frameworks. Il suffit par exemple de constater combien d'applications d'ORM intégrées aux frameworks PHP 5 actuels s'appuient sur PDO. C'est le cas par exemple de Propel 1.3 et Doctrine 0.9 intégrés à Symfony ou bien encore le composant Zend_Db du framework Zend. C'est notamment grâce aux différents feedbacks des développeurs concernant les performances et la potentielle lourdeur de PDO que l'équipe de développement a ouvert un chantier pour améliorer tout ça dans les mois à venir.

Enfin, je rappelle que la nouvelle extension native MySQLnd, dédiée à MySQL, sera packagée avec PHP 5.3 au moment de sa sortie en version bêta dans le courant du mois d'août et en version stable à l'automne. Donc entre MySQL, MySQLi, PDO, MySQLnd et PDO 2, le choix des connecteurs pour MySQL est large et on peut affirmer aujourd'hui que le driver simple MySQL est obsolète. D'autant plus que PHP 4 ne sera plus supporté à partir du 08 août prochain et MySQL est à l'origine une extension PHP 4 destinée à interagir avec des bases de données MySQL 4. Elle a rendu de très bons services aux développeurs jusqu'à maintenant et je pense que ça continuera encore malgré tout, mais il est temps de montrer aux développeurs d'aujourd'hui qu'il existe des solutions plus fiables, plus "performantes", plus pratiques, plus fonctionnelles et plus pérennes. :)

Commentaire de Hugo HAMON (Webdeb) sur le site de phpcs.com

Filed under  //  Development   Howtos   Php   database   mysql   obsolete   pdo   sgbd   sqlite  
Posted by Cyril Nicodème 

Installer Eclipse avec le plugin PHP (pdt) : Subclipse

Encore une nouvelle astuce pour installer un plugin essentiel dans la programmation, j'ai nommé Subversion.

Subversion (svn) est considéré comme étant meilleur que CVS, c'est pourquoi je parlerai de l'installation de Svn et non Cvs.

Comme d'hab, c'est tout simple, dans Eclipse, Help, Software Update, Find And Install. Cliquez sur New Remote Site et mettez :
http://subclipse.tigris.org/update_1.2.x

et voila, vous pouvez maintenant faire un nouveau projet en choisissant "Checkout Project From SVN" si le projet existe déjà et hop ! l'affaire est dans le sac :)

Pour mettre à jour le projet depuis le serveur :
team > update

Et pour faire une mise à jour de vos modification vers le serveur :
team > commit

Wala ! :)

Filed under  //  Howtos   Unix/Linux   commit   cvs   eclipse   release   subversion   svn   team   tigris   update  
Posted by Cyril Nicodème 

Installer Eclipse avec le plugin PHP (pdt) : JSEclipse

Après les infos pour installer le plugin Pdt pour PHP sous Eclipse, voici l'info pour installer JSEclipse, Javascript pour Eclipse.

Comme d'hab, c'est tout simple, il suffit d'ajouter un new Remote Site, avec comme url :
http://download.macromedia.com/pub/labs/jseclipse/autoinstall/

et voila, vous avez maintenant toutes les clés en main pour bien programmer du Web sous Eclipse ! :)

Filed under  //  Howtos   Javascript   Unix/Linux   eclipse   jseclipse   remote   site  
Posted by Cyril Nicodème 

Installation de VMWare Server sur Fedora

Tout d'abord, la différence entre VMWare Server et VMWare Player est, d'apres Wikipedia :

VMware Player est une workstation allégée, qui permet d'utiliser une machine virtuelle, mais non de la créer. Cette version est utilisable gratuitement.
VMware Server est une application serveur très proche de GSX. Elle remplacera GSX à terme. Elle permet de créer et d'utiliser plusieurs machines virtuelles. Cette version est utilisable gratuitement. L'avantage de cette version, c'est la console distante. On peut ainsi prendre le contrôle de l'ensemble des machines virtuelles depuis une machine distante, ce qui n'est pas possible avec la version VMware Player.

Comment Installer VMWare Server.

Premièrement, aller sur le site de VMWare : http://register.vmware.com/content/download.html puis télécharger le .rpm
Ensuite, faites vous une clée d'enregistrement à http://register.vmware.com/content/registration.html

Une fois ceci fait, faite un simple rpm-ivh VMware.....rpm pour installer la VMWare. Ensuite, installez les composants nécéssaire pour faire tourner vmware, c'est à dire : gcc gcc-c++ kernel-devel kernel-headers xinetd

La configuration directe, en passant par vmware-config.pl risque de ne pas marcher, il faudra télécharger ce patch :
http://knihovny.cvut.cz/ftp/pub/vmware/vmware-any-any-update114.tar.gz

Et exécuter le runme.pl contenu dans ce fichier.

Voila ! VMWare est installé !

Filed under  //  Fedora   Howtos   Unix/Linux   installation   player   server   vmware  
Posted by Cyril Nicodème 

Installer Eclipse avec le plugin PHP (pdt)

Hello tout le monde !
Aujourd'hui, en astuce, comment installer eclipse avec le plugin PhP facilement

Mettre cette url dans les remotes sites pour les mises à jours :
PHP IDE : http://download.eclipse.org/tools/pdt/updates/

Ensuite, cocher toutes les cases, chercher les mises à jours, prendre
* Discovery Site > Web and J2ee Development, Web Standard Tool
Faire Select Required pour les dépendances
Et Php Ide, PDT, PDT Feature.
Next, attendre la mise à jour, Redémarrer Eclipse

Voila !! (Url en cas de besoin : http://www.thierryb.net/site/Installer-Eclipse-PHP-IDE-avec.html)

Maintenant, pour le mettre en francais :
La version actuelle d'eclipse n'à pas encore été traduite, c'est pour cela que l'on ne trouve pas de traductions.

Filed under  //  Howtos   Php   Unix/Linux   eclipse   environnement   francais   installation   pdt  
Posted by Cyril Nicodème