PHP中include()的使用问题

原创 2003年08月04日 17:06:00

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())。

PHP中include()的使用问题

PHP中include()的使用问题常常见有人询问关于使用include()时如何定位文件的问题,大体是这样:这样一个文件系统结构xxxx--|      |-dirA-|      |      |...
  • babystudio
  • babystudio
  • 2003年08月04日 17:06
  • 1751

set_include_path和get_include_path用法详解

今天在公司研习源码时,看到了set_include_path(dirname(__FILE__));这样一行代码,甚为不解。于是我就百度了一下,顺便看了一下php.net的手册,可是还是不太明白它到底...
  • bingqingsuimeng
  • bingqingsuimeng
  • 2014年03月04日 08:44
  • 677

php.ini中include_path用处

include_path1,情景描述:以前一直不知道有这个东西可以配置导入文件的路径,前不久我同事教我配置的 2,用法:找到php.ini中的include_path,然后例如:include_pa...
  • qq_33210743
  • qq_33210743
  • 2017年11月11日 11:41
  • 245

php中include包含页面路径问题解决方法

刚开始使用php的include包含文件时并没有发现什么问题,慢慢的到后来发现了一个很严重的问题,例如:(网站根目录) ├文件夹 │ │ │ └1.php ├文件夹 │ │ │ └2.ph...
  • suleil1
  • suleil1
  • 2015年10月28日 16:49
  • 6289

字符串的方法及注释

capitalize()   把字符串的第一个字符改为大写   casefold()   把整个字符串的所有字符改为小写   center(wi...
  • zhao12501
  • zhao12501
  • 2017年12月23日 22:34
  • 10

caffe 学习笔记之Makefile.config注释

github上源码 ubuntu下执行一下命令得到Makefile.configcp Makefile.config.example Makefile.config以下注释为在博客的基础上进行修改而...
  • u011394059
  • u011394059
  • 2017年06月23日 13:46
  • 1085

jsp中include指令的绝对路径问题

一般来说,%@include....%是不支持绝对路径的,但我以前加模块名称写成这样,jboss是不报错的,今天却死活找不到文件,去掉模块名称就好了,估计是jboss的配置原因,不知道具体原因在哪,先...
  • lwhen
  • lwhen
  • 2011年04月07日 00:28
  • 1819

PHP中include路径的解决方法汇总

这几天整理一份很乱的代码,这才意识到php对include处理不是一般的贱:别的编程语言在处理include中的相对目录时,都是以当前处理的文件作为基准。也就是说,如果A包含B,B包含C时,C再包含一...
  • oyd
  • oyd
  • 2008年01月08日 13:55
  • 30944

将cgi.fix_pathinfo=1这一行去掉注释将1改为0的用意

举例来说,开启的危害就是假设你的网站有http://xx.com/a.jpg这样的一张图片,我通过http://xx.com/a.jpg/foo.php就可以查看到这个文件的二进制内容,意思就是可以通...
  • meitesiluyuan
  • meitesiluyuan
  • 2016年10月18日 11:31
  • 925

fblualib安装教程

源码地址https://github.com/facebook/fblualib 整个安装教程都建立在你没有ROOT权限的情况下的,所以一切的安装都需要你打开shell脚本,一步步执行里面的安装指令,...
  • kuaitoukid
  • kuaitoukid
  • 2016年06月24日 21:02
  • 3907
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP中include()的使用问题
举报原因:
原因补充:

(最多只允许输入30个字)