Lead developer web


#PHP #Symfony #RabbitMQ #Redis #Git #Nginx
#Performance #Quality #Testing

Utiliser un serveur web pour PHP

PHP   Nginx   Apache   Serveur   Symfony  

Lorsque nous développons une application web et plus particulièrement en PHP, nous avons besoin d'un serveur web.

De même, si nous souhaitons tester un bout de code il peut s'avérer lourd de configurer un serveur web pour si peu.

L'objectif de cette article est de présenter globalement diverses solutions. Certaines sont bien connues, d'autres moins.

Apache

Le serveur le plus utilisé dans le cadre d'un développement d'une application web est Apache.

D'ailleurs quelques logiciels gratuits l'utilisent :

La documentation PHP comporte d'ailleurs une section pour l'installation d'Apache.

Généralement, un "Virtual host" est mis en place pour notre application. Je vous laisse le soin de regarder la documentation et chercher sur Internet, pas mal de ressources sont disponibles.

Nginx

Une autre solution un peu moins utilisée alors que plus efficace est Nginx.

Là encore de nombreuses ressources sont disponibles sur Internet. Voici un exemple de configuration pour une application Symfony, utilisant donc la "réécriture d'urls".

server {
    listen 80;

    server_name myapplication.local
    autoindex on;

    root /home/ndewez/myapplication/web/;

    index app.php index.php index.html;

    try_files $uri $uri/ @rewrite;

    location @rewrite {
        rewrite ^/(.*)$ /app.php/$1;
    }

    location ~ \.php {
        fastcgi_index index.php;
        fastcgi_pass  unix:/var/run/php5-fpm.sock;

        include fastcgi_params;
        fastcgi_param SERVER_NAME $host;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 600;
    }
}

Cette configuration est à placer par exemple dans le dossier sites-enabled de nginx, un restart du service et le tour est joué !

L'accès à votre application se fera via l'une des urls suivantes :

Serveur interne

Une solution encore moins utilisée est celle du serveur interne de PHP.

C'est cette solution que j'utilise généralement pour du développement de projets perso ou pour essayer une lib ou application.

Attention, cette fonctionnalité est disponible à partir de la version 5.4 de PHP. Elle ne doit pas être utilisée en production.

Son utilisation est assez simple, voici quelques explications. Les commandes suivantes impliquent d'être dans le dossier de l'application et d'avoir accès à PHP en ligne de commande.

Pour démarrer le serveur web :

php -S localhost:8000

A noter que le terminal affiche les accès aux ressources de votre application au fil de l'eau.

Si le document root de l'application ne correspond pas à la racine de votre application (comme pour une application Symfony), la commande suivante vous sera utile :

php -S localhost:8000 -t web/

Pour stopper le serveur, faites simplement un Ctrl+C (comme indiqué dans votre terminal).

Voilà pour l'utilisation basique, je vous laisse regarder la documentation pour plus d'informations.

Cas de Symfony

Symfony met à disposition une commande permettant de lancer le serveur interne de PHP. C'est donc cette commande qui s'occupe des différentes options notamment le "document root".

Pour cela plusieurs solutions s'offrent à vous, en fonction de votre système d'exploitation.

Si vous être sous Windows, le lancement du serveur interne se fera de cette manière :

php bin/console server:run

Un Ctrl+C entrainera l'arret du serveur.

Dans les autres cas, vous pouvez utiliser les commandes suivantes pour démarrer et arrêter votre serveur interne (la commande précédente est également disponible) :

php bin/console server:start
php bin/console server:stop

A noter qu'il est possible de préciser l'ip et le port de cette manière, la valeur par défaut étant 127.0.0.1:8000 :

php bin/console server:start 127.0.0.1:8999

Petite remarque, sur la version 2 de Somfony, la console est accessible dans le dossier app.

Conclusion

Plusieurs solutions s'offrent donc à nous lorsque nous développons des applications web PHP. Certaines entrainent peu ou pas de configuration. Il y a donc un réel gain de temps.

Pour ma part, j'utilise le serveur interne de PHP (via la commande Symfony) ou Nginx car la configuration d'Apache est un peu plus lourde. Le choix se fait ensuite par rapport au type de projet. Si une utilisation poussée du serveur web est demandée alors autant mettre en place Nginx tout de suite pour coller au mieux à la cible.