2014-11-14 3 views
0

m 파이썬 스크립트 용 웹 인터페이스에서 멈추었습니다. 사용자로부터 입력을 읽고 파이썬 스크립트에서 인수 값으로 실행해야하지만 코드가 작동하지 않습니다.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; 
    ?> 
,536,913,632 10

나는 오류 로그를 방문하여 나에게 인쇄이 내가 미리이

텍사스를 해결할 수있는 방법을

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를 통과 나던,

+0

그냥 제안을 보안에 관해서 :

또는, 당신과 같이 변수에 값을 지정하지 않고 $_POST에서 직접 값을 액세스 할 수 있습니다 웹 인터페이스 및 escapeshellarg()로 필터링 할 경우. – Jonnycake

답변

0

인수가 파이썬에 전달되지 않는 이유는 exec() 호출의 작은 따옴표입니다. 이것은 파이썬에게 리터럴 문자열 "$ longitudinal"과 "$ angulo"를 보내고, 변수의 값은 아닙니다. 대신 큰 따옴표를 사용하면 PHP가 변수를 해당 값으로 대체합니다. 중괄호는이 경우에 필요하지 않습니다

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

,하지만 난 가독성을 위해 그들을 추천 :

그래서, 당신의 exec() 전화를 변경합니다. 에서 사용자 입력을 기반으로 명령을 실행할 때 sudo를 사용하지 마십시오

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