Php 定义常数的意外更改';s值
对定义常数的这种奇怪行为有什么解释吗? 我有一个文件(Php 定义常数的意外更改';s值,php,constants,Php,Constants,对定义常数的这种奇怪行为有什么解释吗? 我有一个文件(config.php),其中保存了预定义的目录值,类似这样 $dir = array ( 'core_dir' => 'includes', 'admin_dir' => 'admin', 'upload_dir' => 'uploads', 'template_dir' => 'templates' ); define('SCRIPT_DIR', dirname(_
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\u url']
是完整的站点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
我知道,基于配置,当未找到相对路径时,它将在定义的常量之前自动更改为绝对路径。但为什么在同一台机器上运行的同一代码在不同的目录下工作时会给出不同的输出呢
我的代码有问题吗
如果有任何帮助,我们将不胜感激。当您从
index.php
运行此命令时,不会添加CORE\u DIR
常量,因为条件
if ( !is_dir($location) AND is_dir(SCRIPT_DIR.$location))
未满足(因为存在$location
)
当您从另一个目录运行它时,is_dir($location)
不再为真
您应该删除第一个复选框。也就是说,我不确定整个建设是否有意义。为什么不从一开始就使用绝对URL 从
index.php
运行此函数时,不会添加CORE\u DIR
常量,因为条件
if ( !is_dir($location) AND is_dir(SCRIPT_DIR.$location))
未满足(因为存在$location
)
当您从另一个目录运行它时,is_dir($location)
不再为真
您应该删除第一个复选框。也就是说,我不确定整个建设是否有意义。为什么不从一开始就使用绝对URL 为什么这样做:if(!is_dir($location)和is_dir(SCRIPT_dir.$location))?@Pies:我的错,这是为了处理相对/绝对包含路径,在URL构建中使用时确实非常无用。为什么这样做:if(!is_dir($location)和is_dir(SCRIPT_dir.$location))?@Pies:我的错,这是用来处理相对/绝对包含路径的,在URL构建中使用时确实毫无用处。不管我最后的评论是什么,我必须做一些变通,以确保最终成功。谢谢你的更正:)别介意我的最后一句话,我必须做一些变通的广告最终成功。谢谢您的更正:)