会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
技术文档 > Web开发 > PHP
PHP中include()的使用问题
发表日期:2003-08-18 00:00:00作者:b 出处:  

PHP中include()的使用问题

常常见有人询问关于使用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。

  欢迎大家把更多的这类“小”问题贡献出来给我们的菜鸟集中营。

  注:上面的例子同样适用于require方法(以及后来的include_once()、require_once())。

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00469