PHP中include()的使用问题

babystudio 2003-08-04 09:10:25


常常见有人询问关于使用include()时如何定位文件的问题,大体是这样:
这样一个文件系统结构
xxxx--|
|-dirA-|
| |-A.php
| |-A2.php
|
|-dirB-|
|-B.php

A.php
////////////////////////////////////
<?
echo('I am A.php . I have been included .'.'<br/>'.chr(10));
include('A2.php');
?>
////////////////////////////////////

A2.php
////////////////////////////////////
<?
echo('Hello , I am A2.php . I have been included .'.'<br/>'.chr(10));
?>
////////////////////////////////////

B.php
////////////////////////////////////
<?
echo('I am B.php . Now begin .');
include('../dirA/A.php');
?>
////////////////////////////////////

有人会遇到访问B.php报错的情况————无法找到A2.php,便很困惑的来到菜鸟集中营CSDN江湖求助。
看看大家的回答通常都是告诉无辜的提问者去检查一下php.ini中有关include_path的设置是否正确,是否包含了当前路径(用“.”表示)。偶也曾经做了一次不耐烦的大家,现在想起来真是————汗!
在php安装好后,通常php.ini中的inlcude_path被设置为.;c:\php\includes(windows平台)或.:/php/includes(Unix系列平台,Linux),可以看到其中都是包含当前路径的。在一些Php分发中的php.ini中include_path前面用“;”注释掉,这时的inlcude_path内建值为.;c:\php4\pear或.:/php4/pear(其中的“4”是因为我使用的Php版本为4.x)。这样看来,问题通常都不是出在inlude_path变量值上(除非哪个whiteEat非把inlude_path改成外婆家!噢,偶旁边的外婆家酒店酒菜不错,价格公道、童叟无欺)。
其实在上面的大家和提问人之间还有一个常被忽略的事实:Php的版本————这一次是小版本差异。
在Php 4.0.x环境下,上面的例子是无法运行的,需要把A.php中的“include('A2.php');”改成“include('../dirA/A2.php');”,或者将A2.php拷贝一份放到目录dirB中,这通常都不是我们期望的————任务量太大。
而在Php 4.2.x(含更高)环境下,上面的例子则可以通行无阻,并且前面所作修改后的脚本、文件系统结构也可以通过。
清晰了。问题出在不同版本对“.”的解释不同。在4.0.x中,“.”仅仅被认为是(起始)脚本的执行路径;而在4.2.x中,它还包含当前文件的路径。从上面的例子中,当导入文档A.php后,这时的“.”将同时指向B.php的路径dirB和A.php的路径dirA。
写到这里,忽然冒出一个问题:如果在4.2.x环境下,在dirB.php中刚好不幸也有一个A2.php文件,那么B.php最后会导入哪个路径下的A2.php呢?本来想把这个问题留给Php的MM们测试,然后请她们香高天下,但一想到压榨她们不长的几分钟的擦胭抹粉的时间实在于心不忍(“几”是 百 数量级的)。测试结果显示将包含dirB下面的A2.php。
欢迎大家把更多的这类“小”问题贡献出来给我们的菜鸟集中营。

注:如果上面的例子在你的环境下出现第三种情况,请烦劳告诉偶。
...全文
90 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
indeed 2003-08-04
  • 打赏
  • 举报
回复
深有感触,谢谢楼上的兄台
bonniewater 2003-08-04
  • 打赏
  • 举报
回复
都顶,我也来顶!
ustb 2003-08-04
  • 打赏
  • 举报
回复
顶吧
xuzuning 2003-08-04
  • 打赏
  • 举报
回复
呵呵
myblessu 2003-08-04
  • 打赏
  • 举报
回复
哈哈,是不是送分来了,我接了.
feyge 2003-08-04
  • 打赏
  • 举报
回复
up
zalvsa 2003-08-04
  • 打赏
  • 举报
回复
哈,版本确实是奇怪!
偶的PHP4.3高级竟然无法支持PHPMYADMIN,晕死!
allkill 2003-08-04
  • 打赏
  • 举报
回复
这位兄弟真是好人啊!即发文章还给分!

看完以后的感触是,绝对路径在有些时候还是可以避免一些问题的。

21,887

社区成员

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

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