one.php:(开始运行的入口)<?php
/**
 * index.php MyLocalShop 入口
 * 
 * @copyright (C)2013-2014 MyLocalShop
 * @license http://www.baidu.com/
 * @lastmodify 2013-01-07
 */
/**
 * 网站根目录路径
 * @var string
 */
define('LOCALSHOP_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
//echo LOCALSHOP_PATH;

require_once LOCALSHOP_PATH.'/base.php';
$mls = new MLS();
$mls->Load('front/includes/', 'dindex.phdp');  // 这是错误的,但为什么这里同样正确显示?
        $mls->Load('front/includes/', 'index.php');   // 这个才是真正文件名
?>
dir_list.php:(显示目录树结构用于在base.php中判断是否有该目录或文件)<?php
/**
 * 显示整个网站的目录树结构
 * @author Administrator
 *
 */
function dir_list() {
return array(
'admin' => array(
'css',
'images',
'includes' => array(
'libs'
),
'js'
),
'common' => array(
'config' => array(
'admin' => array(
'config.php'
),
'front' => array(
'config.php'
),
'config.php',
'dir_list.php'
),
'includes' => array(
'libs'
),
'js',
'languages' => array(
'en_US' => array(
'admin' => array(
'common.php'
),
'front' => array(
'common.php'
)
),
'zh_CN' => array(
'admin' => array(
'common.php'
),
'front' => array(
'common.php'
)
)
),
'templates' => array(
'Templates.php'
)
),
'front' => array(
'css',
'images',
'includes' => array(
'libs'
),
'js'
),
//'base.php',
//'index.php'
);
}
?>
base.php:(用于检查目录及文件名是否存在,存在则转向所指页面)<?php
/**
 * MyLocalShop 框架入口
 * @author Administrator
 *
 */
require_once LOCALSHOP_PATH.'/common/config/dir_list.php';

class MLS {
/**
 * 私有函数。判断是否存在该目录或文件,有则返回true,无则返回false
 * @param string $target 目录或文件
 * @return 若判断为文件类型则返回"beFile",若判断为目录类型则返回"beDir";若既不是文件也不是目录则返回 false。
 */
private function hasDirectoryOrFile($target) {
$dirs = MLS::load_all_directory();

foreach ($dirs as $key => $value) {
if (in_array($target, $value)) {
$suffix = substr($target, -1, 4);
if ($suffix === '.php')
/*if (strrchr('.php', $target) || strrchr('.html', $target) || strrchr('.htm', $target) || strrchr('.xhtm', $target) ||
strrchr('.xhtml', $target) || strrchr('.tpl', $target) || strrchr('.xml', $target) || strrchr('.xls', $target) ||
strrchr('.js', $target) || strrchr('.css', $target) || strrchr('.jpg', $target) || strrchr('.jpeg', $target) ||
strrchr('.gif', $target) || strrchr('.swf', $target) || strrchr('.fla', $target)) */{
// 判定为文件
return 'beFile';
}
else {
// 判定为目录
return 'beDir';

}
}
else
return false;
}
}



/**
 * 载入所有目录,用以判断某个目录或文件是否存在
 * @param none
 * @return none
 */
private static function load_all_directory() {
return dir_list();
}



/**
 * 载入某个目录的完整URL,并检查URL中每个单词是否为文件夹,若是则返回目录的完整URL
 * @param string $dir_url 目录组成的完整URL路径
 */
public function load_directory_url($dir_url) {
$dir_separated = explode('\\', $dir_url);

foreach ($dir_separated as $dir) {
if ($this->hasDirectoryOrFile($dir) === 'beDir')
$dir = $dir. '/';
}
return $dir;
}

/**
 * 载入某个文件
 * @param string $file
 */
public function load_file($file) {
if ($this->hasDirectoryOrFile($file) === 'beFile')
return $file;
}



/**
 * 把指定目录及文件组成一个完整的路径
 * @param string $dir_url 完整目录URL
 * @param string $file 文件
 * @return boolean 成功则返回true,失败则返回false
 */
public function Load($dir_url, $file) {
$url = $this->load_directory_url($dir_url).$this->load_file($file);
//echo $url;
header('Location: '.$url);
}
}
?>index.php:
<?php
/**
 * 前台页面首页文件
 * @copyright (C) 2013-2014 MyLocalShop
   * @license http://www.baidu.com/
   * @lastmodify 2013-01-07
 */ echo 234;
?>为什么运行one.php后无论文件名是否存在都显示:
浏览器URL栏:http://localhost/MyLocalShop/front/includes/
页面输出:234urlfilestringfunctiontemplates

解决方案 »

  1.   

    哦。。还有,差点儿忘了,dir_list.php中最下面那'base.php'和'index.php'是不要注释的,也是这样的情况
      

  2.   

    你的load函数 是要干什么的?是要组成一个文件路径?
    是要include还是location?
      

  3.   

    /**
             * 私有函数。判断是否存在该目录或文件,有则返回true,无则返回false
             * @param string $target    目录或文件
             * @return 若判断为文件类型则返回"beFile",若判断为目录类型则返回"beDir";若既不是文件也不是目录则返回 false。
             */
            private function hasDirectoryOrFile($target) {
            $dirs = dir_list();
            var_dump($dirs);