对定义常量的这种奇怪行为有没有解释?
我有一个文件(config.php
),它保存了预定义的目录值,类似这样的
$dir = array
(
'core_dir' => 'includes',
'admin_dir' => 'admin',
'upload_dir' => 'uploads',
'template_dir' => 'templates'
);
define('SCRIPT_DIR', dirname(__FILE__).DIRECTORY_SEPARATOR );
foreach($dir as $name => $location)
{
if ( !is_dir($location) AND is_dir(SCRIPT_DIR.$location))
$dir[$name] = SCRIPT_DIR.$location;
}
define('CORE_DIR',$dir['core_dir'].DIRECTORY_SEPARATOR);
define('ADMIN_DIR',$dir['admin_dir'].DIRECTORY_SEPARATOR);
define('UPLOAD_DIR',$dir['upload_dir'].DIRECTORY_SEPARATOR);
define('TEMPLATE_DIR',$dir['template_dir'].DIRECTORY_SEPARATOR);
文件布局如下
+root_dir
|_index.php
|_config.php
+-includes
| |_javascript.js
+-admin
|_index.php
此文件随后包含在index.php和/admin/index.php中。当我在主目录中使用此常量时:
echo $config['site_url'].CORE_DIR.'js/javascript.js';
带有$config['site_url']
的是完整的网站网址。它完美地运作:
http://localhost/elearning/includes/js/javascript.js
//which means CORE_DIR = includes/
但是当我在admin目录下使用相同代码时,我得到:
http://localhost/elearning//home/bam/www-data/elearning/includes/js/javascript.js
//which means CORE_DIR = /home/bam/www-data/elearning/includes/ o.O
我知道基于配置,当未找到相对路径时,它将自动更改为之前的常量定义的绝对路径。但是,当在不同的目录上工作时,如何在同一台机器上运行相同的代码会产生不同的输出?
我的代码有问题吗?
任何帮助都将不胜感激。
答案 0 :(得分:1)
从index.php
运行时,由于条件
CORE_DIR
常量
if ( !is_dir($location) AND is_dir(SCRIPT_DIR.$location))
未得到满足(因为$location
存在)。
当你从另一个目录运行它时,is_dir($location)
不再是真的。
您应该删除第一张支票。也就是说,我不确定整个建筑是否有意义。为什么不从一开始就使用绝对URL?