Home > Article > Backend Development > 关于PHP的include
测试环境:Windows 2003 + PHP5.3.5 +Apache 2.2.19.0
php.ini中的include_path设置如下:include_path="D:\php_5.3.5\pear;F:\PHP\Lib;" 注意 , 没有 . include_path中的.代表当前工作目录
include第一次找到某文件后,会缓存结果。下一次include相同的路径时,只取缓存结果而不会多重查找,这就导致了我们移除某文件后可能短暂的时间内include会报错(因为include机制发现缓存结果的路径不存在,不会往下一重查找而是报错)。所以测试的时候需要include前面加clearstatcache(true);或者对文件进行改名、删除等操作以后马上重启apache,以强制每次include都多重查找。
ps:include的缓存机制具体说明:include会按顺序进行多重查找,但如果发现某一重有缓存,就会立刻跳出查找,不管那一重的缓存结果路径是否存在。 也就是说假如第一重的文件存在,我们却将其删除,则在include缓存有效期间会造成include错误。假如第一重的文件不存在,第二重的文件存在,我们建立了第一重文件,则会马上生效,不受include缓存影响
1.include('2.php');
注意,'2.php'不是按相对路径开始查找,其多重查找顺序如下:
(1) 如果是绝对路径,则直接查找绝对路径是否存在
(2)首先从php.ini中设置的include_path目录中查找文件(遍历include_path中的每个目录)
(3)然后从调用此语句的文件所属目录(__DIR__)查找文件
(4)最后从当前工作目录(getcwd())中查找文件