2010-02-08 155 views
13

我想運行一個使用PHP的Python程序。代碼如下讓PHP運行一個Python腳本

$command = '/usr/local/bin/python script.py file'; 
$temp = exec($command, $output); 

這可以通過命令行工作,但不通過瀏覽器運行。我正在使用Apache,因此它可能需要正確的權限?我對Linux非常陌生,不知道如何讓它工作。

任何幫助,將不勝感激!

編輯1:

儘量選用proc_open但沒有任何反應。我給了腳本的完整路徑。使腳本可執行但沒有運氣。任何其他的事情,我可以嘗試在服務器上? (這是一個CentOS 5)

+0

不要做這樣的,如果你有任何真正的流量。運行一個新的python腳本(不含mod-python)會讓你付出沉重的代價。設置一個單獨的,長期運行的python服務器(xml-rpc服務器?),如果需要擴展,則使用IPC來調用它。 – wisty 2010-02-08 07:25:30

+0

謝謝!只是想把這個做成一個演示。然而,要解決mod_wsgi/mod_python – Abhinav 2010-02-08 11:54:23

回答

6

您需要將完整路徑傳遞給腳本,並且還需要確保腳本可以由運行Web服務器的用戶讀取(這意味着路徑中的每個目錄都必須爲Web用戶的+ x)。

+0

做了這兩件事情。不工作。:( – Abhinav 2010-02-10 13:52:19

+0

只是爲了涵蓋所有的基礎,你實際上正在打印$輸出,對嗎?你還應該試着找出你的web服務器是否正在運行chroot。 – jdizzle 2010-02-10 20:06:33

2

幾個檢查站

  • script.py應通過完整的路徑,例如,/home/abhinav/script.py
  • script.py應該是可執行的,chmod +x script.py
+4

「script.py應該是可執行的」,而不是解釋器被調用。 – LiraNuna 2010-02-08 06:48:57

+0

謝謝,'#!/ usr/local/bin/python'需要在第一行script.py – YOU 2010-02-08 06:50:17

+1

如果您使用解釋器來調用腳本('python ') – ZeissS 2010-02-08 07:48:01

6

意識到什麼是錯的:

  1. 域名已設置爲虛擬主機,並啓用了PHP的safe_mode設置。 proc_open,exec,system,passthru等不能在safe_mode下工作我想。

  2. 將腳本放入vhost可訪問的目錄中。 Apache無法訪問vhost文檔根目錄之外的目錄。

感謝您的幫助!

+0

你能解釋你如何設置第2點的權限嗎? – slash89mf 2016-09-19 20:16:28

0

爲了讓我的CodeIgniter助手運行一個python腳本,我不得不將#!/ usr/bin/python放在我的python腳本的第一行,而不是從exec調用python。

+1也做搭配chmod + X

幫助我的是這樣的:

<?php 
    function scrape($site, $key, $user_id) 
    { 
     $cmd = str_replace('system/','',BASEPATH).APPPATH."python/spider.py -u $site -k $key -i $user_id"; 
     $resp = exec($cmd, $out); 
     return $out; 
    } 
?>