2011-06-07 94 views
0

夥計們我經常使用下面的代碼,但沒有正確理解函數的確切語義。 尤其適用於最後兩個str_replace函數。任何人都可以向我解釋這裏究竟發生了什麼(有一點細節)?以下php代碼的含義?

$this_file = str_replace('\\', '/', __FILE__); 
$doc_root = $_SERVER['DOCUMENT_ROOT']; 
$web_root = str_replace(array($doc_root, 'application/config.php'), '', $doc_root); 
$srv_root = str_replace('application/config.php', '', $doc_root); 

回答

5
  1. 用正斜槓/(變量之後未使用)更換反斜槓\
  2. 從服務器超全局獲取文檔根目錄(通常是Apache配置DocumentRoot指令)。
  3. 從文檔根字符串中替換文檔根或application/config.php的任何發生並將其存儲在$web_root(對我來說看起來像無用的代碼)。
  4. 從文檔根字符串中替換application/config.php的任何發生並將其存儲在$srv_root(再次看起來像無用代碼,因爲文檔根應該是目錄而不是文件)。

結論:這樣看來,代碼可以轉化成以下,並且沒有這些「計算」的實際上是必要的:

$doc_root = $_SERVER['DOCUMENT_ROOT']; 
$web_root = ''; 
$srv_root = $doc_root; 

或者更短:

$doc_root = $srv_root = $_SERVER['DOCUMENT_ROOT']; 
$web_root = ''; 
+0

好..我不能挑戰你因爲我相對較新的PHP,但我很確定它不是無用的代碼因爲當我尋找一個解決方案,我遇到了一個沒有。使用這種定義的網站。這裏是一個例子 - http://www.phpwebcommerce.com/source/library/config.php – digster 2011-06-07 15:58:11

+0

user597272:那是不一樣的。在剛發佈的那個例子中,它是在操作'$ thisFile',而不是'$ doc_root'。這將改變一切。 – netcoder 2011-06-07 16:01:37

+0

嗯...我現在明白你說什麼,但你能解釋我爲什麼在你修改後的代碼最後一行評價爲$ srv_root = $ doc_root? – digster 2011-06-07 16:04:49