php中的python参数值

php中的python参数值,php,python,Php,Python,我被困在python脚本的web界面上,问题是我需要从用户那里读取输入,并在python脚本上作为参数值运行这些输入,但它不起作用。这是我的代码 index.php <html> <body> <form action="programa.php" method="post"> Name: <input type="text" name="longitud"><br> E-mail: <input type="

我被困在python脚本的web界面上,问题是我需要从用户那里读取输入,并在python脚本上作为参数值运行这些输入,但它不起作用。这是我的代码

index.php

 <html>
 <body>

 <form action="programa.php" method="post">
   Name: <input type="text" name="longitud"><br>
   E-mail: <input type="text" name="angulo"><br>
   <input type="submit" value="correr">
 </form>

名称:
电子邮件:

programa.php

<?php $longitud=$_POST["longitud"];

    $angulo=$_POST["angulo"]; ?>
    <h1>Corriendo programa con  <?php echo $_POST["longitud"]; ?> mm de longitud<br>
     y  <?php echo $_POST["angulo"]; ?> grados de angulo</h1>
                    <br>
                    <br>
                    <br>
                    <?php 
    $a=exec('sudo python /var/www/python/programa.py $longitud $angulo');
    echo $a;
    ?>

Corriendo programa con-mm de longitud
德安古洛学院


我访问了错误日志并打印了这个

Traceback (most recent call last):
File "/var/www/python/programa.py", line 7, in <module>
script,long_barra,angulo = argv
ValueError: need more than 1 value to unpack
[Mon Nov 10 22:36:53 2014] [error] [client 192.168.1.3] PHP Notice:  Undefined 
index:   longitud in /var/www/Maquina/programa.php on line 22
[Mon Nov 10 22:36:53 2014] [error] [client 192.168.1.3] PHP Notice:  Undefined index: 
angulo in /var/www/Maquina/programa.php on line 24
[Mon Nov 10 22:36:53 2014] [error] [client 192.168.1.3] PHP Notice:  Undefined index: 
longitud in /var/www/Maquina/programa.php on line 25
[Mon Nov 10 22:36:53 2014] [error] [client 192.168.1.3] PHP Notice:  Undefined index: 
angulo in /var/www/Maquina/programa.php on line 26
Traceback (most recent call last):
File "/var/www/python/programa.py", line 7, in <module>
script,long_barra,angulo = argv
ValueError: need more than 1 value to unpack
Traceback (most recent call last):
File "/var/www/python/programa.py", line 7, in <module>
script,long_barra,angulo = argv
ValueError: need more than 1 value to unpack
回溯(最近一次呼叫最后一次):
文件“/var/www/python/programa.py”,第7行,在
脚本,long_barra,angulo=argv
ValueError:需要超过1个值才能解包
[Mon Nov 10 22:36:53 2014][error][client 192.168.1.3]PHP通知:未定义
索引:第22行/var/www/Maquina/programma.php中的longitud
[Mon Nov 10 22:36:53 2014][error][client 192.168.1.3]PHP注意:未定义索引:
angulo在第24行的/var/www/Maquina/programma.php中
[Mon Nov 10 22:36:53 2014][error][client 192.168.1.3]PHP注意:未定义索引:
第25行/var/www/Maquina/programa.php中的longitud
[Mon Nov 10 22:36:53 2014][error][client 192.168.1.3]PHP注意:未定义索引:
angulo位于第26行的/var/www/Maquina/programa.php中
回溯(最近一次呼叫最后一次):
文件“/var/www/python/programa.py”,第7行,在
脚本,long_barra,angulo=argv
ValueError:需要超过1个值才能解包
回溯(最近一次呼叫最后一次):
文件“/var/www/python/programa.py”,第7行,在
脚本,long_barra,angulo=argv
ValueError:需要超过1个值才能解包
programa.php上的脚本读取post值,但没有将argv传递给python脚本,我如何解决这个问题


提前发送

您的参数没有被传递到python的原因是
exec()调用中的单引号。这将向python发送文本字符串“$longitud”和“$angulo”,而不是上述变量的值。相反,使用双引号,PHP将用变量的值替换变量

因此,将您的
exec()
调用更改为:

$a=exec("sudo python /var/www/python/programa.py {$longitud} {$angulo}");
//      ^                 notice the double quotes                    ^    
在这种情况下,大括号是不必要的,但为了便于阅读,我建议使用大括号

或者,您可以直接从
$\u POST
访问值,而无需将值分配给变量,如:

$a=exec("sudo python /var/www/python/programa.py {$_POST['longitud']} {$_POST['angulo']}");

关于安全性的建议是,在基于web界面的用户输入执行命令时,如果使用escapeshellarg()进行过滤,则不要使用sudo。