`

set_include_path()用法

    博客分类:
  • PHP
阅读更多

转自:http://blog.sina.com.cn/s/blog_4ce89f200100twbl.html

   http://blog.sina.com.cn/s/blog_815611fb0101cqgy.html

 

今天在公司研习源码时,看到了set_include_path(dirname(__FILE__));这样一行代码,甚为不解。于是我就百度了一下,顺便看了一下php.net的手册,可是还是不太明白它到底有什么作用。
   偶然见看到一段另外一段代码,然后突发灵感,测试了一下,果然不出所料!
   现在我总结一下吧:
   首先set_include_path这个函数呢,是在脚本里动态地对PHP.ini中include_path进行修改的。
而这个include_path呢,它可以针对下面的include和require的路径范围进行限定,或者说是预定义一下。
  就好像:
       如果我们没有设置这个值,可能我们需要写一些完全的路径:
       <?php
          include("123/test1.php");
          include("123/test2.php");
          include("123/test3.php");
          require("123/test4.php");
          require("123/test5.php");
       ?>
      来引入很多外部文件,但是如果我们设置了set_include_path("123/"),我们就可以用下面这段代码代替。
       <?php
          set_include_path("123/");
          include("test1.php");
          include("test2.php");
          include("test3.php");
          require("test4.php");
          require("test5.php");
       ?>
      因为呢,当执行include或者require操作时,就会去include_path指定的路径去查找要引入的文件,虽然我现在不知道这样会不会在性能上有所优化,但是可以肯定的是,可以节省一部分代码。呵呵~
     那么刚开始的时候,我以为它加不加都是一样的没什么不同,是因为我只包含了一个本文件夹下的文件。
    后来,终于发现了其中的玄机!可恨的是,网上居然没有一篇像我这样的文章....都是同一篇文章转来转去的。
    那么这个函数它不仅可以定义一个文件夹,我们可以定义很多文件夹。如下所示,我要写一个初始化函数:
       function initialize()
{
    set_include_path(get_include_path().PATH_SEPARATOR . "core/");
    set_include_path(get_include_path().PATH_SEPARATOR . "app/");
    set_include_path(get_include_path().PATH_SEPARATOR . "admin/");
    set_include_path(get_include_path().PATH_SEPARATOR . "lib/");
    set_include_path(get_include_path().PATH_SEPARATOR . "include/");
    set_include_path(get_include_path().PATH_SEPARATOR."data/");
    set_include_path(get_include_path().PATH_SEPARATOR."cache/");
}
    这样它的路径就成了:
    .;C:\php5\pear;core/;app/;admin/;lib/;include/;data/;cache/
    哎,我们发现前面还有个.;C:\php5\pear;这到底是怎么回事呢,其实我们如果什么也不写直接先输出一下include_path的默认值,就会发现它就是.;C:\php5\pear;它可以允许随便去一个引入文件。
    如果再加载了许多文件夹的话,我们直接写文件名就可以了!
   但是正如我最开始那个问题一样,为什么我们公司的代码和人家的就不一样呢,原来,如果我就写一个
          set_include_path(dirname(__FILE__));
   然后去引入其他文件夹的文件,就会报错,说在我指定的这个文件夹内找不到。
      首先,我们先用另外一种方法输出一下:
       <?php
           set_include_path(dirname(__FILE__));
           $include_value = ini_get('include_path');
           echo $include_value;
       ?>
      结果是:D:\AppServ\www
      我如果去www下找test4.php这个文件,则没有报错
      include("test4.php");
      但是我如果去找
      include("test1.php");
      就会报错:
      Warning: include() [function.include]: Failed opening 'test1.php' for inclusion (include_path='D:\AppServ\www') in D:\AppServ\www\test.php on line 6
     而且我们还发现
.;C:\php5\pear;已经被替换掉了。所以我们在使用的时候,如果不是仅在一个文件夹下引入文件,我们就需要在前面加上get_include_path().PATH_SEPARATOR .

     解释一下:
            get_include_path()是获取当前include_path的默认值
            PATH_SEPARATOR 是个常量,是include的路径分界符合,在window上是;在unix和Linux上是:
     最后,我还要说一下,其实我们也可以通过另外一种方法:即最原始的:
           ini_set('include_path''目录名'); 
    另外,需要注意的两点就是:
           如果在指定的
目录下找不到所要求包含的文件,而在当前页面目录下正好存在这个名称的文件时,则默认引入当前目录下的该文件。

分享到:
评论

相关推荐

    PHP中set_include_path()函数相关用法分析

    本文实例讲述了PHP中set_include_path()函数相关用法。分享给大家供大家参考,具体如下: 先看如下代码: &lt;?php /** 定义根目录 */ define('__TYPECHO_ROOT_DIR__', dirname(__FILE__)); /** 定义插件目录(相对...

    PHP中set_include_path()函数相关用法分析_.docx

    PHP中set_include_path()函数相关用法分析_.docx

    set_include_path和get_include_path使用及注意事项

    set_include_path 设置默认包含路径,本文将介绍下其的使用方法,及注意事项,感兴趣的朋友可以了解下,或许对你学习php有所帮助

    PHP使用PHPexcel导入导出数据的方法

    本文实例讲述了PHP使用PHPexcel导入导出数据的方法。分享给大家供大家参考,具体如下: 导入数据: &lt;?php error_reporting(E_ALL); //开启错误 set_time_limit(0); //脚本不超时 date_default_timezone_set('...

    protobuf转cs和java文件(一键生成)

    2.使用方法 运行gen_proto.bat后在code目录下可以找到生成的代码 附bat脚本代码: @echo off setlocal enabledelayedexpansion echo 开始生成proto代码... set "currPath=%~dp0" ::编译cs_proto的指令 set CSHARP...

    PHPExcel中的一些常用方法汇总

    不过其使用方法相对来说也就有些繁琐。列举以记之。 复制代码 代码如下: &lt;? //设置PHPExcel类库的include path set_include_path(‘.’. PATH_SEPARATOR .  ‘D:\Zeal\PHP_LIBS’ . PATH_SEPARATOR .  get_...

    解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用

    一个是:PATH_SEPARATOR PATH_SEPARATOR:include多个路径使用,在windows下,当你要include多个路径的话,你要用”;”隔开,但在linux下就使用”:”隔开的。 这2个常量的使用能够避免不同平台的兼容性问题 您可能...

    vs2019提取vc2019 x64位命令行版本

    使用方法 1.在msys2系统,假设安装目录为/opt/vc,用下列命令设置环境变量 export PATH=/opt/vc/bin:$PATH export LIB=/opt/vc/lib export INCLUDE=/opt/vc/include 2、在windows系统,cmd下在安装目录运行 set PATH...

    linux全志R16的linux系统编译的资料_20170502_1655.7z

    (编译请使用编译android的lichee的选项编译生成的.config文件,不然直接编译会报错!!!!) rootroot@cm-System-Product-Name:/home/wwt/linux_r16$ tar zxvf lichee_parrotv1.1_20161202.tar.gz rootroot@cm-...

    全志A80平台固定以太网的MAC地址ethernet_a80_merrii_20151203_1607.7z

    全志A80的以太网使用固定MAC地址.txt 2015/12/3 16:09 开发板:美睿的商业开发板 OS:android4.4.2(美睿提供) linux:3.4.39 发现全志平台的A80的以太网的MAC地址是变化的,由于需要做MAC地址和IP绑定的问题。 ...

    OX3-PHP-API-Client:用于访问OX3 API的Helper类

    该库为客户端类提供了示例,以简化对OpenX API的访问。... #Installation如果使用Zend Framework 1: 安装Zend Framework 1.12.13(链接: : )。...方法2:或者,您可以创建一个名为“ set_path.php”的

    自动更新Build号的小工具和版本管理头文件

    批处理脚本使用方法: ::本批处理首先使用SubWCRev.exe更新Revision号,SubWCRev会根据versionfile_template.h和Revision号生成 ::新的Revision号,并生成version.h到你的工程源码目录 ::设置TortoiseSVN路径 set ...

    nice-grpc-server-reflection:nice-grpc的服务器反射

    --descriptor_set_out=path/to/protoset.bin --include_imports 将ServerReflection服务实现添加到gRPC服务器: import { createServer } from 'nice-grpc' ; import { ServerReflectionService , ...

    ThinkPHP3.2 集成 php-resque: PHP Resque Worker

    $path = COMMON_PATH . "Job"; $flag = \FilesystemIterator::KEY_AS_FILENAME; $glob = new \FilesystemIterator($path, $flag); foreach ($glob as $file) { if('php' === pathinfo($file, PATHINFO_...

    PHPEXCEL在PHP中操作excel的工具

    不过其使用方法相对来说也就有些繁琐。列举以记之。  -- PHP Code --  &lt;?  //设置PHPExcel类库的include path  set_include_path('.'. PATH_SEPARATOR .  'D:\Zeal\PHP_LIBS' . PATH_SEPARATOR .  get_...

    FileInformation:CMake模块,用于获取文件信息,例如大小和修改日期

    set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/Module" ${CMAKE_MODULE_PATH}) 用法 如果您不熟悉CMake,请先查看。 在您的CMakeLists.txt文件中,包含模块FileInformation : include (FileInformation) 可以...

    VC2010_compiler

    vc++ 2010 编译器 带C/C++,MFC,CRT,所有库 1.环境变量设置:(64位根据目录加一层64位目录)...用法: cl [ 选项... ] 文件名... [ /link 链接选项... ] ***********************************************************/

    node-extended-require:Node.JS 的增强需求

    Node.JS 的扩展需求 扩展require()功能。 安装 您可以使用npm安装: npm install extended-require 用法 /path/to/project/index.js : var er = require ( "extended-...var includePath = er . newIncludePath

    jQuety1.3中文说明

    Also when passing strings that may include slashes (such as an image path), escape the slashes. When creating single elements use the closing tag or XHTML format. For example, to create a span use $...

Global site tag (gtag.js) - Google Analytics