2016-04-03 8 views
-2

いくつかの単純な組み込みPHPをHTMLに書き込んでPythonスクリプトを実行します。このスクリプトは、HTMLフォームでの複数のファイル入力の可能性に基づいてスクリプトを複数回実行します。単体ではうまく動作しますが、複数のファイルを実行しているときにはそれを繰り返すように見えますが、Pythonスクリプトで受け取った変数は最初は間違っているようです。なぜこれをやっているのか分かりませんが、それははっきりと分かります。すべての助けに感謝します。exec()とPythonスクリプトに渡す変数の問題

$len = count($_FILES["inputFile"]["name"]); 
echo "length"; 
echo $len; 

for($i = 0; $i < $len; $i++){ 
    $dataIn = $_FILES["inputFile"]["tmp_name"][$i]; 
    $originalName = $_FILES["inputFile"]["name"][$i]; 
    echo "TMP Name:"; 
    echo $dataIn; 
    echo "OriginalName"; 
    echo $originalName; 
    exec("python /home/will/public_html/OrderAnalyser.py '$dataIn' '$originalName' 2>&1",$output); 
    foreach ($output as $out){ 
     echo $out; 
     echo "<br />"; 
    } 
} 

出力は次のようになります。ここに見られるように、それは最初のファイル(micro_b001.json)で終了したら、それはmicro_b002上に移動する必要があり、

Executing... 

length2TMP Name:/var/www/tmp/phpHzJFtQOriginalNamemicro_b001.jsonAnalysis Starting on file: 
Input File: /var/www/tmp/phpHzJFtQ 
Original Name: micro_b001.json 
"nodeID":20, 

firstNode: 
20 
Finished Finding Argument Order, 
List is as follows: 
['20', '21', '22', '23', '24'] 
Top Node is: 
24 


There is NO subargument of node: 
24 


Analysis Complete 
TMP Name:/var/www/tmp/php9vQumSOriginalNamemicro_b002.jsonAnalysis Starting on file: 
Input File: /var/www/tmp/phpHzJFtQ 
Original Name: micro_b001.json 
"nodeID":20, 

firstNode: 
20 
Finished Finding Argument Order, 
List is as follows: 
['20', '21', '22', '23', '24'] 
Top Node is: 
24 


There is NO subargument of node: 
24 


Analysis Complete 
Analysis Starting on file: 
Input File: /var/www/tmp/php9vQumS 
Original Name: micro_b002.json 
"nodeID":20, 

firstNode: 
20 
Finished Finding Argument Order, 
List is as follows: 
['20', '21', '22', '23', '24'] 
Top Node is: 
22 


20 
is child of 
22 


21 
is child of 
22 


Subargument of node: 
22 
is: 
Post Order 


There is NO subargument of node: 
20 


There is NO subargument of node: 
21 


Analysis Complete 
Completed... 

。 PHPのエコーは、PHPの変数が正しいことを示していますが、pythonスクリプトから見たプリントでは、最初の変数(micro_b001)から再び実行されていることがわかります。なぜこうなった?あなたが見ることができるように、何らかの理由で再び最初のものを実行したら、実際には2番目のものを正しく実行してから終了します。それはなぜこの奇妙な繰り返しを行うのですか?私はそれを理解できません。

(また、私はなど、これは脆弱なコードで実現し、それは今重要ではありません)

答えて

5

(設計通りに壊れた)exec機能が追加与えられた配列へのコマンドの出力を:

パラメータ

...

output

引数がある場合、指定された配列はコマンドの出力行ごとに入力されます。 \nのような末尾の空白は、この配列には含まれません。 配列にすでにいくつかの要素が含まれている場合は、exec()が配列の末尾に追加されることに注意してください。関数が要素を追加しないようにするには、配列のunset()を呼び出してからexec()に渡します。

(強調鉱山)


このように、あなたのpythonプログラムが正常に2回実行されます。 2番目のループでは、最初のコマンドの出力はまだ$outputに存在し、2番目のコマンドの出力がこれに追加されます。

修正する必要があります:

unset($output); 
exec("python /home/will/public_html/OrderAnalyser.py '$dataIn' '$originalName' 2>&1",$output); 
+0

は、私はできるだけ早くこれを試してみてます、ありがとうございました。申し訳ありません、私はPHPで非常に経験がありません – SneakySpriggs

+1

@SneakySpriggsは謝罪しません。予期せぬことにPHPが期待しています。 –

関連する問題