PHP中复杂的目录转换

BabyGoblin 2005-06-01 05:00:32
刚接触PHP不久, 发现PHP中的目录转换问题相当复杂
假设有以下PHP文件:
a.php 存在目录为 /inc/project1
b.php 存在目录为 /inc
c.php 存在目录为 /inc
d.php 存在目录为 /inc/project2
首先, 在 b.php 中引用了文件 a.php, 引用语句为 include("project1/a.php");
然后在 c.php 中引用文件 b.php, 引用语句为 include("b.php");
接着在 d.php 中引用文件 b.php, 引用语句为 include("../b.php");
这时, c.php 正常, 但运行 d.php 时, 引起 b.php 无法引用到文件 a.php

这样的问题已经困扰偶很久了, 5555555555^^^
不知道有没有好的方法可以解决这样的问题呢?
先谢了!!
...全文
142 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mikespook 2005-06-02
  • 打赏
  • 举报
回复
ya~~没看见 ice_berg16(寻梦的稻草人)的回复~~同意他的观点~~
mikespook 2005-06-02
  • 打赏
  • 举报
回复
我比较喜欢用 define('ROOT_DIR', '/home/www/hddoc/')这样的方式定义路径~~
然后require_once(ROOT_DIR.'include/a.php')

'/home/www/hddoc/'你也可以直接换成__FILE__
xuzuning 2005-06-02
  • 打赏
  • 举报
回复
你把一个本来很简单的问题弄复杂了

几点原则
1、把可能被任意程序引用文件放在include_path指向的非./目录中。比如数据库类,模板类等
2、把专用嵌入文件放在引用文件的下级目录中,可以多层
3、不在下级目录中引用上级目录的文件

在php中,嵌入文件默认是通过绝对路径进行的。当采用相对路径时,路径的参照点是第一个执行嵌入指令的程序所在目录。无论嵌入文件有嵌入了多少文件,这个参照点是不会变的。
因此,无论你如何组织文件,都应做到只嵌入平级和下级目录的文件
特殊情况下你可以用realpath通过__FILE__常量以相对路径构造绝对路径
ice_berg16 2005-06-02
  • 打赏
  • 举报
回复
定义程序统一配置文件如config.php,放在系统根目录
在配置文件中定义系统根路径,
define( "APP_ROOT" , dirname(__FILE__) );
在所有需要包含文件的地方使用从根目录开始的方式
require( APP_ROOT . "/inc/d.php" );
FoolBoy 2005-06-01
  • 打赏
  • 举报
回复
刚好我前段时间在为这个事情烦恼了一天,不过现在解决了,用下面这个语句可以不管INCLUDE的路径,不过其他的还得自己设
ini_set("include_path","./;../");
Meteorlet 2005-06-01
  • 打赏
  • 举报
回复
inc目录就是用来定义函数和类的,你跑到子目录下面去执行d.php有什么意义?还include过来include过去的,一点层次结构都没有
ddboy 2005-06-01
  • 打赏
  • 举报
回复
要么,你用对等级的目录,要么用绝对路径,只能二选一
如果用
<?
$ndir = str_replace("\\","/",dirname(__FILE__));
require_once($ndir."/你要引入的文件的相对路径/你要引入的文件.php");
?>
这种方法,换服务器也没影响呀
像mambo、koobi等这些大型CMS系统都这样引入

reners 2005-06-01
  • 打赏
  • 举报
回复
可参考下这段代码:$file为文件名

if (empty($file))
$file = $PHP_SELF;
$depth = explode("/",$file);
$path = str_repeat(""../"", count($depth)-2); //减2是因为第一个为/最后一个为文件名
BabyGoblin 2005-06-01
  • 打赏
  • 举报
回复
有没有取得我的根目录的方法?
比如, 我的根目录在服务器上的实际路径为 /usr/webusr/userA
而我不想把这个固定的路径写在所有要引用文件的地方, 因为可能我会换到其他的服务器或者我想在方便在本地调试
BabyGoblin 2005-06-01
  • 打赏
  • 举报
回复
上边似乎都是类似绝对路径的方式, 我真不想用绝对路径唔^^^^^^^^^^^^^
ddboy 2005-06-01
  • 打赏
  • 举报
回复
<?
$ndir = str_replace("\\","/",dirname(__FILE__));
require_once($ndir."/你要引入的文件的相对路径/你要引入的文件.php");
?>
reners 2005-06-01
  • 打赏
  • 举报
回复
从根目录引用
/dir
...
BabyGoblin 2005-06-01
  • 打赏
  • 举报
回复
还有其他更好的方法吗?
我不想用绝对路径, 因为可能以后会更改目录结构啊
coolstr 2005-06-01
  • 打赏
  • 举报
回复
解决办法1:
引用的时候使用绝对路径,

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧