J’ai vu beaucoup de demandes dernièrement, sur la façon d’exécuter PHP dans Node.js. Certaines demandes ont été faites parce que les gens ne savent pas comment faire les mêmes choses en Node.js qu’ils font facilement en PHP, et d’autres demandes ont été faites parce qu’ils ont besoin de travailler ensemble avec d’autres équipes qui ne programment qu’en PHP.

Dans chaque cas, j’ai vu la réponse, que cela ne peut pas être fait. Ce qui est factuellement inexact. Puisque vous pouvez exécuter PHP en ligne de commande, et que Node.js peut facilement exécuter des programmes via la ligne de commande, c’est tout à fait possible.

Quels sont les avantages ?

  • Collaboration facile entre des équipes ayant des connaissances différentes
  • PHP est vraiment bon pour lancer des scripts rapides ensemble
  • Pas besoin d’exécuter plusieurs serveurs si Node.js et PHP sont tous deux nécessaires

Quels sont les inconvénients ?

  • Plus de possibilités de failles de sécurité
  • Pas de très bonnes performances
  • Facile de se tirer une balle dans le pied
  • Si vous connaissez déjà PHP et que vous apprenez node, vous aurez probablement tendance à programmer les choses « difficiles » en PHP, n’apprenant ainsi pas la façon de faire de node.

Bien sûr, il y a probablement plus d’inconvénients et d’avantages, mais parlons-en dans les commentaires 😉

Basiquement, cet article est une étape 1. Ce n’est pas une solution complète. C’est juste pour montrer que cela peut être fait et comment.

Commençons

Je vais sauter de vous dire comment installer Node. Il y a beaucoup de tutoriels à ce sujet.

La première chose que vous devez faire est d’installer PHP (si vous ne l’avez pas déjà fait).
Suivez simplement les instructions standard sur http://php.net/manual/en/install.php et vous devriez être bien.

Aussi, dans cet exemple, j’utilise Express. Vous n’avez pas besoin d’utiliser Express pour exécuter PHP dans Node.js, mais allons-y pour le moment.

npm install express – save

Maintenant, jetons un coup d’œil à webserver.js qui sera le premier fichier de notre projet.

Comme vous pouvez le voir, nous avons fait un serveur web assez simple. Si vous avez déjà travaillé avec Express, vous savez déjà ce que fait la plupart de l’exemple.

Le truc que vous n’avez pas vu avant est l’exigence du « execphp.js » qui est l’endroit où nous ferons le parsing PHP.

Nous définissons également une route qui reçoit toutes les requêtes *.php, et les fait passer par la classe execPHP.

Note: Change the variable execPHP.phpFolder to wherever you want to put your own php files.

Maintenant, jetons un coup d’oeil à « execphp.js » qui sera le deuxième fichier de notre projet.

Comme vous pouvez le voir, ce fichier contient une classe, ExecPHP, avec une seule méthode, parseFile. Cette méthode prend essentiellement un fichier, exécute la ligne de commande PHP et appelle la callback passée avec le résultat.

Note: Change the variable this.phpPath to wherever you have PHP installed.

Maintenant, faisons un simple fichier PHP. Je l’ai appelé « test.php » et je l’ai mis dans le dossier « phpfiles » (celui que vous avez édité dans webserver.js).

Comme vous pouvez le voir, c’est un exemple très simple.

Maintenant, exécutons le serveur web.

node – use_strict webserver.js

Et visitons http://localhost:3000/test.php dans notre navigateur.

Woohoo, avec un peu de chance, vous devriez obtenir le résultat du fichier php.

Hello worldA simple counter:
0
1
2
3
4
5
6
7
8
9

Plus de problèmes, nous laisserons comme exercices pour le lecteur.

Si vous utilisez juste ce script sans l’éditer, vous rencontrerez rapidement des limitations. Par exemple, $_GET, $_REQUEST, etc. ne sont pas définis. Si vous vouliez utiliser cela, vous auriez probablement Node.js écrire un faux PHP fixant les variables à ce que vous voulez qu’elles soient, et traiter cela avant le fichier lui-même.

Généralement de bonnes idées pour le développement furture:

  • Faire de l’execPHP un express-middleware lui-même.
  • Sanitiser le nom du fichier pour s’assurer que les gens n’écrivent pas des choses comme ../../../evilfile.php pour accéder à des choses qu’ils ne devraient pas.
  • Gérer $_GET, $_SERVER, $_REQUEST, .etc. automatiquement dans la classe execPHP, de sorte que ceux-ci seront disponibles dans les scripts php.

Ecrit par Martin Mouritzen.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.