Apache, VirtualHost et ServerAlias

Lorsqu’on adapte la configuration d’un serveur Apache pour gérer un nouveau domaine, il faut théoriquement créer autant de VirtualHosts que ce qu’on aura de sous-domaines. Et si chaque utilisateur enregistré devait avoir son propre sous-domaine (comme sur une plate-forme de blogs, par exemple) ?
(more…)

Changer d’hébergement : la migration de sites web

Vous avez un petit serveur sur lequel vous hébergez vos sites. Ces derniers ont grandi, grandi, et il est temps de prendre un serveur plus puissant, et donc de déplacer vos scripts et vos bases de données. C’est vrai, aucune compétence poussée des shells Unix n’est obligatoire ; vous pouvez très bien tout faire avec un client FTP et phpMyAdmin (par exemple). Mais cela suppose de tout copier de la machine A (le “petit” serveur) vers votre poste de travail, puis, de là, de tout envoyer, depuis votre poste, vers la machine B. En faisant tout depuis une ligne de commande, on supprime un intermédiaire. Laissons les machines s’arranger entre elles…
(more…)

erreur 404, redirection 301: headers et codes de réponse HTTP courants

Lorsqu’on se connecte à une page Web, le client (navigateur) envoie une requête, auquel le serveur qui traite la réponse, en suivant le protocole HTTP, renvoie un code de traitement à 3 chiffres.
Ce code se situe sur la première ligne de la réponse, et est de la forme :

  1. HTTP/1.1 200 OK

. En php, la fonction php header() permet, depuis vos scripts, d’adapter le code que le serveur renvoie, afin de “forcer” le comportement du navigateur client.
Petit tour d’horizon des codes les plus répandus.
(more…)

Site multilingue: déterminer la langue du visiteur

Sur les sites qui sont disponibles en plusieurs langues, il est fréquent de trouver une page “d’accueil” comportant plusieurs drapeaux ou un quelconque moyen de choisir son langage que l’on veut voir affiché. Cette pratique, aussi mauvaise pour le référencement qu’en termes d’ergonomie, peut facilement être évitée grâce au header “Accept-Language”.
(more…)

Petit guide pour débuter avec Zend Framework: les bonnes pratiques

A l’occasion de la sortie de la version 1.6_rc1, j’ai récemment trouvé le courage de me lancer dans la découverte du Zend Framework. Le Framework Zend est une base de développement fiable, s’appuyant sur les bonnes pratiques de programmation orientée objet (POO). Le code subit des tests poussés afin de répondre aux exigences de fiabilité, de rapidité et de sécurité des applications web modernes. La force de frappe de Zend est telle que le framework intègre déjà des classes permettant de manipuler simplement la plupart des API majeures du marché, telles que celles de Google (dont Youtube), Amazon, Yahoo…
(more…)

Coder une classe d’abstraction pour manipuler des objets en PHP5

Sur chaque site, dans tous les projets, on a une base de données qui contient des tables, dont chaque ligne sont des items que l’on souhaitera manipuler à un moment où à un autre. Le code PHP à écrire pour effectuer les actions nécessaires - Ajouter des items, les modifier, les supprimer, récupérer leurs attributs… - varie peu, et pourtant ce travail est souvent répété d’un projet à l’autre. Il est possible de créer une classe générique d’abstraction, qui pourra manipuler toutes sortes d’objets de manière transparente.
(more…)

Autopsie et optimisation d’une requête SQL avec EXPLAIN et log_slow_queries

Depuis quelques temps, un serveur qui héberge quelques petits sites s’est mis à monter régulièrement en charge, sans augmentation de trafic, ni changements applicatifs. J’ai laissé traîner les choses, ne sachant pas d’où venait le souci.
Il aura fallu cinq minutes de travail et l’utilisation de la commande shell top, de la directive de configuration MySQL log_slow_queries et de la commande SQL EXPLAIN pour régler le problème de lenteur des sites.
(more…)

Coder un système d’authentification : Apache ET bases de données

Quand on veut gérer un système d’authentification en PHP pour un intranet (qui demande plus de rigueur et de sécurité qu’un site internet), on se retrouve à priori avec deux solutions valables: soit un formulaire relié à une base de données, le classique du Web/frontoffice, soit un fichier htpasswd, le classique du Backoffice, plus sûr mais moins flexible (notamment au niveau de l’ajout d’utilisateur ou de la gestion des droits d’accès). J’ai mis longtemps à me rendre compte qu’on pouvait mixer les deux pour avoir quelque chose de souple et de fiable.
(more…)

Gérer ses droits et accès utilisateurs en PHP : le Bit Bashing

Encore un problème récurrent du développeur: dans un CMS, on a une admin avec 10 utilisateurs qui ont avoir des rôles différents, chaque rôle étant autorisé à faire une certaine liste d’actions…
La solution “facile” (et malheureusement, celle qu’on voit quasiment TOUJOURS appliquée) est de créer une table contenant une colonne dans la base de données pour chaque action, plus un champ “user_ID”. Avec nos 4 actions, on a donc une table de 5 champs, qu’on mettra à 0 ou 1 selon que l’utilisateur peut effectuer l’action ou pas.
(more…)

Yahoo vous aide à accélérer votre site internet

Après avoir publié ses “Best Practices for Speeding Up Your Web Site” (comprendre: meilleures pratiques pour accélérer votre site internet”, Yahoo met désormais à disposition des développeurs YSlow!, une extension pour FireBug, célèbre plug-in Firefox, qui permet de faire un rapport d’optimisation pour la vitesse du site que vous visitez.

Le plug-in, très simple d’utilisation (un click dans la barre d’état lance l’analyse, qui apparait dans le panneau FireBug), recense toutes les modifications que vous pouvez apporter pour atteindre le fameux Speed Rank A, réservé à l’élite des sites rapides… (disons que les 34 critères définissent le « site rapide théorique parfait », mais ne sont pas tous applicables dans le monde réel. Par exemple, Yahoo recommande d’utiliser un CDN (Content Delivery Network), solution généralement assez chère pour ne pas être déployable sur des sites à moyen traffic et peu monétisés.

Voici un rappel de ce qu’il faut faire et éviter, aux yeux de Yahoo.

(more…)