如何在不使用`exec()`,`system()`...的情况下在PHP中运行Python脚本?

时间:2019-03-18 07:32:15

标签: php python

我的LAMP服务器是具有Apache 2.4,PHP 5.4和Python 3.6的CentOS 7.4。

我是Python的新手。我刚刚从R迁移到Python。我需要一些Python包来进行统计,然后将输出传递到PHP。

我复习了许多类似的问题。答案围绕exec()passthru()system()shell_exec()。它们是危险的命令,不应在PHP中启用。

Python official manual, "Integrating Python With Other Languages"中,仅提到了两个工具ppythonPHP "Serialize" in Pythonppython似乎不再需要维护,但这就是我所需要的,就像使用R时的Rserve一样。

我也读过this post

  

简单而标准的解决方案是使用Socket或Webservice(API)

现在,如何在PHP中运行Python脚本而不使用exec()system() ...(也许是套接字通信)?

2 个答案:

答案 0 :(得分:0)

将您的Python脚本转换为Django REST API,然后使用cURL对其进行调用。

答案 1 :(得分:0)

如果您不知道如何使用,一切都是危险的(甚至是叉子)。好吧,您有几种选择:

  1. 标准:使用exec() / shell_exec()等在PHP中运行Python解释器。此外,延迟时间短,并且能够运行Python编译字节代码,因此性能在这里胜出。

  2. 非标准:如果您担心手头的安全问题,我建议最好将Python命令插入某些批处理表中,并使用CRON调度程序定期运行这些命令。执行后,使用PHP提取结果。这样,PHP / Python执行将被解耦,您将可以更好地控制如何/何时执行Python脚本。

  3. 非标准(不惜一切代价避免使用):您提到的项目已通过php-python移至Git。它只是在端口21230上启动新的Python server,并等待来自PHP脚本的Python命令。现在,这些解决方案是最危险的解决方案,因为Web服务器中增加了开放的端口,这使管理员头疼不已,因此不建议这样做。

  4. 最后一个选择是质疑一个假设,即在PHP的Web开发中完全需要Python 。公司IT部门中使用的语言越多-维护所有资源的难度就越大,并且新功能/错误修复的上市时间也就越难。因此,在考虑执行Python脚本之前,请首先考虑将其重写为纯PHP

    您可以automatically做,但是这些类型的翻译器很容易出错并且不完整-例如,该翻译器不支持imports。 (该死吗?没有输入的Python就像没有面粉的面包一样)。第二种选择是学习Python并将手头的代码重写为PHP。或者只是获得客户需求并将其编码到PHP中。可以在Python中完成的所有操作,也可以在PHP中完成(至少从Web开发的角度来看)。