Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中运行Python脚本而不使用'exec()`、'system()`。。。?_Php_Python - Fatal编程技术网

如何在PHP中运行Python脚本而不使用'exec()`、'system()`。。。?

如何在PHP中运行Python脚本而不使用'exec()`、'system()`。。。?,php,python,Php,Python,我的LAMP服务器是CentOS 7.4,带有Apache 2.4、PHP 5.4和Python 3.6 我是Python新手;我刚刚从R迁移到Python。我需要一些Python包来进行统计,然后将输出交付给PHP 我复习了很多类似的问题。答案是关于exec(),passthru(),system(),以及shell\u exec()。它们是危险的命令,不应在PHP中启用 在中,只提到了两个工具,ppython和PHP在Python中“序列化”。 似乎不再维护,但这正是我所需要的,就像我使用R

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

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

我复习了很多类似的问题。答案是关于
exec()
passthru()
system()
,以及
shell\u exec()
。它们是危险的命令,不应在PHP中启用

在中,只提到了两个工具,
ppython
PHP在Python中“序列化”。
似乎不再维护,但这正是我所需要的,就像我使用R时的
Rserve
一样

我还读到:

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


现在,我如何在PHP中运行Python脚本而不使用
exec()
system()
…(可能是套接字通信)?

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

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

  • 标准版:在PHP中运行Python解释器时使用
    exec()
    /
    shell\u exec()
    等。此外,还将有一个较小的延迟,并且能够运行Python编译的字节码,因此性能在这里获胜

  • 非标准的:如果您非常关心手头的安全问题,我建议您最好将Python命令插入一些批处理表中,并使用CRON调度程序定期运行这些命令。执行后,使用PHP获取结果。通过这种方式,PHP/Python执行将被解耦,您将能够更好地控制如何/何时执行Python脚本

  • 非标准的(不惜一切代价避免):您提到的项目已移至Git。它只需在端口21230上启动一个新的Python
    服务器
    ,并等待来自PHP脚本的Python命令。现在,这些解决方案是最危险的,因为web服务器中有额外的开放端口,这是管理员非常头疼的问题,因此不推荐使用

  • 最后一个选项是质疑一个假设,即在PHP的web开发中需要Python。IT farm公司使用的语言越多,就越难维护所有源代码,也越难赶上新功能/bug修复的上市时间。因此,在考虑执行Python脚本之前,首先考虑将它们重新写入普通PHP

    您可以这样做,但这些类型的翻译器非常容易出错,而且不完整-例如,此翻译器不支持
    导入
    。(见鬼,没有进口的蟒蛇就像没有面粉的面包)。第二种选择是学习Python并将手边的代码重新写入PHP。或者简单地获取客户需求并将其编码到PHP中。在Python中可以完成的一切,也可以在PHP中完成(至少在web开发透视图中)


  • 您需要使用其中一个命令。如果您担心有人可能使用该命令执行操作,请将其放在另一个环境中,并使用API调用来执行。只有当您不知道他们正在执行的命令来自何处时,它们才是危险的。如果您在自己的程序中构造该命令,这与您自己从控制台执行该命令没有什么不同。你为什么不这样做呢?我同意那些方法是危险的,但只有当你没有正确的方法做的时候。有些应用程序在没有消毒的情况下将用户输入传递到这些方法中,这是危险的。如果您只是执行脚本,那么就可以了。还要确保您的python脚本也是安全的。
    API
    是否会在python和php之间自动转换
    数据类型
    ?您可以将接收数据作为json发送,因此,将数据类型转换为json之前的参数将在接收json数据后保留。是否有
    socket
    解决方案?socket可能比port更好。socket只是
    IP+port
    对的一个花哨名称。不,您必须使用套接字打开一些端口-因此,这是一个巨大的潜在安全漏洞。通过webservice,您可以解决额外端口的问题,因为许多WS使用标准http端口。但仍然存在另一个安全漏洞——如果用户可以将任意Python代码传递给webservice执行——那么您就输了,因为黑客可以传递类似于
    shutil.rmtree('C:\Windows\')
    。因此,您必须执行一组非常有限的Python命令(也容易出错),或者执行web服务器文件夹中的
    预定义脚本,这与直接使用
    exec()
    执行它们没有什么不同。结果是,您在这里使用Web服务一无所获。所以我的邮箱是通过一家名为Kinsta的公司托管的。。。他们有su密码。。。不要把它泄露出去。。。碰巧他们锁定了所有的标准方法(shell_exec、exec、passthru等):(…为什么生活会如此艰难?