L’opérateur + sur les tableaux en PHP

25 mai 2012

Dans cet article nous allons nous pencher sur l’opérateur + et sur son action sur les tableaux en PHP.

Dans le cas des tableaux, le + représentera une union et non pas une addition aveugle de deux tableaux.

Prenons le cas le plus simple, l’union de tableaux associatifs:

1
2
3
4
5
6
7
8
9
10
11
<?php
$array1 = array(
    'cle1' => 'bleu',
    'cle2' => 'blanc',
);
 
$array2 = array(
    'cle3' => 'rouge',
);
 
print_r($array1 + $array2);

Le résultat de ce code :

Array
(
    [cle1] => bleu
    [cle2] => blanc
    [cle3] => rouge
)

Jusque là, aucun problème, les deux tableaux ont fusionné et le tableau $array2 a été ajouté à la suite de $array1. Prenons maintenant un premier cas particulier : les deux tableaux ont une clé en commun :

Lire le reste de cet article »

Installation de vlogger sur squeeze

13 février 2012

vlogger est un petit script qui va s’occuper de gérer l’écriture des logs à la place d’Apache. Pourquoi ? Car il est bien mieux optimisé qu’Apache pour faire cette tâche et que du coup nous allons soulager notre serveur et économiser des ressources qui seront plutôt utilisées ailleurs. De plus sa façon de créer les logs est plutôt sympathique: vlogger va créer dans le répertoire de logs d’Apache un répertoire pour chaque VirtualHost du serveur (ce nom sera basé sur le ServerName). A l’intérieur, vlogger va créer un fichier de log différent pour chaque jour, et va créer un lien symbolique access.log vers le fichier de log du jour.

Lire le reste de cet article »

Migration d’un serveur mysql 5.0 à 5.1 : ERROR 1577 (HY000)

13 février 2012

Lors de la migration d’un serveur mysql de la version 5.0 à la version 5.1 j’ai eu un message d’erreur lors du lancement du serveur :

ERROR 1577 (HY000) at line 1: Cannot proceed because system tables used by Event Scheduler were found damaged at server start

J’ai résolu le problème en lançant cette commande :

> mysql_upgrade -u root -p --force

Installer Eclipse et PDT séparément sur Windows

7 novembre 2010

Si vous ne voulez pas utiliser Eclipse uniquement pour faire du PHP, mieux vaut installer la version classique d’Eclipse, puis d’installer PDT (PHP Development Tool) séparément.

En ce qui me concerne j’ai commencé par télécharger la version « Classic » d’Eclipse que l’on peut trouver sur cette page. A l’heure où j’écris ces lignes il s’agit de Eclipse Classic 3.6.1. Téléchargez le zip en fonction de votre système (32 ou 64 bits). Dézippez ensuite votre fichier dans le répertoire Program Files. Vous obtenez un répertoire eclipse. Entre-y et faites un raccourcit de eclipse.exe vers le bureau par exemple.

Lire le reste de cet article »

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 (version inférieure à 5.5). 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.

Par défaut, 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.

Si vous installez le package à partir de dotdeb, le fichier de monitoring ne sera pas présent. Dans ce cas, grâce à un phpinfo(), récupérez la version d’apc installée puis rendez vous sur http://pecl.php.net/package/apc

Choisissez votre version d’APC, localisez apc.php et téléchargez le.

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

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

Vous pourrez trouver toutes les directives de configuration dans la documentation sur php.net, notamment le paramètre apc.shm_size qui permet d’ajuster la ram utilisée.

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 »