PHP:从PHP调用Python

时间:2017-02-09 06:32:55

标签: php python

我正在尝试从PHP执行python脚本...但是我得到了一个奇怪的输出...在我的Python脚本中有GPIO语句来控制继电器和打印语句......现在很奇怪事情是print语句执行但不是GPIO语句...没有错误...我还提供了我的python文件的执行权限...我不知道是什么问题... Python被执行不“”GPIO“”:( :( 我使用的Python代码(relay.py)是:

import sys
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
pin=11
GPIO.setup(pin,GPIO.OUT)
i=sys.argv[1]
n=int(i)
if(n==0):
    print(n)
    GPIO.output(pin,GPIO.LOW)
if(n==1):
    print(n)
    GPIO.output(pin,GPIO.HIGH)

PHP(lightonoff.php)代码是:

<form method="post" action="php.php">
    <input type="submit" value="on">
    <input type="hidden" name="ct1" value="1">
</form>
<form method="post" action="php.php">
    <input type="submit" value="off">
    <input type="hidden" name="ct1" value="0">
</form>

php.php文件是:

<?php
    $i=$_POST['ct1'];
    $r=exec("/var/www/html/relay.py $i");
    echo $r;
?>

1 个答案:

答案 0 :(得分:0)

考虑使用passthru而不是exec,因此您可以在命令末尾使用2&gt;&amp; 1来读取命令的输出,因此STDERR和STDOUT也是可见的。 这会有所帮助。 另外,您可能需要执行CHMOD和CHOWN命令以确保权限并标记可执行字节标志。 另外,你也可能会在命令行解释器(在本例中为python)中使用shebang行。

另外,使用escapeshellcmd来清理$ _POST输入,这样攻击者就不会通过更改变量来执行任意shell命令!!

Should I put #! (shebang) in Python scripts, and what form should it take?

http://php.net/manual/en/function.escapeshellcmd.php