2012-04-24 32 views
4

我平時喜歡這個是否可以使用PHP CLI獲取* .sh文件並在PHP腳本中訪問導出的Env vars?

. ./myscript.sh 

的Linux源在bash終端* sh文件運行一個命令行PHP腳本之前,所以我可以訪問使用PHP的$ _ SERVER超級全球出口環境變量。

是否可以從PHP腳本本身獲取sh文件,然後訪問其導出的變量?

我已經嘗試了各種各樣的沒有成功。我試過

system('. ./myscript.sh') 
system('sh ./myscript.sh') 

exec('. ./myscript.sh') 
exec('sh ./myscript.sh') 

shell_exec('. ./myscript.sh') 
shell_exec('sh ./myscript.sh') 

使用這些,導出的變量不會出現在$ _SERVER中。

任何想法?

回答

4

您的變量不可用,因爲它們存在的shell已退出。您需要從同一個shell中執行PHP才能獲得它的變量。

無論是編輯myscript.sh來設置瓦爾後推出的PHP腳本:

export VAR1=1 
export VAR2=2 
php -f /path/to/script.php 

,或者編寫源文件的另一個包裝腳本,然後從同一個shell啓動PHP:

. ./myscript.sh 
php -f /path/to/script.php 

編輯:或者就這樣運行你的腳本:

. ./myscript.sh && php -f /path/to/script.php 
0

首先,如果你是cr吃一個命令行php腳本,我不知道你會在$ _SERVER數組中獲得多少個env變量。

你可能想嘗試使用getenv()功能:http://www.php.net/manual/en/function.getenv.php

此外,到源文件,你嘗試過這樣做?:

exec('source ./myscript.sh') 

讓我知道如果任何的幫助!

1

將文件發送到shell(例如bash)需要shell正在運行,它只是讀入該文件並解釋它。當您從shell命令行運行php時,它將分離出一個繼承環境的單獨進程。當該進程結束時,它會拋出可執行文件的內存佔用,包括環境。

至於讓PHP執行一個腳本,它會做相同的 - 爲bash(例如)創建separatete過程和獲取過程中的腳本讀取,解釋它,遵循它的字母命令,然後當它這個過程將隨着它所做的環境變化而終止。

因此,一個可能的解決方案是做到以下幾點。

  1. PHP腳本需要確定它在文件系統中的位置。
  2. PHP腳本需要確定它是否自稱它。
  3. 如果腳本是不是調用自己,運行一個bash腳本來設置環境,添加一個額外的環境變量,以使它可以確定它不會再次沿着這條路線並執行它。也許使用類似popen火成bash命令sourceexportexec php
  4. 如果是素文字自稱,只執行

似乎很多的麻煩。只需編寫一個腳本來設置環境,然後啓動PHP。

相關問題