Apache, Développement Web, PHP

Accélerer et optimiser son intallation PHP avec eAccelerator

Posté par seiyar81 le 12 février 2010 | Laisser un commentaire (0)

Quand on doit gérer un serveur Web, on doit s’occuper avant tout de la sécurité de l’installation, de sa stabilité, etc mais il ne faut pas pour autant négliger les performances. Car oui l’utilisateur final ne se préoccupe pas vraiment de savoir si le serveur risque de tomber à la moindre attaque, et si l’application est trop longue à répondre il ira voir ailleurs s’il peut ou alors va commencer à s’énerver.

J’ai déjà présenté quelques modules pour accélérer Apache, mais aujourd’hui je vais expliquer comment installer très simplement un système de cache d’opcode : eAccelerator.
Avant cela quelques explications.

Qu’est-ce que l’opcode ?

Comme vous le savez tous sûrement, PHP n’est pas un langage compilé, mais interprété. C’est à dire qu’à chaque exécution le code est parcouru puis PHP génère ce qu’on appelle l’opcode qui est en réalité un code compréhensible par la machine qui pourra donc l’exécuter.
Ce processus peut très vite devenir lourd pour la machine dès lors que l’application fait face à un nombre important de clients et les temps de réponses n’en sont que plus long.

Quelles solutions ?

C’est pourquoi on va s’intéresser aux systèmes de cache d’opcode. Ces derniers améliore grandement les performances de PHP en plaçant dans un système de cache ces fameux opcodes.
Il existe plusieurs solutions dont voici une courte liste (non exhaustive) :

  • IonCube: http://www.ioncube.com/sa_encoder.php
  • Zend Platform: http://www.zend.com/en/products/platform/
  • XCache: http://xcache.lighttpd.net/
  • APC: http://pecl.php.net/packages/APC
  • EAccelerator: http://www.eaccelerator.net/

Nous nous intéresserons ici à eAccelerator.
Attention toutefois, eAccelerator ne fonctionne pas si PHP est CGI, il est seulement utilisable avec mod_php ou PHP en FastCGI.

On commence par récupérer la dernière version :

cd /usr/src
wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
tar -xf eaccelerator-0.9.6.tar.bz2
cd eaccelerator-0.9.6

Ensuite il nous faut compiler les sources, donc dans le dossier entrez les commandes suivantes :

phpize
./configure
make

Si le programme phpize n’est pas trouvé, il faut le télécharger :

sudo apt-get install php5-dev

Si tout s’est bien passé, on lance l’installation :

make install

Il nous faut maintenant configurer PHP pour qu’il charge l’extension, on modifie donc le fichier /etc/php5/conf.d/eaccelerator.ini :

zend_extension="/usr/lib/php4/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Enfin on créé le dossier dans lequel eAccelerator va stocker son cache :

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator

Enfin on vérifie que tout fonctionne bien :

/etc/init.d/apache2 reload
php5 -v
...
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with eAccelerator v0.9.6, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
...

Et voilà votre installation de PHP est maintenant plus rapide et plus stable.
J’expliquerais prochainement comment mettre en place très simplement un reverse proxy afin de soulager le serveur Web.

Catégorie: Apache, Développement Web, PHP | Laisser un commentaire (0)

Zend Framework : Détails de la version 1.10.0

Posté par seiyar81 le 3 février 2010 | Laisser un commentaire (0)

Sortie depuis quelques jours la toute dernière version du framework apporte son lot de nouveautés. Ainsi la documentation a été réorganisée de façon a être plus accessible et plus claire, avec un « Quick Start« , une section « Reference Guide » qui permet de découvrir le framework et d’apprendre à programmer avec.

De plus la documentation est maintenant propulsée par le même moteur que Php.net : PhD. Le rendu de la documentation est ainsi simplifié pour les différentes versions du framework.
La page de téléchargement a également été revue est propose maintenant directement le téléchargement de différent packages : Zend Framewrok + Zend Server CE, Zend Framework Complet, Zend Framework Minimal, Documentation etc.

Enfin pour ce qui est des nouveautés on notera :

  • Zend_Barcode : création de code barre
  • Zend_Cache_Manager : gestion avancée du cache
  • Zend_Feed_Writer : génération de flux RSS et Atom
  • Zend_Oauth : authentification avec Oauth
  • Nouveaux Zend_Service : Zend_Service_LiveDocx, Zend_Service_WindowsAzure, Zend_Service_DeveloperGarden
  • Zend_Markup : faciliter l’intégration et l’édition de langages types BBCode et Textile
  • Plusieurs améliorations sur diverses classes et sur le Zend_Tool

Aller, direction la page de téléchargement !

Catégorie: Développement Web, PHP, Zend Framework | Laisser un commentaire (0)

Zend Framework : Authentification avec Zend_Auth_Adapter_DbTable

Posté par seiyar81 le 27 janvier 2010 | Laisser un commentaire (12)

Aujourd’hui je vais expliquer comment réaliser simplement avec le Zend Framework une authentification avec la classe Zend_Auth_Adapter_DbTable.

Cette classe va grandement nous simplifier la vie puisqu’elle va comparer pour nous le couple username/password dans une table dont on lui fournira les champs.
Autrement dit, plus besoin de s’embêter à sélectionner et comparer les valeurs à la main.

Pour commencer nous allons créer notre model pour la table qui stocke nos utilisateurs. Imaginons qu’elle s’appelle ‘users‘.

<?php 

class Default_Model_DbTable_Users extends Zend_Db_Table
{
    protected $_name = 'users';

}

La classe est ici déclarée sans autres méthodes pour l’exemple mis vous pouvez très bien en ajouter. De plus j’ai nommé ma classe de telle sorte qu’elle est déclarée dans le fichier : ‘application/models/DbTable/Users.php‘. Libre à vous de faire autrement.

Ensuite vous pouvez créer un formulaire en héritant la classe Zend_Form :

<?php

class Default_Form_Login extends Zend_Form
{
    public function __construct($options = null)
    {
        parent::__construct($options);
        $this->setName('login_form');
        $this->setAction('/auth/login')
     	->setMethod('post');

        $login = new Zend_Form_Element_Text('login');
        $login->setLabel('Login : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');

        $password = new Zend_Form_Element_Password('password');
        $password->setLabel('Mot de passe : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');

        $submit = new Zend_Form_Element_Submit('Login');
        $submit->setAttrib('id', 'submitbutton');
        $submit->setValue('Login');

        $this->addElements(array($login, $password, $submit));
    }
}

De même, j’ai ici fait au plus simple. La classe est déclarée dans le fichier ‘application/forms/Login.php‘.
Il ne vous reste plus qu’a déclarer le formulaire dans le contrôleur gérant l’authentification. Par exemple :

<?php

class AuthController extends Zend_Controller_Action
{

    public function init()
    {
        $this->initView();
	$this->view->baseUrl = $this->_request->getBaseUrl();
    }

    public function loginAction()
    {
    	$this->view->title="Mon Site Web - Login";
        $form =  new Default_Form_Login();
        $this->view->form = $form;
    }

}

On affiche le formulaire dans notre fichier vue :


<?php
    echo $this->form;
    echo '<br />';
    echo $this->error;
?>

Voilà tout est en place pour nous permettre maintenant d’utiliser Zend_Auth_Adapter_DbTable.
On va donc ajouter dans l’action login de notre contrôleur :


    public function loginAction()
    {
        // Si l'utilisateur est déjà loggué on le redirige à l'accueil
    	if(Zend_Auth::getInstance()->hasIdentity()) $this->_redirect('/index');

    	$this->view->title="Mon Site Web - Login";

		$form = new Default_Form_Login();
		$this->view->form = $form;
                $formData = $_POST;

		if($this->getRequest()->isPost()) {
	            if ($form->isValid($formData)) {
					$f = new Zend_Filter_StripTags();
					$username = $f->filter($form->getValue('login'));
					$password = $f->filter($form->getValue('password'));

					$dbAdapter = Zend_Db_Table_Abstract::getDefaultAdapter();
					$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
					$authAdapter->setTableName('users');
					$authAdapter->setIdentityColumn('username');
					$authAdapter->setCredentialColumn('password');

					// On assigne les valeurs pour que l'authentification s'effectue
					$authAdapter->setIdentity($username);
					$authAdapter->setCredential(sha1($password)); // On a pris la précaution d'au moins chiffrer les mdp

					// On tente l'authentification
					$auth = Zend_Auth::getInstance();
					$result = $auth->authenticate($authAdapter);
                         // On test si tout s'est bien passé
	                if($result->isValid())
	                	{
	                		$data = $authAdapter->getResultRowObject(null, 'password');
					$auth->getStorage()->write($data);
					$this->_redirect('/admin');
	                	}
	                	else
	                	{
	                	$this->view->error = 'Mauvais login ou mauvais mot de passe.';
                    		$form->populate($formData);
	                	}
				    }
		    	else {
	                $this->view->error = 'Vous devez remplir tous les champs.';
                        $form->populate($formData);
		    	}
		}
    }

Et voilà ZF a automatiquement géré l’authentification pour nous. On peut maintenant accéder au données de l’utilisateur via Zend_Auth::getInstance()->getIdentity().
Ainsi si on veut afficher le nom de l’utilisateur :

<?php
     $auth = Zend_Auth::getInstance()->getIdentity();
     echo $auth->username;
?>

Et voilà, bientôt de nouveaux articles sur l’utilisation du Zend Framework.

Catégorie: Développement Web, PHP, Zend Framework | Laisser un commentaire (12)

Gears This Blog : Mise à jour 0.3

Posté par seiyar81 le 20 décembre 2009 | Laisser un commentaire (0)
news-gtb

Version 0.3 :
- Les pages sont stockées
- Le fichier manifest est reconstruit à chaque sauvegarde pour éviter les doublons
- A chaque modification/ajout d’un post/page le fichier manifest est reconstruit
- Divers corrections de bugs

A venir :
- Ajout de fichiers manuellement
- Personnalisation du CSS
- Exclure certains posts/pages
- D’autres traductions

Catégorie: Développement Web, PHP, Wordpress | Laisser un commentaire (0)

Gears This Blog : Mise à jour 0.2

Posté par seiyar81 le 7 décembre 2009 | Laisser un commentaire (0)
news-gtb

Maj 22H :
- Version 0.2 du plugin corrigeant définitivement un bug dû à WordPress (bouh :p) qui changeait le dossier du plugin.
- Le plugin peut maintenant sauvegarder les catégories et les tags

A faire :
- Correction de quelques bugs de traduction / affichage dans l’administration
- Ajout de fichiers pouvant être choisis dans l’admnistration
- Correction / Amélioration du javascript

Rien de bien excitant dans cette mise à jour si ce n’est tout de même la traduction du plugin, disponible en Anglais par défaut et avec une traduction Française.
Si certains se sentent de traduire le plugin dans d’autres langues, leur aide est plus que bienvenue^^
Car l’espagnol et l’italien ça fait un bail et l’allemand à par Ich Liebe Dich :(
Correction également de quelques bugs dans la partie admin.

Catégorie: Développement Web, PHP, Wordpress | Laisser un commentaire (0)

Gears This Blog : Stocker le contenu de votre blog hors-ligne

Posté par seiyar81 le 6 décembre 2009 | Laisser un commentaire (0)
Gears This Blog

Gears This Blog est un plugin que j’ai développé pour WordPress et qui permet aux visiteurs de stocker le contenu du blog sur leur ordinateur grâce à Google Gears.

Simple à utiliser, léger et paramétrable, il apporte une fonctionnalité inédite pour vos blogs !
Le plugin est en ‘démonstration’ sur le blog et libre à vous de le télécharger pour le tester ou l’utiliser.

Pour le téléchargement : fiche WordPress.com.

Google Gears étant amené à disparaître d’ici quelques temps au profit de la gestion de contenu hors-ligne apportée par HTML5, et à moins que cette fonction ne soit implémentée par l’équipe de WordPress, j’effectuerais un portage du plugin.

Bientôt :
- Traductions
- Ajout de fonctionnalités
- Personnalisation du CSS
- …

PS : bientôt du nouveau sur le blog …

Catégorie: Développement Web, PHP, Wordpress | Laisser un commentaire (0)

Les tutoriels officiels du Site du Zéro sous licence Creative Commons !

Posté par seiyar81 le 2 novembre 2009 | Laisser un commentaire (0)
Site du Zéro

Une nouvelle bien sympathique, les tutoriels Officiels du SiteDuZéro sont maintenant disponibles sous licence Creative Commons CC-BY-NC-SA.

C’est à dire qu’il peuvent être modifiés par n’importe qui tant que les conditions suivantes sont respectées :

  • Condition 1 : respecter le droit de paternité en signalant le nom ou pseudo de l’auteur et en créant un lien vers le site.
  • Condition 2 : ne pas faire un usage commercial des tutoriels.
  • Condition 3 : rediffuser le tutoriel sous la même licence.

Une très bonne nouvelle donc car ainsi cette base pourra être reprise pour être élargie avec des chapitres plus ciblés : sur telle ou telle librairie, sur la sécurité, sur des points particuliers etc… afin d’en faire un véritable cours complet, car il est vrai que les tutoriels posent les bases (et les posent bien d’ailleurs) mais ne vont pas plus loin.

News officielle : Les tutoriels officiels du Site du Zéro sous licence Creative Commons !.

Catégorie: Brèves, Développement Web, Internet, Linux, PHP, Qt | Laisser un commentaire (0)