2012-02-20 17 views
1

私はフォームを表示するためにHTMLを使用するWebアプリケーションを作成しています。その後、ユーザはフォームを完成させ、提出すると、フォームはPHPに送られます。 PHPファイルでは、データを返すPythonファイルを呼び出すためにexec()コマンドを設定しています。しかし何らかの理由で私は何も戻っていません。私は端末でコマンドを実行するとすばらしいが、ウェブブラウザでは応答がなかった。Python関数を呼び出すときに私のPHP exec()が動作しないのはなぜですか?

HTML:

<form id ="nameForm" action="python.php" method="post" target="_blank"> 
    <label>First Name:</label><input type="text" id="firstName" name="firstName"><br> 
    <label>Last Name:</label><input type="text" id="lastName" name="lastName"><br> 
    <input type="submit" id="submitName" value="Submit"> 
</form> 

PHP:

$firstName = $_REQUEST['firstName']; 
$lastName = $_REQUEST['lastName']; 

exec("/opt/http/PythonWeb/web/python pythonName.py " . $firstName . " " . $lastName, $response); 

echo $response; 

のPython:

import sys 

def main(): 
    firstName = sys.argv[1] 
    lastName = sys.argv[2] 

    output = "" 

    output += "<html>\n" 
    output += " <head><title></title></head>\n" 
    output += " <body>\n" 
    output += "  <p>Hi " + firstName + " " + lastName + "</p>\n" 
    output += " </body>\n" 
    output += "</html>\n" 

    print output 

if __name__ == '__main__': main() 

私に間違っているかもしれないものに関してはいくつかの提案をお願いします。私はPythonの初心者ですが、それは上司が望んでいるものなので...私はこの仕事をするつもりです。ありがとう!

+2

この目的のためにPHPとPythonを混在させるのはちょっとばかげているようです。私はあなたのアプリをPythonで書くか、PHPで書くことを提案しますが、両方ではありません。 – rdlowrey

+0

あなたのサーバーは 'パススルー 'を許可していますか?もしそうなら、より一般的な組み込みコマンドで試してみるとどうなりますか?出力が出ますか?また、 'error_reporting(-1);'を入れてみてください – Mike

答えて

0

このhttp://www.php.net/manual/en/function.passthru.phpによれば、間違った方法でパススルーを使用しています。 Unixコマンドから 出力はに戻って直接 を渡す必要があるバイナリデータがあるとき、それは

この関数は、EXEC()またはシステム()の代わりに使用する必要があります...バイナリデータのためでありますブラウザ。

Exec()を試してください。

希望しました。

+0

ねえ...提案に感謝します。しかし、私はそれを試みましたが、それはまだ応答がありません。 – amlane86

0

safe modeで停止していないことを確認してください。

あなたの議論をエスケープしてください。試してみてください:それはありませんなぜ私はよく分からない

ini_set('display_errors', 1); 
error_reporting(E_ALL); 
0

:問題が引き続き発生する場合は

$response = shell_exec("/opt/http/PythonWeb/web/python pythonName.py " . escapeshellarg($firstName) . " " . escapeshellarg($lastName)); 

echo $response; 

、あなたはPHPスクリプトの先頭で行われ、このことにより、上でエラー報告を確保することによって、さらに調査することができますEscapeShellArgs、おそらくEscapeShellCmdを使用する必要があります。

これらは、ユーザーの入力が邪魔になるのを防ぎ、execが実際に正しく動作するようにします。

また、 'Exec'に渡す文字列を変数に入れて、その変数をエコーし​​てから、正確な出力を切り取ってシェルに貼り付けると、問題の原因を突き止めるのに役立ちます。

関連する問題