如何解决多重包含的问题?

wjjchen 2004-12-03 02:00:26
一个文件include其他文件,而他本身又有可能被其他不同目录的文件所include,如果使用相对路径就会出错,绝对路径又因为程序可能会放在不同的目录中,这是该怎么解决阿?使用$_SERVER['DOCUMENT_ROOT']也是不行的,因为程序不一定就放在$_SERVER['DOCUMENT_ROOT']的根目录下。
...全文
172 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ice_berg16 2004-12-04
会阿,比如说目录结构是:
/class/class1.inc.php
/db/db1.inc.php
/test.php

class1.inc.php 中include(dirname(__FILE__)."/../db/db1.inc.php"),
test.php中:include(dirname(__FILE__)."/class/class1.inc.php"),

使用dir(__FILE__)来取得当前文件的绝对路径,再根据当前文件的路径进行包含

回复
-神仙- 2004-12-03
include("./class/class1.inc.php"),
改成
include("class/class1.inc.php"),
可以吗
回复
hflsj 2004-12-03
顶一下
回复
wjjchen 2004-12-03
我也只是举个这样的例子而已,不一定就是类中的问题啊。
回复
xuzuning 2004-12-03
这只能说是你的文件组织有问题
1、
/db/db1.inc.php
应该也是类,同样应放在/class中
引用时只需include 'db1.inc.php';

2、在类中嵌入与类本身没多大关系的文件是不可取的,这使得类失去通用性
如果/class/class1.inc.php中确实需要/db/db1.inc.php
也应该在test.php中
include 'db/db1.inc.php';
include 'class/class1.inc.php';
回复
Rekcuf 2004-12-03
要说加一个目录转换或者一个目录定义都麻烦,就没辙啦。

要说你的目录组织得好,就不会出现太多这种嵌套啦。GOOD LUCK。
回复
wjjchen 2004-12-03
楼上的虽然说可以解决问题,可是在每个页面都这样是不是有点麻烦啊?如果是这样我在每个页面定义一个常量WWW_ROOT,以后包含文件的时候就用include(WWW_ROOT."/db/db1.inc.php")也可以解决问题,就是觉得这样解决有点麻烦。
回复
Rekcuf 2004-12-03
楼上两位都没有理解他的意思:

以下是目录树:

./
|- index.php (需要 ./classes/HelloWorld.class.php 和 ./includes/global.php)
|- ./classes
|- HelloWorld.class.php
|- DBMySQL.class.php
|- ./includes
|- global.php (而在这里又 include 了 ./classes/DBMySQL.class.php)

那么 index.php 里面:

<?php
include("./global.php");
?>

而 global.php 里面:
<?php
// include("./../classes/DBMySQL.class.php"); !! 这里出错,因为当 global.php 被 include 到 index.php 的时候,所在的目录是根目录(./),所以此时所指的(./../classes)就是上层目录了。不行
include("./classes/DBMySQL.class.php"); // 这样就可以了。
?>

但是你说到的其他目录引用 global.php 的时候,就出错是不是?
例如有个 ./admin/admin.php 要 include 这个 global.php,所以你要更改当前目录。

<?php
//: admin/admin.php
chdir('./../'); // 转到上层目录,此时跟 index.php 引用 global.php 一样,不会混淆。
include('./include/global.php'); // 这里能看清楚吧?
//:~
?>
回复
wjjchen 2004-12-03
会阿,比如说目录结构是:
/class/class1.inc.php
/db/db1.inc.php
/test.php

class1.inc.php有这样的语句:include("../db/db1.inc.php"),执行class1.inc.php是没有错的。
test.php有这样的语句:include("./class/class1.inc.php"),这时候执行test.php就会出现找不到db1.inc.php的错误阿。
回复
szjq 2004-12-03
用include_once
回复
butcher2002 2004-12-03
应该不会出现你说的情况

include实际上相当于在此位置添加了include指定的文件内容

回复
相关推荐
基于java的企业人事管理系统设计--软件工程课程设计(含源码与论文设计).rar 1 引言 4 1.1 课程设计目标 4 1.2 编程工具(编程环境)介绍 4 1.3 实施时间及主要实施步骤 4 2 需求分析 5 3 系统总体设计 6 4 数据库设计 6 5 主要功能模块的设计与实现 10 5.1 功能模块1详细设计(综合查询员工信息)..........................................................10 5.1.1 详细设计.......................................................................................................10 5.1.2 算法流程........................................................................................................15 5.1.3 界面设计及测试结果.....................................................................................15 6 调试分析 15 7 用户手册 16 8 测试结果 17 8.1 员工信息的添加...................................................................................................17 8.2 员工信息的修改...................................................................................................17 8.3 员工信息的删除...................................................................................................18 8.4 员工信息的综合查询...........................................................................................18 8.5 员工信息按性别统计的结果................................................................................19 8.6 员工信息按状态统计的结果...............................................................................19 8.7 员工信息按职称统计的结果................................................................................20 9 结论 20 10 参考文献 20
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2004-12-03 02:00
社区公告
暂无公告