2014-11-14 59 views
0

m停留在一个python脚本的web界面,问题是我需要读取用户的输入,并将它们作为参数值运行在python脚本上,但它不工作继承人我的代码python arg values from php

的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; 
    ?> 

我参观了错误日志和印刷我这个

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 

上programa.php脚本读取后的值,而是犯规传递的argv到Python脚本,我怎么能提前解决这个

TX

+0

只是一个建议的基础上,根据用户输入执行命令时,不要使用sudo一个Web界面,如果你用escapeshellarg()过滤。 – Jonnycake 2014-11-14 22:26:16

回答

0

您的参数未传递给python的原因是您的exec()调用中的单引号。这将向python发送字符串“$ longitudinal”和“$ angulo”,而不是所述变量的值。相反,使用双引号,PHP将用它们的值替换变量。

所以,你的电话exec()改变:

$a=exec("sudo python /var/www/python/programa.py {$longitud} {$angulo}"); 
// ^    notice the double quotes     ^ 

花括号没有必要在这种情况下,但我建议他们可读性。

或者,您也可以直接从$_POST访问值,而像这样分配给变量:在关于安全

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