2010-12-17 34 views
0

我正在構建一個網站,該網站每天都會運行一系列cron任務來更新隨後在站點中使用的數據庫中的信息。我有三種環境設置:開發(我的電腦),分級和生活。共享主機上的帳戶和活動都是帳戶。我遇到的問題是根據運行代碼的環境來決定使用哪個數據庫訪問憑據。理想情況下,所有三個都將具有相同的憑據,但由於暫存和生命都在共享服務器上,所以我無法控制數據庫的名稱。我在我自己的計算機上鏡像了實時數據庫名稱和訪問憑據,但我無法在分段上執行此操作。檢測登臺服務器上是否正在運行Cron作業

我想要做的是自動選擇正確的環境正確的憑據時,我的cron任務運行,這樣的事情:

if(environment === staging) { 
    //define db access constants for staging here 
else { 
    //define db access constants for live or dev here 
}} 

通常對於這樣的事情我會使用$ _ SERVER [ 'SERVER_NAME'],但是因爲這是在Cron中運行的$ _SERVER auto global不可用。我如何檢測腳本在cron作業中運行的環境?

回答

1

你可以把一個額外的環境變量crontab文件:

STAGING=1 

,然後檢查$_ENV['STAGING'] == 1

甚至

HOSTING_ENV=PRODUCTION 

,然後檢查$_ENV['HOSTING_ENV'] == 'PRODUCTION'

+0

訪問數組時應該是''''''''''而不是''''''''。 – scoates 2010-12-17 14:53:23

+0

謝謝,我認爲這只是給了我解決方案。我使用$ argv中顯示的命令行參數將變量傳遞到腳本中。我只是在分期中傳遞一個額外的參數,並用它來決定使用哪個憑證。 – Jeremy 2010-12-17 14:53:42

+0

我應該說明我無權訪問crontab文件,因爲我只能通過CPanel接口訪問服務器。 – Jeremy 2010-12-17 15:10:30

1

ajreal和gms8994都很好的環境變量解決方案。另一種方法是使用php_uname()獲取當前的主機名:由一個域調用它,而由PHP命令行

您都能夠通過檢測平臺

[email protected]:~$ php -r 'echo php_uname("n") . "\n";' 
gimmebarvm-sean 
+0

謝謝肖恩,那也是個好主意。 – Jeremy 2010-12-17 15:01:16

1

運行通過WGET你的cron其域

相關問題