2011-02-04 3 views
3

En ce moment je lance un script Python de PHP en utilisant exec() car je dois passer des variables dynamiques du site web/MySQL à la ligne de commande. Cependant, je voudrais améliorer à la fois la rapidité et la sécurité de cette opération donc j'ai pensé à utiliser WSGI. Je pensais qu'il pourrait être possible d'intégrer le script Python dans un fichier WSGI, qui utiliserait les variables passées directement (ou indirectement) depuis PHP ... mais comment faire? Je n'ai jamais utilisé WSGI donc je ne sais même pas si c'est une question stupide ou pas :)Comment éviter PHP exec() en utilisant WSGI pour exécuter un script Python?

+1

Avez-vous accès à Apache config (ou à tout autre serveur web que vous utilisez)? – MeanEYE

+0

Oui, j'ai Apache sur mon propre serveur dédié. – Jon

Répondre

1

Tout d'abord, pouvez-vous tout faire en Python ou PHP? L'utilisation de plusieurs langues est généralement considérée comme un anti-pattern. Cela ne veut pas dire que c'est toujours une mauvaise idée, mais vous devriez vous demander pourquoi, d'abord, et seulement si vous êtes convaincu que c'est une bonne idée d'aller de l'avant.

En ce qui concerne les détails de ce que vous voulez faire, il y a quelques options:

  1. Si vous utilisez Apache, vous pouvez utiliser la fonction virtual() d'émettre une nouvelle requête par Apache.

    Cela suppose que vous utilisez mod_php et mod_wsgi. Fondamentalement, vous souhaitez construire une chaîne de requête pour les variables que vous souhaitez passer, et l'appeler comme:

    virtual('path/to/python.py?'.$query); 
    
  2. Écrivez votre propre passerelle WSGI PHP.

    Basiquement, codez la spécification WSGI dans une bibliothèque et appelez-la explicitement depuis PHP.

  3. Stick à l'appel de exec() (qui sera probablement la meilleure option pour l'instant).

La chose que vous devez prendre en compte est qu'il y a un surcoût inhérent à la conversion, y compris entre les langues. Tu ne t'en sortiras jamais, c'est juste la nature de la bête. Donc, à la place, je suggère de garder toute la demande dans un seul environnement, et de la traiter dans son intégralité ...

+0

Malheureusement, je ne peux pas abandonner l'une ou l'autre langue car j'utilise des librairies Python qui ne sont pas disponibles sur PHP ... et réécrire tout le PHP en Python ... Je ne suis pas sûr que ça en vaille la peine. J'espérais un raccourci en utilisant WSGI juste pour réduire cet overhead. – Jon

+0

Merci beaucoup pour votre réponse! – Jon

Questions connexes