2012-02-20 30 views
1

我在寫一個web應用程序,它將使用HTML來顯示錶單。然後用戶完成表單,並在提交時將表單發送到PHP。在PHP文件中,我已經設置了對將返回數據的Python文件的調用和exec()命令。但由於某種原因,我沒有得到任何回報。當我在終端中執行命令時,它工作的很好,但我們沒有在網絡瀏覽器中運行響應。爲什麼我的PHP exec()在嘗試調用Python函數時工作?

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 2012-02-20 15:56:57

+0

你確定你的服務器允許passthru嗎?如果是這樣,當你用一個更常見的內置命令嘗試它時會發生什麼?你有輸出嗎?也可以嘗試放入'error_reporting(-1);' – Mike 2012-02-20 15:57:16

回答

0

根據這一http://www.php.net/manual/en/function.passthru.php,您使用的是一個錯誤的方式直通。它是二進制數據...

此函數應在適當位置執行exec()或系統()的使用當從Unix命令輸出的 是需要被直接傳遞 回二進制數據瀏覽器。

嘗試執行exec()。

希望我有幫助。

+0

嘿...感謝您的建議。但是,我已經嘗試過,但仍然沒有任何迴應。 – amlane86 2012-02-20 16:00:25

0

確保不被safe mode停止。

確保您逃避您的論點。嘗試:

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

echo $response; 

如果問題仍然出現,您可以進一步確保錯誤報告調查是由地方這個在你的PHP腳本的頂部:

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

我不知道爲什麼它不工作,但你應該使用EscapeShellArgs和可能EscapeShellCmd

這將保護您免受任何狡猾的用戶輸入,並且他們往往會有助於確保EXEC實際工作正常。

而且把你傳遞到執行Exec到一個變量字符串,並呼應了該變量,然後剪切和粘貼精確的輸出入殼將經常幫助找出問題是什麼。

相關問題