Mon serveur LAMP est CentOS 7.4 avec Apache 2.4, PHP 5.4 et Python 3.6.

Je suis nouveau sur Python ; J'ai migré de R vers Python tout à l'heure. J'ai besoin d'un package Python pour faire des statistiques, puis livrer la sortie à PHP.

J'ai passé en revue beaucoup de questions similaires. Les réponses sont autour de exec(), passthru(), system() et shell_exec(). Ce sont des commandes dangereuses et ne doivent pas être activées en PHP.

Dans le manuel officiel de Python, "Integrating Python With Other Languages", ne sont mentionnés que deux outils, ppython et PHP "Serialize" in Python. ppython ne semblait plus maintenu, mais c'est ce dont j'ai besoin, tout comme Rserve quand J'utilise R.

J'ai également lu ce post :

La solution simple et standard utilise Socket ou Webservice (API)

Maintenant, comment exécuter un script Python en PHP sans utiliser exec(),system()... (peut-être une communication socket) ?

0
kittygirl 18 mars 2019 à 10:32

2 réponses

Meilleure réponse

Tout est dangereux (même une fourchette) si vous ne savez pas vous en servir. Eh bien, vous avez plusieurs options :

  1. Standard : exécuter l'interpréteur Python en PHP avec exec() / shell_exec(), etc. De plus, il y aura une petite latence et la possibilité d'exécuter du byte-code compilé Python, ce qui améliore les performances ici.

  2. Non standard : si vous êtes très préoccupé par les problèmes de sécurité, je vous suggère d'insérer des commandes Python dans une table de traitement par lots et de les exécuter régulièrement avec le planificateur CRON. Après l'exécution, récupérez les résultats avec PHP. De cette façon, l'exécution PHP/Python sera découplée et vous aurez un meilleur contrôle sur comment/quand exécuter les scripts Python.

  3. Non standard (à éviter à tout prix) : votre projet mentionné est déplacé vers Git à l'adresse php-python. Il démarre simplement un nouveau server Python sur le port 21230 et attend les commandes Python d'un script PHP. Maintenant, CES solutions sont des plus dangereuses, en raison du port supplémentaire ouvert dans le serveur Web, ce qui est un gros casse-tête pour les administrateurs et donc fortement déconseillé.

  4. La dernière option consiste à remettre en question l'hypothèse selon laquelle Python est absolument nécessaire dans le développement Web de PHP. Plus il y a de langues différentes dans la ferme informatique de l'entreprise - plus il sera difficile de maintenir toutes les sources et plus difficile de battre le temps de mise sur le marché des nouvelles fonctionnalités/corrections de bogues. Donc, avant d'envisager l'exécution de scripts Python, pensez d'abord à les réécrire en PHP simple.

    Vous pouvez le faire automatiquement, mais ce type de traducteurs est très sujet aux erreurs et incomplet - par exemple celui-ci ne prend pas en charge imports. (Qu'est-ce que c'est ? Python sans importations, c'est comme un pain sans farine). La deuxième option consiste à apprendre Python et à réécrire le code disponible en PHP. Ou simplement obtenir les exigences d'un client et les coder en PHP. Tout ce qui peut être fait en Python, peut aussi être fait en PHP (au moins dans une perspective de développement Web).

0
Peter Mortensen 13 avril 2019 à 02:28

Convertissez votre script Python en API REST Django, puis appelez-le à l'aide de cURL.

0
Peter Mortensen 13 avril 2019 à 02:29