Portée des fonctions

17 juin 2010

La dernière fois, je me posais la question de savoir comment Symfony faisait pour proposer dans ses vues des fonctions telles que __() (les helpers) puisque je pensais que la seule solution de rendre une fonction utilisateur locale à une méthode de classe était de la déclarer directement dans la méthode et que je n’ai trouvé aucun moyen de transmettre cette fonction à cette méthode (comme cela se passe pour les variables). Et pour cause, on n’en n’a pas besoin!

Lire le reste de cet article »

Les composants de Doctrine – Le composant Table

14 juin 2010

Maintenant que nous avons initialisé Doctrine (vois l’article sur l’introduction à Doctrine), nous allons pouvoir commencer à l’utiliser.

Comme nous l’avons dit, avec Doctrine tout est objet. Nous aurons donc accès à des classes qui vont nous permettre de travailler les données. On appelle ça des composants. Doctrine fournit plusieurs composants. En voici trois essentiels :

  • Le composant Record qui représente un enregistrement d’une table
  • Le composant Collection qui représente un ensemble de Record
  • Le composant Table qui représente notre table et nous permettra d’accéder aux composants Collection et Record

Dans cet article nous allons étudier le composant Table.  Il permet comme son nom l’indique d’accéder à une table de notre base de données et d’interagir avec elle. Pour cela il nous faut une instance de la classe représentant notre table :

1
2
3
<?php
require_once('bootstrap.php');
$table = Doctrine_Core::getTable('Produits');

Lire le reste de cet article »

Installation de APC sous Debian

7 juin 2010

APC est un cache d’OPCodes pour PHP. Il permet de mettre en cache au niveau serveur le code de PHP précompilé afin de ne pas refaire ce traitement.

Vous trouverez plus d’informations dans l’article de Julien Pauli sur developpez.com.

Ici il s’agit de voir comment l’installer sous Debian. Très facile finalement, il existe un paquet pour ça:

> apt-get install php-apc

Il faudra bien sûr redémarrer Apache.

Le fichier permettant le monitoring du cache est situé dans /usr/share/doc/php-apc et s’appelle apc.php.gz. Il faudra donc le décompresser:

> gzip -d apc-php.gz

Il vous suffit de déplacer ce fichier où bon vous semble.

A noter que le fichier de config d’APC se situe dans:

/etc/php5/conf.d/apc.ini

Introduction à Doctrine

12 janvier 2010

Cette année je suis passé à Doctrine. Les raisons étaient diverses:

  • Il était temps pour moi de laisser tomber la vieille extension mysql de PHP et de passer à de l’objet.
  • Trouver un système qui s’intègre facilement dans un modèle MVC
  • Pouvoir faire de l’abstraction de base de données
  • Idéalement un système qui va me faire gagner du temps dans mes développements.

Après avoir regardé plusieurs solutions, je me suis donc tourné vers Doctrine:

  • Il s’interface avec PDO, donc abstraction de base de données
  • Les performances semblent au rendez-vous
  • Il génère automatiquement le modèle du MVC
  • Support des fonctionnalités récentes de MySQL
  • Utilisé par défaut dans Symfony
  • Tout est objet

Bref je me suis dis que c’était le top. Et c’est vrai que quand on le maîtrise c’est vraiment sympa. Sauf que la transition s’est quand même un peu faite dans la douleur. La doc est présente mais dans certains cas j’ai quand même perdu pas mal de temps à chercher des solutions à mes problèmes. Je me suis donc dit qu’il était peut-être possible d’apporter quelques compléments d’information.

Lire le reste de cet article »

Dépendances et exceptions

9 janvier 2010

A l’heure où j’entends beaucoup parler d’objet, de framework, de dépendance faible, d’injection de dépendance etc. je me suis posé une question. Admettons que dans mon petit framework sans prétention j’ai envie que mes modules soient complètement indépendants, c’est-à-dire que je puisse les prendre un à un et les utiliser avec un projet complètement différent, hors framework. Zend Framework fait cela. Cependant je me suis demandé comment gérer des exceptions personnalisées dans ce cas ?

En effet, dans mon framework, j’ai créé une classe d’exception qui hérite de Exception et qui rajoute des fonctionnalités comme par exemple une méthode permettant d’afficher le message d’erreur bien formaté en HTML avec un fond rouge et presque un gyrophare sur le dessus. Oui mais voilà, quand dans un de mes modules j’ai besoin d’utiliser une exception et que j’ai à afficher le message en utilisant une méthode personnalisée de mon exception, cela casse complètement l’indépendance de mon module. Je ne peux plus le sortir de son contexte car il dépend désormais de la classe d’exception de mon framework ce qui est contraire à ce que je veux.

Lire le reste de cet article »

Transfert de fichiers via SSH

18 août 2009

Dernièrement j’ai eu à migrer le site d’un client d’un serveur dédié à un autre.

Au lieu de faire un backup des données sur ma machine puis les renvoyer sur le nouveau serveur, j’ai décidé de faire directement un transfert de serveur à serveur via SSH. C’est nettement plus rapide car on bénéficie de la bande passante du serveur.

Lire le reste de cet article »

IE7 et z-index

12 août 2009

Internet Explorer 7 possède un bug bien particulier qui lui est propre au niveau des z-index. En tous les cas je ne l’ai pas retrouvé ni sur IE6 (pour une fois) ni sur IE8.

Ce bug m’est apparu lorsque j’ai créé un menu déroulant en CSS / jQuery impliquant des listes positionnées en relative et absolute et que dans le contenu situé sous le menu j’ai un ou plusieurs éléments positionnés également en relative ou absolute. Dans ce cas j’avais le menu déroulant qui passait sous les éléments du contenu. Problème de z-index semble-t-il. Pourtant malgré le fait de bien paramétrer des z-index sur les éléments du menu et les éléments du contenu, rien à faire, le menu déroulant reste derrière. Grossièrement, le code a cette structure:

<div id="header">
    <div id="div_menu">
        <ul id="menu">
            <li><a href="#">Lien 1</a>
                <ul class="sousmenu">
                    <li><a href="#">Sous-menu</a></li>
                    <li><a href="#">Sous-menu</a></li>
                    <li><a href="#">Sous-menu</a></li>
                </ul>
            </li>
        </ul>
    </div>
</div>
<div id="contenu">
    <div id="element_en_absolu">Le sous menu passe derrière !</div>
</div>

Tous mes z-index avaient été placés sur les éléments #div_menu, #menu, #menu li etc.. ainsi que sur #element_en_absolu.

Finalement j’ai trouvé la solution sur ce blog. J’ai résolu le problème en définissant un z-index le plus élevé sur #header. Ce qui veut dire qu’il faut donc définir un z-index qui soit le plus élevé que tous les autre sur le ou les parents du menu.

Rediriger le traffic HTTP d’un serveur à un autre avec Apache

4 août 2009

Un site est sur un serveur dédié A. Vous voulez le migrer sur un serveur dédié B. La migration des fichiers et de la base de données éventuelle ne pose pas spécialement de problème. Ce qui est plus délicat, c’est lorsque vous allez modifier les pointages DNS du nom de domaine : en effet, le temps de la propagation, certains visiteurs vont rapidement arriver sur le serveur dédié B alors que d’autres vont rester bloqués sur le serveur A pendant 24 à 48h. Si dans le cadre d’un site statique cela ne pose aucun souci, c’est plus problématique dans le cas d’un site dynamique car cela peut engendrer une désynchronisation de la base de données entre les deux serveurs et conduire à des pertes de données.

L’idéal serait que le serveur A puisse rediriger les visiteurs sur le serveur B le temps de la propagation des DNS. Apache va nous y aider.

Lire le reste de cet article »

Configuration d’un serveur dédié chez OVH

15 juillet 2009

Ça faisait un moment que je n’avais pas eu à configurer un serveur dédié pour de la production. L’occasion d’en faire un petit article, le but étant de faire un serveur très basique, sans gestion de boîte mails, sans LDAP, sans chroot, etc. Juste une base LAMP.

Ce serveur dédié a été choisi chez OVH. J’ai bien sûr demandé une Debian nue mais ça n’a pas vraiment été le cas. En fait, OVH livre une distribution Debian avec un noyau personnalisé et plusieurs outils installés par défaut. Suite à une mésaventure lors du passage de Etch à Lenny sur un de mes dédiés, j’ai décidé de ne plus laisser le noyau d’OVH mais d’installer un noyau standard. Si cette manipulation vous intéresse, voyez ce billet. Sinon ce qui suit fonctionne quand même parfaitement.

Lire le reste de cet article »

Changer le noyau d’une Debian OVH

3 juillet 2009

Malgré le fait de demander une Debian nue à l’installation de mon serveur dédié, OVH m’a mis une distrib qui semble un peu modifiée par eux, notamment au niveau du noyau. Le noyau que j’ai au départ a un nom tout bizarre genre bzImage-2.6.27.10-xxxx-grs-ipv4-64.

En fait c’est un noyau préparé par OVH qui contient les derniers patchs de sécurité et qui permet de se passer de modules externes car ils sont embarqués. Problème: quand j’ai voulu upgrader ma distrib de Etch à Lenny, j’ai eu énormément d’ennuis et j’ai dû faire appel à un ami spécialiste pour me dépatouiller.

Le premier problème a été Lilo: il a commencé à me mettre des warnings pendant la mise à jour. Comme je n’étais pas sûr des conséquences que cela aurait au reboot et vu que Lilo commence sérieusement à dater, on a décidé de mettre Grub, et là tout est parti en vrille, ce qui n’aurait pas été le cas si j’avais eu un noyau standard… En effet d’une part Grub se base sur le nom d’un noyau standard pour s’installer, ce qui n’était pas le cas. La config de grub ne n’est donc pas faite correctement. On s’est donc dit que dans ce cas, on allait donner à Grub ce qu’il voulait, c’est à dire un noyau standard. Sauf que la il va aussi falloir gérer les modules à la main. En plus de cela le serveur était en raid1 logiciel, ce qui nécessite une maipulation supplémentaire avec Grub.

On va donc essayer à travers cet article de remettre la distribution droite dès le départ étant donné que le serveur dédié sur lequel je refais cette expérience est neuf.

Lire le reste de cet article »