Posts of category « PHP » 64 posts

Posted on by

0 comment

Les paramètres des boucles en PHP - nous allons ici parler de for - ne sont pas mis en cache. Il faut donc faire attention lors de l'initialisation des boucles à ne pas mettre dans les conditions de fonctions qui n'ont pas à être éxécutées à chaque tour. Exemple:

Code n°1

< ?php
for ($i = 0; $i < get_num_loops(); $i++) {
	echo $i.'ème tour'."n";
}
?>

View more →

Posted on by

0 comment

Dans n'importe quel projet, la documentation est presque indispensable dans la mesure où l'on passe plus de temps à relire et à maintenir du code qu'a en écrire... Commenter le code source est tout aussi important et permet d'intervenir beaucoup plus rapidement sur le code, même après quelques mois voir années. Il permet aussi à quelqu'un qui reprend le projet de mieux comprendre comment il fonctionne.

Seulement, une fois que l'on a commenter, on doit à nouveau s'occuper d'écrire la documentation, chose très ennuyante. Afin d'aider au maximum les développeurs, il existe de nombreux outils pour créer des documentations à partir du code source comme PHPDocumentor.

View more →

Posted on by

0 comment

Si vous souhaitez écrire de nouvelles fonctionnalités, créer des patchs, corriger quelques bugs ou tout simplement aider la communauté PHP sur le code source, il vous faut l'avoir dans un éditeur de code. Eclipse est mon favori, il permet de gérer presque tous les types de codes, bref, il est génial ! Seulement, j'ai un peu de mal à mettre en place le code source (du tronc ou d'une branche, peu importe) en tant que projet C dans Eclipse CDT.

View more →

Posted on by

0 comment

Une extension PHP nommé ssh2, que l'on peut retrouver dans le dépôt pecl permet de se connecter à un serveur SSH depuis un script PHP à l'aide de plusieurs fonctions. Plus particulièrement, la fonction ssh2_shell qui retourne un flux de données, ou stream, nous permet de mettre en place entre le script PHP et le serveur SSH un vrai échange complet. L'intérêt d'avoir un flux de données pour converser avec un serveur SSH est que l'on peut manipuler assez facilement à l'aide de toutes les fonctions stream_* ces flux. Ça, c'est la théorie.

En pratique, il s'avère que l'utilisation d'un flux SSH2 Channel (retourné par ssh2_shell) avec la fonction stream_select qui permet d'attendre que le flux "change" - c'est-à-dire qu'une donnée arrive - est impossible. En effet, pour utiliser le flux avec stream_select, il faut pouvoir transformer ce flux en une donnée utilisable par la fonction C select(). C'est ce que l'on appelle "caster un stream" en franglais et "to cast a stream" en anglais. Le problème, c'est que la librairie pecl/ssh2 (basée sur libssh2) n'implémente pas cette fonctionnalité, ce qui nous donne droit à un magnifique:

Warning: stream_select() [function.stream-select]: cannot represent a stream of type SSH2 Channel as a select()able descriptor in /path/to/file.php on line XX

Nous allons donc voir comment ajouter cette fonctionnalité simplement, à l'aide de patchs développés par mes soins.

View more →

Posted on by

0 comment

Dans certains projets modulaires, certains modules utilisent l'internationalisation (avec gettext notamment). Le problème, c'est quand il y en a plusieurs, quel fichier gettext va-t-il être utilisé ? C'est assez difficile à répondre car gettext est très...très pauvre en fonctions de débugguage. En réalité c'est impossible de débugguer gettext sans procéder par tests.

Du coup, ça serait très pratique d'utiliser plusieurs fichiers compilés de langue. Pour ça, il y a la fonction ngettext qui permet de spécifier le nom du domaine à utiliser. Le nom du domaine c'est le premier paramètre de bindtextdomain qui vous avez dû appeler pour initialiser le fichier de texte à trouver dedans.

C'est très pratique, surtout, lisez la documentation de ngettext pour pouvoir utiliser plusieurs fichiers de traduction dans un même programme PHP !

Posted on by

0 comment

Le nouveau projet Open Source pour PHP du moment, c'est bien HipHop, développé pour PHP, qui consiste à transformer le code PHP en C++ puis de le compiler en utilisant g++. Présenté dans l'article précédent Facebook & PHP II: HipHop et HPHPi, voici de nouvelles informations, issues de la conférence de cette nuit.

Facebook qui utilise déjà HipHop sur 90% de ses serveurs a constaté:

  • Sur les serveurs Web: 50% de consommation CPU en moins pour un même trafic, par rapport à PHP 5.2 avec APC
  • Sur les serveurs API: 30% de consommation CPU en moins pour deux fois plus de trafic

HipHop transforme le code en C++ et le compile avec g++ mais l'utilisateur n'a pas besoin de compiler à la main son code PHP avec un outils, tout reste comme avant, avec l'édition de fichiers PHP à la volée.

Néanmoins, les fonctionnalités qui ne seront pas disponibles:

  • La fonction eval
  • La fonction create_function, qui est du même acabit que eval
  • La fonction preg_replace, avec le paramètre e, qui permet l'application de eval sur le résultat
  • De manière plus générale, l'ordre des objets ne peu pas être respecté, du fait d'une exécution non-linéaire du code. Ainsi, la fonction function_exists retourne la valeur vraie dans ce code:
    if (function_exists('foo')) {
     
        // Vrai avec HipHop
     
        // Faux avec PHP
     
    }
     
    function foo () {}
     
    ?&gt;

En plus de HipHop, l'équipe de Facebook a développé HPHPi, c'est un interpréteur PHP, il semblerait que ça soit grâce à lui qu'il ne sera pas nécessaire de compiler le code PHP. Il fait aussi des analyses du code pour y détecter des éventuelles erreurs dues à l'utilisation de HipHop et non de PHP.

HipHop embarque son propre serveur Web et n'est pas le moment pas compatible/prêt à fonctionner avec Apache ou un autre serveur. C'est pourquoi HipHop c'est un seul processus, contrairement à PHP mais qui utilise le principe de multi-thread, plus rapide que le multi-processus car créer un processus, c'est assez long par rapport aux threads. Comme HipHop utilise sont propre Web serveur allégé, il est plus rapide et permet de mieux gérer les ressources partagées entre les threads, il permet aussi de ne pas avoir de downtime, c'est-à-dire de temps d'inaccessibilité lors d'un redémarrage de HipHop.

HipHop est pour le moment basé sur PHP 5.2, et l'équipe de chez Facebook compte bien avancer encore plus sur ce projet et voici leur Roadmap, ou liste de choses à faire:

  • Apport des fonctionnalités de PHP 5.3
  • Utilisation possible avec Apache
  • ...et plus généralement la réduction de l'écart entre HipHop et PHP

Le code source qui était sensé être mis en ligne cette nuit sera maintenant mis en ligne "soon" !

Posted on by

0 comment

Nous allons installer Nginx et PHP 5.3 configurés pour communiquer en Fast-CGI sous CentOS (testé sous CentOS 5.5). L'avantage de Nginx est qu'il est beaucoup plus rapide qu'Apache, et très complet malgré tout. Dans l'ordre, nous allons installer les paquets pour Nginx et PHP, puis nous allons configurer la liaison Fast-CGI entre les deux.

Installation des dépôts EPEL

Avant tout, pour pouvoir avoir les dépôts EPEL et IUS, dans lequel il y a Nginx et PHP 5.3, nous allons installer deux paquets qui ajoutent ces dépôts:

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1.0-6.ius.el5.noarch.rpm

Installation de nginx

L'installation de nginx est très rapide grâce à yum, il vous suffit de lancer cette commande:

# yum install nginx

Installation de PHP 5.3

L'installation de PHP 5.3 se fait grâce aux paquets php53*, que nous pouvons également installer grâce à yum.

# yum install php53 php53u-pecl-apc php53u-gd php53u-mbstring php53u-devel php53u-snmp php53u-cli php53u-pdo

Note: vous pouvez installer d'autres paquets pour le support de MySQL - php53u-mysql -, ou de PostgreSQL - php53u-pgsql ou php53u-pgsql84 -. Listez les paquets pour PHP 5.3 grâce à la commande yum list | grep php53.

View more →