2012-10-05 40 views
0

我有一個網站。這是這樣設置的:Web服務器和Cron作業 - 使用相同的通用文件?

/public_html 
    index.php 
    common.php 
    db.php 
    /dev 
     index.php 
     common.php 
     db.php 

common.php包含循環功能。 Db.php包含數據庫連接信息。

common.php還包含用於確定當前正在訪問的頁面處於「開發」或「生產」中的天氣的函數。然後它使用這個信息來相應地調用包含文件。

問題是,我也有一些Cron Jobs設置,它調用位於public_html之外的Php腳本。但是沒有一個包含工作,因爲確定路徑的函數使用$_SERVER變量,並且依賴URL的部分(如'/ dev'這個詞的存在)。

那麼,我是否最好爲我的Cron Jobs(數據庫連接和函數)創建一個單獨的文件集,即使它們可能在網站的其他部分複製相同的文件?

+0

您可以重寫您的cron以使用wget或curl並訪問頁面並實際在會話中運行。 。 。 – ernie

回答

0

您可以使用OS環境變量來設置腳本的執行環境。

的crontab:

MYAPP_ENV=production 
# min hr dom mon dow command 
    0 * * * * php /var/www/myapp/scripts/cron.php 

腳本:

$environment = env('MYAPP_ENV'); 
+0

我實際上從來沒有使用過環境變量,所以我必須做一些閱讀,因爲這對我來說並沒有多大意義。謝謝,我會看看! – djt

+0

好的,所以我理解環境變量如何在htaccess文件中工作,設置我的'dev'和'production'環境,但是我仍然沒有看到如何幫助我的cron作業。 – djt

+0

在我的示例中上面,我在crontab的第一行設置了一個環境變量。這個變量在crontab執行的所有腳本中都可用。 – deizel

0

您可以確定相對於common.php的路徑,使用dirname(__FILE__)獲取common.php的完整路徑,然後相對於此確定所有其他路徑。根據我的經驗,這是確定路徑的最便捷的方式,因爲它不需要服務器或操作系統合作。

從PHP 5.3開始,您可以使用__DIR__而不是dirname(__FILE__)來獲取當前文件所在的目錄。

0

我會改變你如何確定環境對於初學者。服務器(環境)variables是一個很好的方法。你可以使用apache或者htaccess文件輕鬆地在vhost級別設置它們。

相對路徑和chdir(dirname(__ FILE__));可以解決您的路徑問題。

似乎你理解了這個問題,並且在此請求允許你做一些讓你感覺髒的事情:)不要不必要地複製東西。請重新考慮您的代碼。