2014-07-01 47 views
1

我一直在努力改進我的dev/live工作流程以獲得1:1奇偶校驗。我希望所有的東西在Dev(我的本地機器)上與在線(Web)上的相同。除了擁有一個不同的配置文件(包含不同的mySQL憑證)和一個不同的.htaccess文件之外,我希望網站的其他部分在我的實時環境中與其在我的開發環境中完全相同。 問題是我無法讓我的包含路徑在兩個環境中都以相同的方式解決。PHP:包含Dev和Live兩種工作方式的路徑

我有我的所有包括在此格式配置的:

包含路徑

$_SERVER["DOCUMENT_ROOT"] . /website1/includes/file.php 

的問題是,我活的服務器上,$_SERVER["DOCUMENT_ROOT"]不含/ WEBSITE1 /一部分,但在我的TEST服務器上,它確實如此。這意味着路徑解決不同的兩個環境:

直播:

/some/root/folder/website1/includes/file.php 

開發:

/some/root/folder/website1/website1/includes/file.php 

我已經有點被包含的文件複製到解決此工作一個名爲/ website1的子文件夾,用於MAMP開發環境。但是這顯然不理想,因爲它增加了不必要的開銷。每當我編輯其中一個包含的文件時,我必須確保在兩個位置都編輯該文件。

有沒有人有任何建議,使包含路徑相同的兩個環境,沒有重複的文件?我曾嘗試使用dirname(__FILE__),但這需要進行很多更改才能解決相對路徑。我嘗試了各種其他解決方案,例如試圖通過.htaccess,httpd.conf或php.ini更改包含路徑,但似乎沒有任何工作。我知道必須有一個簡單的解決方案,但我迷路了。理想情況下,我希望對本地環境進行任何配置更改,以避免篡改現場環境。

非常感謝!

+0

爲什麼不在配置文件中設置$ root_path並在應用程序的任何地方使用它? –

+0

配置文件也通過一個包含進來。 – AardvarkApostrophe

+0

$ some_root_folder其實意味着$ _SERVER [「DOCUMENT_ROOT」]它在兩個環境中不是相同的路徑 – AardvarkApostrophe

回答

1

有多種解決方案,但我建議下面這兩個。

*選項A *

1主配置文件,其中包含一個特定的環境文件。

<?php 
// main config 
define('ENV','dev'); // or define('ENV','prod'); 

require_once __DIR__ . '/config.' . ENV . '.php'; 

// ... 

環境促進發展的具體文件:

<?php 
// config.dev.php 
$path_to_includes = '/some/root/folder/website1/website1/includes'; 

// ... 

環境生產特定的文件:

<?php 
// config.prod.php 
$path_to_includes = '/some/root/folder/website1/includes'; 

// ... 

在PHP腳本:

<?php 
require_once "$path_to_includes/file.php"; 

// ... 

*選項B *

移動您的開發文件夾以匹配生產結構。

$ mv /some/root/folder/website1 /some/root/folder/website.old 
$ mv /some/root/folder/website.old/website1 /some/root/folder/website1 
$ rm /some/root/folder/website.old 

*選項C *

設置你的Apache2的DocumentRoot正確的價值。對於發展:

DocumentRoot /some/root/folder/website1 

對於生產:

DocumentRoot /some/root/folder 

畢竟,我建議你把所有的環境完全一致,並與配置文件中的權值參數化了。具有相同的項目結構有助於簡化調試問題,因此我的首選解決方案是選項B.

+0

對於選項B,如果我移動文件,我的apache虛擬主機將無法解析。但是,如果我更改文檔根目錄,問題會再次出現。 <虛擬主機*:80> \t服務器名\t website1.dev \t ServerAlias www.website1.dev \t的DocumentRoot 「/我的/路徑/到/ WEBSITE1」 AardvarkApostrophe

+0

對於第一種情況,它看起來像每一個PHP文件將不得不改變。是這樣嗎? – AardvarkApostrophe

+0

是的,使用新的$ path_to_includes變量。 –