2015-08-24 55 views
2

從PHP腳本中,我想運行一個Perl腳本。我可以從終端做到這一點(作爲root用戶),但是當從我的應用程序(www-data用戶)運行時,我不能。無法從PHP/Apache中找到Perl腳本

在localhost上開發應用程序時,我也可以做到這一點,但是當我切換到另一臺服務器時出現了問題。

我的網頁使用AJAX POST請求調用PHP腳本,該腳本適用於我的其他PHP腳本,它們不會調用Perl。

system("/filepath/file.pl"); 
exec("/filepath/file.pl"); 
passthru("/filepath/file.pl"); 

服務器上的Apache日誌主辦我的應用程序會顯示以下錯誤:

sh: /file.pl: not found 

在運行以下

我都沒有成功試圖在我的PHP腳本下面的命令代碼在我的服務器上我看到網絡用戶被視爲萬維網數據:

ps aux | grep apache 

要測試,我還設置了我的應用程序使用的所有文件和目錄的權限,以允許任何用戶使用chmod 777進行任何類型的訪問。

請注意:我的應用程序僅適用於某些用戶(我使用.htaccess文件來設置這些權限,並要求用戶登錄),所以如果有辦法改變服務器如何看到這個用戶(從www-data到登錄用戶的憑證),那麼也許會這樣幫助 - 我將如何做到這一點?

+0

'/ filepath'會啓動驅動器文件系統的ROOT,例如''C:\''。如果'/ filepath'是你的網站的根,那麼這是行不通的。您需要包含整個路徑:'/home/user/sites/example.com/public_html/filepath/file.pl'-類型 –

+0

「找不到」確實表示權限問題? –

回答

0

嘗試是這樣的

exec("/usr/bin/perl /full-path/script.pl",$output); 
+5

爲什麼OP要「試試這個」?一個好的答案將總是解釋做了什麼以及爲什麼這樣做,不僅是爲了OP,而且是爲了將來SO的訪問者。 –

0

感謝所有的建議!最後,它與在服務器上的Apache目錄下的php.ini文件託管我的應用程序的安全設置了一個問題:

/etc/php5/apache2/php.ini 

安全模式設置「上」來,這是防止PHP文件訪問/執行任何本地文件。 (PHP腳本在嘗試訪問另一個非腳本文件other.html時也失敗了)。

爲了解決這個問題無需拆卸安全模式設置爲我的服務器上的所有應用程序,我改變了上面的php.ini文件,包括以下內容:對這些配置變量

safe_mode: on 
safe_mode_include_dir: /filepath 
safe_mode_exec_dir: /filepath 

更多信息可以在這裏找到: http://php.net/manual/en/ini.sect.safe-mode.php