Module PHP quelle version utiliser ? Thread Safe ou Non Thread Safe?

php

Tout pour bien sélectionner la version du module pour PHP

Le contexte technique fondamental en HTTP

Différents serveurs web mettent en œuvre différentes techniques pour traiter les requêtes HTTP entrantes en parallèle. Une technique assez populaire est d’utiliser des threads — c’est-à-dire, le serveur web va créer/dédier un thread unique pour chaque requête entrante. Le serveur web Apache HTTP supporte de multiples modèles pour traiter les requêtes, dont l’un (appelé MPM ouvrier) utilise des threads. Mais il supporte un autre modèle de simultanéité appelé MPM prefork qui utilise des processus — c’est-à-dire que le serveur web créera/dédiera un seul processus pour chaque requête.

Il existe également d’autres modèles de concurrence complètement différents (utilisant des connecteurs asynchrones et des E/S), ainsi que d’autres qui combinent deux ou même trois modèles. Pour répondre à cette question, nous ne nous intéressons qu’aux deux modèles ci-dessus, en prenant l’exemple du serveur HTTP Apache.

Connaissance nécessaire sur la façon dont PHP “s’intègre” avec les serveurs web

PHP lui-même ne répond pas aux requêtes HTTP réelles — c’est le travail du serveur web. Nous configurons donc le serveur web pour transférer les requêtes vers PHP pour traitement, puis nous recevons le résultat et le renvoyons à l’utilisateur. Il y a plusieurs façons de chaîner le serveur web avec PHP. Pour Apache HTTP Server, le plus populaire est “mod_php”. Ce module est en fait PHP lui-même, mais compilé comme un module pour le serveur web, et donc il est chargé directement à l’intérieur.

Il existe d’autres méthodes pour enchaîner PHP avec Apache et d’autres serveurs web, mais mod_php est le plus populaire et servira aussi à répondre à votre question.

Vous n’aviez peut-être pas besoin de comprendre ces détails auparavant, parce que les sociétés d’hébergement et les distributions GNU/Linux viennent avec tout ce qui est préparé pour nous.
Maintenant, quelle différence entre Thread Safe et non Thread Safe?!

Comme avec mod_php, PHP est chargé directement dans Apache, si Apache va gérer la simultanéité en utilisant son Worker MPM (c’est-à-dire, en utilisant Threads) alors PHP doit être capable d’opérer dans ce même environnement multi-thread — ce qui veut dire que PHP doit être thread-safe pour pouvoir jouer correctement avec Apache!

A ce stade, vous devriez penser “OK, donc si j’utilise un serveur web multi-threadé et que je vais intégrer PHP directement, alors je dois utiliser la version thread-safe de PHP”. Et ce serait une bonne idée. Cependant, il se trouve que la sécurité des threads de PHP est très contestée. C’est un terrain d’utilisation pour les initiés, si vous savez vraiment ce que vous faites.

Conclusion

Quand votre PHP est installé en CGI ou FastCGI, utilisez le Non Thread Safe, si c’est installé en tant que Module Apache, utilisez le Thread Safe

Au cas où vous vous poseriez la question, mon conseil personnel serait de ne pas utiliser PHP dans un environnement multi-threads si vous avez le choix!

Parlant seulement des environnements Unix, je dirais que heureusement, vous n’avez qu’ à penser à cela si vous allez utiliser PHP avec le serveur web Apache, auquel cas il vous est conseillé d’aller avec le MPM de préfork d’Apache (qui n’utilise pas de threads, et donc, thread-safe n’a pas d’importance) et toutes les distributions GNU/Linux que je connais prendront cette décision pour vous quand vous êtes Si vous allez utiliser d’autres serveurs web tels que nginx ou lighttpd, vous n’aurez pas la possibilité d’y intégrer PHP de toute façon. Vous allez voir comment utiliser FastCGI ou quelque chose d’égal qui fonctionne dans un modèle différent où PHP est totalement en dehors du serveur web avec plusieurs processus PHP utilisés pour répondre aux demandes à travers par exemple FastCGI. Dans ce cas, la sécurité des fils n’ a pas d’importance.

Comment savoir si PHP est installé en CGI ou en Module?

Pour voir quelle version de votre site web utilise, mettez un fichier contenant <? php phpinfo ();? > sur votre site et recherchez l’entrée API du serveur. Cela pourrait dire quelque chose comme CGI/FastCGI ou Apache 2.0 Handler.

fast CGI

Si vous regardez aussi la version en ligne de commande de PHP — la sécurité du thread n’a pas d’importance.

Enfin, si la sécurité du theading n’ a pas d’importance, quelle version devez-vous utiliser — Thread Safe ou Non Thread Safe? Je suppose que la version non-thread-safe est plus rapide et moins buggy, ou sinon ils auraient juste offert la version thread-safe et ne se seraient pas donné la peine de proposer ces deux alternatives !

 Supplément

Comment savoir si son installation php est Thread Safe ou non Thread Safe?

sur Linux
$ php -i | grep Thread

Sur Windows

$ php -i | find "Thread"

 

Comments on this entry are closed.