include("include_path")函数包含路径详讲__PHP_include()
2015-04-16 19:40
357 查看
问题:
在项目开发中,经常需要涉及到 include()函数,其中经常会涉及到嵌套使用include的情况.如何确认include的确切包含路径?下面是针对这个问题的展开.
现在研究根目录的规律问题.
scene:MAC OSX/APACHE/PHP
涉及函数:include
基本:
当前路径: ./
上一级路径: ../
>>>实验一:
寻找include(控制结构)的include_path原理.
假设1:include_path=运行目录
假设2:include_path=物理位置目录
假设3:include-path有优先级,先寻找运行目录,再寻找物理目录,[找到马上返回,只返回一个文件].
假设4:include-path有优先级,先寻找物理目录,再寻找运行目录,[找到马上返回,只返回一个文件].
/htdoc/a.php
>>>
/htdoc/one/b.php
>>>
/htdoc/one/html.php
>>>
/htdoc/one/one/html.php
>>>实验一结果(运行a.php):
输出
>>>实验二
保留实验一中的
/htdoc/a.php
/htdoc/one/html.php
/htdoc/one/one/html.php
修改:/htdoc/one/b.php
/htdoc/one/b.php
>>>实验二结果(运行a.php):
输出
>>>实验三
[b]保留实验二中的
[/b]
/htdoc/a.php
/htdoc/one/b.php
/htdoc/one/one/html.php
删除:/htdoc/one/html.php
>>>实验二结果(运行a.php):
输出
结论:出乎意料,假设2成立.
>>>综合结论:
include被嵌套多层时,include的参数[也就是路径也就是include_path]是有差异的.
A:差异在哪里?
Q:[比较难描述...]举例说明.include_path的值是关键,这个值必定是一个路径.
当最前面为 ./,表示相对当前运行路径来包含文件. //如 include "./one/html.php"; 此时会寻找 /htdoc/one/html.php.
当最前面直接接文件名,include则会查找两个路径(运行路径和物理路径),优先返回运行路径. //如 include "one/html.php"; 此时会寻找/htdoc/one/html.php 和 /htdoc/one/one/html.php. 并且,如果/htdoc/one/html.php存在,则直接返回/htdoc/one/html.php
可以参考PHP手册:
好难表达(描述)include的性质.不管你弄没弄明白,反正我是明白了.
在项目开发中,经常需要涉及到 include()函数,其中经常会涉及到嵌套使用include的情况.如何确认include的确切包含路径?下面是针对这个问题的展开.
现在研究根目录的规律问题.
scene:MAC OSX/APACHE/PHP
涉及函数:include
基本:
当前路径: ./
上一级路径: ../
>>>实验一:
寻找include(控制结构)的include_path原理.
A:运行目录与物理目录? Q:如下实验一,针对b.php来说, 运行目录是/htdoc/ 逻辑目录是/htdoc/one/ 因为此实验是是运行a.php文件
假设1:include_path=运行目录
假设2:include_path=物理位置目录
假设3:include-path有优先级,先寻找运行目录,再寻找物理目录,[找到马上返回,只返回一个文件].
假设4:include-path有优先级,先寻找物理目录,再寻找运行目录,[找到马上返回,只返回一个文件].
/htdoc/a.php
<?php header("Content-type:text/html;charset=utf-8;"); include './one/b.php'; ?>
>>>
/htdoc/one/b.php
<pre name="code" class="php"><?php echo '<br />包含./one/b.php成功<br />'; include './one/html.php'; ?>
>>>
/htdoc/one/html.php
<?php echo '<br />包含/htdoc/one/html.php成功<br />'; echo '假设1:include=逻辑运行目录 成立'; ?>
>>>
/htdoc/one/one/html.php
<?php echo '<br />包含/htdoc/one/one/html.php成功<br />'; echo '假设2:include_path=物理位置目录 成立'; ?>
>>>实验一结果(运行a.php):
输出
包含./one/b.php成功 包含/htdoc/one/html.php成功 假设1:include=逻辑运行目录 成立
>>>实验二
保留实验一中的
/htdoc/a.php
/htdoc/one/html.php
/htdoc/one/one/html.php
修改:/htdoc/one/b.php
/htdoc/one/b.php
<pre name="code" class="php"><?php echo '<br />包含one/b.php成功<br />'; include 'one/html.php'; ?>
>>>实验二结果(运行a.php):
输出
包含./one/b.php成功 包含/htdoc/one/html.php成功 假设1:include=逻辑运行目录 成立结论:与实验一输出结果一致.
>>>实验三
[b]保留实验二中的
[/b]
/htdoc/a.php
/htdoc/one/b.php
/htdoc/one/one/html.php
删除:/htdoc/one/html.php
>>>实验二结果(运行a.php):
输出
包含./one/b.php成功 包含/htdoc/one/one/html.php成功 假设2:include_path=物理位置目录 成立
结论:出乎意料,假设2成立.
>>>综合结论:
include被嵌套多层时,include的参数[也就是路径也就是include_path]是有差异的.
A:差异在哪里?
Q:[比较难描述...]举例说明.include_path的值是关键,这个值必定是一个路径.
当最前面为 ./,表示相对当前运行路径来包含文件. //如 include "./one/html.php"; 此时会寻找 /htdoc/one/html.php.
当最前面直接接文件名,include则会查找两个路径(运行路径和物理路径),优先返回运行路径. //如 include "one/html.php"; 此时会寻找/htdoc/one/html.php 和 /htdoc/one/one/html.php. 并且,如果/htdoc/one/html.php存在,则直接返回/htdoc/one/html.php
可以参考PHP手册:
include() 寻找包含文件的顺序先是在当前工作目录的相对的 include_path 下寻找,然后是当前运行脚本所在目录相对的 include_path 下寻找。 例如 include_path 是 .,当前工作目录是 /www/,脚本中要 include 一个 include/a.php 并且在该文件中有一句 include "b.php", 则寻找 b.php 的顺序先是 /www/,然后是 /www/include/。如果文件名以 ./ 或者 ../ 开始,则只在当前工作目录相对的 include_path 下寻找。
好难表达(描述)include的性质.不管你弄没弄明白,反正我是明白了.
相关文章推荐
- String filePath = request.getSession().getServletContext().getRealPath("/");这句话返回的路径是什么,解释下getRealPath("/")函数中的"/"表示什么意思
- PHP Notice: Please no longer include "PHPUnit/Framework.php". 解决办法
- 去掉一定要包含#include "stdafx.h"的错误。
- 介绍几个程序中关于"路径字符串"的函数
- 从request获取各种路径总结 request.getRealPath("url"); // 虚拟目录映射为实际目录 request.getRealPat
- IE8上传文件时javascript读取文件的本地路径的问题("C:/fakepath/")的解决方案
- input type="file" 选取文件路径时出现fakepath问题IE浏览器解决办法
- c语言处理fopen(path,"wb")的路径转换问题
- php 非常有用的高级函数PATH_SEPARATOR常量和set_include_path 3ff8
- Flex 调用javascript上传文件读取文件的本地路径的一直是 "C:/fakepath/" 的解决方案
- 使用"函数递归"实现基于php和MySQL的动态树型菜单
- php中的路径问题与set_include_path
- php中的路径问题与set_include_path使用介绍
- PHP include_path设置
- php.ini文件中的include_path设置和$_SERVER['DOCUMENT_ROOT']
- 有关请求路径的总结 request.getContextPath()、request.getServletContext().getRealPath("")、request.getRequestURI
- Fatal error: Unknown: Failed opening required 'c:/wamp/www/view.php' (include_path='.
- PHP中include函数查找相对路径问题
- The path "/usr/src/linux/include" is not an existing directory.解决方式
- JSP中 <%@ include file="相对url"%>和path basePath