2013-11-05 14 views
7

フォームの情報を使用する単純なアプリケーションを作成し、$ _POSTを使用してPHPスクリプトを実行し、結果を出力するPHPスクリプトに渡します。私が午前の問題は、私のPythonスクリプトは、実際に渡される引数を指定して実行されていないことであるPHP変数を使用してPythonスクリプトを実行

process3.phpファイル:。

<?php 
    $start_word = $_POST['start']; 
    $end_word = $_POST['end']; 
    echo "Start word: ". $start_word . "<br />"; 
    echo "End word: ". $end_word . "<br />"; 
    echo "Results from wordgame.py..."; 
    echo "</br>"; 
    $output = passthru('python wordgame2.py $start_word $end_word'); 
    echo $output; 
?> 

出力:

Start word: dog 
End word: cat 
Results from wordgame.py... 
Number of arguments: 1 arguments. Argument List: ['wordgame2.py'] 

の上部に私のwordgame2.py、私は次の(デバッグの目的のために):

#!/usr/bin/env python 
import sys 
print 'Number of arguments:', len(sys.argv), 'arguments.' 
print 'Argument List:', str(sys.argv) 

私はなぜですか?引数が渡された= 3? (はい、私のフォームからデータが正しく送信されます)

何か助けていただければ幸いです!

編集:私は明示的に開始と終了の単語を教えてくれたとき、私はそれを実行しないことを追加される場合があります...このような何か:

$output = passthru('python wordgame2.py cat dog'); 
echo $output 
+0

あなたのPHPファイルで 'echo 'python wordgame2.py $ start_word $ end_word''を見るとどうなりますか? – GWW

+0

は、その行を追加した後、それは今出力: スタートの単語を:犬 終了ワード:猫wordgame.pyから 結果... のpython wordgame2.py犬猫引数の 数:1つの引数。引数リスト:['wordgame2.py'] – Micah

+0

間違いは '$ output = passthru( 'python wordgame2.py $ start_word $ end_word');'これを試してみてください '$ output = passthru( 'python wordgame2.py' 。$ start_word。 ""$ end_word); 'おそらく、Pythonは$ keywordのために引数を拒否しているかもしれません(または$が変数の再読み込みのためにシェルを呼び出すかもしれません) –

答えて

9

がアップデート -

今、私は承知していますということPHPの間違いは、一重引用符を使用することにある'。 PHPでは、単一引用符で囲まれた文字列はリテラルと見なされますが、PHPはその内部のコンテンツを評価しません。しかし、二重引用符の"文字列が評価され、期待通りに動作します。これはthis SO answerに美しく要約されています。我々の場合には、

$output = passthru("python wordgame2.py $start_word $end_word"); 

は動作しますが、以下ではないだろう -

$output = passthru('python wordgame2.py $start_word $end_word'); 

オリジナルの答え -

私はミスが

$output = passthru("python wordgame2.py $start_word $end_word"); 

にあると思います試してみてください

$output = passthru("python wordgame2.py ".$start_word." ".$end_word); 
+1

明示的な解決法は"の代わりに "を使用していませんか?補間。 –

+0

うーん... PHPにはあまり慣れていないので、私の答えは*で始まると思います。* –

+1

また、連結時に渡された2つの引数に 'escapeshellarg()'を使うのも良いでしょう。 – Terry

1

あなたの貢献に感謝します。私はこの簡単な修正で自分の問題を考え出した:

$command = 'python wordgame2.py ' . $start_word . ' ' . $end_word; 
$output = passthru($command); 

適切にPHPの変数を処理するパススルーためには、それが実行される前に文字列に連結する必要があります。

+2

あなたの答えを掲示する代わりに、ashishの答えですが、彼の答えを受け入れてください。 – aIKid

+0

私は彼の答えを見る前にこれを投稿しました。タイムスタンプを見てください。 – Micah

+0

実際、私は7秒前に答えました:) downvoteは不必要/未確認でした。 –

関連する問題