2011-06-07 91 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