2017-08-28 43 views
1

我做了一個表單的數據輸入網頁。 我想在服務器上使用網頁中的值運行python腳本並在服務器上創建輸出文件。 現在我可以輸入數據並提交網頁。但是,然後python腳本不會在服務器上創建輸出文件。如何在php上運行python?

以下是我的腳本。

首先,我連接到的index.php,並輸入一些文字的形式,並提交

下面的index.php

<html> 
<body> 

<form action="1test.php" method="get"> 
<input type="text" name="name" /> 
<input type="submit" /> 
</form> 

</body> 
</html> 

其次,1test.php執行test.py使用形式index.php上的值。

下面是1test.php python腳本之前

<?php 
$name = $_GET['name']; 
$cmd = "python test.py " . $name; 
echo $cmd; 
exec($cmd); 
?> 

我的劇本工作。我可以在網上看到$ cmd值。但PHP不能執行Python。 python腳本具有執行權限。 最後,python腳本在服務器上創建文件。表單值將是python上的數組數據。

下面是test.py

import sys 
sip = sys.argv[1] 
with open("doc.txt",'w') as f: 
     f.write(sip) 
f.close() 
+0

我嘗試使用文件的完整路徑。但是不行。 – KJ9

+2

哪個用戶擁有python腳本?警惕命令注入,這不會很好。例如:'你好; rm ../ -rf' –

+0

python腳本擁有者是用戶。並且該用戶可以直接在服務器上執行腳本 – KJ9

回答

3

嘗試從stderr重定向錯誤stdin2>&1並捕獲退出代碼:

<?php 

$name = $_GET['name']; 
$cmd = escapeshellcmd("python test.py $name 2>&1"); 

echo "$cmd" . PHP_EOL; 

exec($cmd, $output, $return_var); 

echo "$return_var:" . PHP_EOL; 
print_r($output); 

$output是線的陣列。如果腳本返回0(值爲$return_var),則表示成功。