这几天在看codeigniter的代码,其中有段代码不是很理解: $system_folder = "system";
$application_folder = "application";
if (strpos($system_folder, '/') === FALSE)
{
if (function_exists('realpath') AND @realpath(dirname(__FILE__)) !== FALSE)//====就这一块====
{
$system_folder = realpath(dirname(__FILE__)).'/'.$system_folder;
}
}
else
{
// Swap directory separators to Unix style for consistency
$system_folder = str_replace("\\", "/", $system_folder);
}我觉得__FILE__已经可以返回文件的绝对路径,然后再用dirname()去除文件名就可以了,根本就没必要再加个realpath()
可是我想编这代码的人比我牛多了,肯定不会放低级错误,应该是realpath()还有什么别的作用,在这想问问大家,谢谢了
$application_folder = "application";
if (strpos($system_folder, '/') === FALSE)
{
if (function_exists('realpath') AND @realpath(dirname(__FILE__)) !== FALSE)//====就这一块====
{
$system_folder = realpath(dirname(__FILE__)).'/'.$system_folder;
}
}
else
{
// Swap directory separators to Unix style for consistency
$system_folder = str_replace("\\", "/", $system_folder);
}我觉得__FILE__已经可以返回文件的绝对路径,然后再用dirname()去除文件名就可以了,根本就没必要再加个realpath()
可是我想编这代码的人比我牛多了,肯定不会放低级错误,应该是realpath()还有什么别的作用,在这想问问大家,谢谢了
$path = "/etc/passwd";
$file = dirname($path); // $file is set to "/etc"
?>
<?php
//before PHP 4.3.0
dirname('c:/'); // returned '.'
//after PHP 4.3.0
dirname('c:/'); // returns 'c:'
?> <?php
chdir('/var/www/');
echo realpath('./../../etc/passwd');// /etc/passwd
?>
是不是因为.的问题?
dirname(__FILE__) 也可能返回一个 . (当前目录) [原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下
可是我不知道这返回的 . ,realpath()会如何处理,现在尝试中》。
<?php var_dump(__FILE__);
var_dump(dirname(__FILE__));
var_dump(realpath(dirname(__FILE__)));
var_dump(dirname('C:\\'));
var_dump(dirname("C:/"));
var_dump(realpath(dirname("C:\\")));
var_dump(realpath(dirname("C:/")));
?>
<?php
//before PHP 4.3.0
dirname('c:/'); // returned '.'
//after PHP 4.3.0
dirname('c:/'); // returns 'c:'
?> 这是我刚刚用来测试的代码
结果是:
string(11) "F:\test.php"
string(3) "F:\"
string(3) "F:\"
string(3) "C:\"
string(3) "C:\"
string(3) "C:\"
string(3) "C:\"没有想要的效果,那个 . 始终没有出现.....