2013-03-10 40 views
2

我正在建立一個依賴python 2.7通過php運行的大系統。這個電話總是這樣的:從PHP調用特定版本的python

exec('python test.py'); 

然而無論我做什麼PHP一直使用python 2.4來執行我的文件。由於系統的大小,我不能在編程中進行更改,但必須將「python」直接指向python2.7。

通過搜索我已經得出結論,我應該改變PHP環境。

echo getenv("PYTHONPATH"); // NOTHING 
echo getenv("PATH"); // /bin:/usr/bin 

我可以這樣做,通過putenv(例如:putenv("PATH=/usr/bin/python2.7:".$_ENV["PATH"]),但是PHP繼續運行的Python 2.4無論什麼我將其更改爲。

希望有人在那裏有一個簡單的解決方案:)

回答

0

另一種選擇,你可以在第一行腳本test.py中設置解釋器路徑test.py

#!/usr/local/bin/python2.7 

,但你需要做test.py可執行

chmod +x path_to_file/test.py 

和PHP作爲

exec('path_to_file/test.py'); 

附:運行爲了安全起見,專心的管理員有時會禁用服務器上的執行功能 disable_functions =「popen,exec,system,passthru,proc_open,shell_exec」......

+0

Python是來自大約100個不同的文件的exec,所以我將不得不改變系統,因爲該項目是一個大的git項目的一部分,並且已經在使用當前python調用的其他服務器上運行。我正在尋找的是一種方法來更改PHP環境路徑 – Bornakke 2013-03-10 20:02:29

+0

我不確定,但我閱讀了有關php.ini的選項python.append_path http://php.net/manual/en/ini.list。 php 或找到並替換你的exec(...)命令,像建議的 – san4o 2013-03-10 20:22:34

+0

python.append_path聽起來像一個很好的解決方案,但我可以改變,而不改變php.ini,如果是的話 - 如何? – Bornakke 2013-03-11 20:45:34

2

會不只是這樣做,而不是:

exec('/usr/bin/python2.7/python test.py'); 
+0

Python是來自大約100個不同文件的exec,所以我將不得不改變系統。 – Bornakke 2013-03-10 18:45:00

+0

@Bornakke構建一個shell腳本來搜索和替換你的表達式應該是非常簡單的,可以在改變它們之前選擇要求你的批准。 – MattDMo 2013-03-10 19:53:14

+0

不能這樣做。該項目是一個大型git項目的一部分,已經在使用當前python調用的其他服務器上運行。我正在尋找的是一種改變PHP環境路徑的方法。 – Bornakke 2013-03-10 19:59:42

0

如果您不能使用全路徑,嘗試一個別名:

alias python='/usr/bin/python2.7' 
python --version 
Python 2.7.2 
+0

別名在終端中工作,當我在這裏運行python時,我得到正確的版本。但Alias並沒有改變PHP使用python的方式。 – Bornakke 2013-03-10 18:46:45

+0

您是否嘗試爲運行Web服務器的用戶(nobody或www-data)設置別名? – 2013-03-10 18:57:49

+0

是的。但它已經是同一個用戶。但是PHP不會使用別名,因爲env。路徑是在php.ini中定義的。 – Bornakke 2013-03-10 20:01:39