2013-07-19 104 views
0

我正在使用亞馬遜ec2 obunto微型實例。我寫了一個php代碼,它執行一個python代碼並返回一個簡單字符串的結果。當我在obuntu終端上執行它時,它完美地顯示了結果,但是當我通過瀏覽器訪問它時,它不顯示任何內容。 我不知道爲什麼。實際上它不能執行python腳本。亞馬遜ec2上的PHP和Python

$ tmp = exec('/ usr/bin/python /var/www/similarity.py employee/unemployed/waiter');

如果anyonw可以幫助我,我會非常感激。 PS:我使用的是一本mac專業版,當我在我的電腦的本地主機上使用相同的代碼時,一切都很完美

+1

分享代碼! – msturdy

回答

0

這是訪問python文件的權限問題。當你運行它通過服務器python腳本訪問作爲apache用戶(最有可能的www數據)。所以apache用戶沒有權限執行python文件。

你可以做的是以sudo的方式運行這個命令,並在/ etc/sudoers文件中添加對apache用戶(www-data)的所有必要的訪問權限,如下所示。

www-data ALL=NOPASSWD:/var/www/similarity.py 
www-data ALL=NOPASSWD:/usr/bin/python 

這只是示例,您應該根據您的環境更改此行。

1

經過很多「撓頭」之後,我終於弄明白了。

首先,你需要找出執行php的當前用戶。你可以檢查php.info文件或使用

$processUser = posix_getpwuid(posix_geteuid()); 
print $processUser['name']; 

這會給你正在執行代碼的用戶。在我的情況下,它是apache而不是www-data(我不應該首先假設)。

那之後,你就需要在那裏編輯sudoers文件(etc/sudoers)

添加的行。

如果您想具體說明,您可以使用@Janith的代碼。

apache ALL=NOPASSWD:/var/www/similarity.py 
apache ALL=NOPASSWD:/usr/bin/python 

,或者你可以簡單地添加

apache ALL=(ALL)  NOPASSWD:ALL 

(你或許應該只是指定路徑)。

然後通過php執行腳本。