转自: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', '目录名');
另外,需要注意的两点就是:
如果在指定的目录下找不到所要求包含的文件,而在当前页面目录下正好存在这个名称的文件时,则默认引入当前目录下的该文件。
相关推荐
理解并正确使用`set_include_path()`能够提升代码的可维护性和安全性。 首先,`__FILE__`是PHP的一个预定义常量,它代表当前被执行脚本的完整路径和文件名。这使得开发者能够获取到文件的实际位置,这对于确定相...
本文实例讲述了PHP中set_include_path()函数相关用法。分享给大家供大家参考,具体如下: 先看如下代码: <?php /** 定义根目录 */ define('__TYPECHO_ROOT_DIR__', dirname(__FILE__)); /** 定义插件目录(相对...
本文将详细介绍PHP中的路径问题以及set_include_path函数的使用方法。 首先,我们了解PHP中路径的类型。在PHP中,路径分为绝对路径和相对路径。绝对路径是从根目录开始的完整路径,比如在Windows系统中的"D:\...
- `set_include_path()`:设置新的`include_path`,可以结合`get_include_path()`来扩展而非覆盖现有路径。 - `spl_autoload_register()`: 这个函数用于注册一个或多个自动加载函数,以在需要时自动加载类文件,可以...
OpenCV中通常使用dlib、dnn模块或传统机器学习方法(如Active Appearance Models)进行面部特征点检测。 要使用这个模型,你需要一个支持该模型的OpenCV模块。例如,如果模型基于dlib,你需要在OpenCV中集成dlib,...
2.使用方法 运行gen_proto.bat后在code目录下可以找到生成的代码 附bat脚本代码: @echo off setlocal enabledelayedexpansion echo 开始生成proto代码... set "currPath=%~dp0" ::编译cs_proto的指令 set CSHARP...
不过其使用方法相对来说也就有些繁琐。列举以记之。 复制代码 代码如下: <? //设置PHPExcel类库的include path set_include_path(‘.’. PATH_SEPARATOR . ‘D:\Zeal\PHP_LIBS’ . PATH_SEPARATOR . get_...
set_include_path($include_path); ``` 这段代码会将 `custom/library` 目录添加到当前的 `include_path` 中,确保PHP在查找要包含的文件时也会检查这个目录。由于使用了 `PATH_SEPARATOR`,代码在Windows和Unix-...
1. **设置include路径**:在使用PHPExcel之前,需要确保类库的目录被包含在PHP的搜索路径中,这可以通过`set_include_path()`函数实现。 ```php set_include_path('.'.$path_separator.'D:\Zeal\PHP_LIBS'.$path_...
标题中的“让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享”是指在使用Nginx作为Web服务器时,如何配置Nginx以适应ThinkPHP框架的URL重写规则和PATHINFO模式。ThinkPHP是一款流行的PHP开发框架,它的URL重写功能...
INCLUDEPATH += /path/to/vlc/include LIBS += -L/path/to/vlc/lib -lvlc ``` 然后,创建一个`VLCPlayer`类,它是对VLC接口的封装。这个类中,我们需要实现几个关键方法: 1. **初始化**:在`VLCPlayer`的构造函数...
ini_set('include_path', $original_path . ':' . $additional_path); ``` 这段代码首先获取了当前的include_path设置,然后将其与新的路径合并,并用冒号":"作为分隔符。 接下来看看ini_get函数。ini_get函数的...
然而,在使用`keep-alive`组件的`include`属性时,可能会出现一些缓存问题。`include`属性允许我们指定哪些组件应该被缓存,这样只有匹配到的组件实例在切换路由或组件时才会被缓存。 首先,让我们来了解一下`keep-...
本文档旨在提供PHPExcel的一些常见使用方法及其示例代码,帮助开发人员快速掌握并应用到实际项目中。 #### 二、PHPExcel环境搭建与基本使用 1. **安装PHPExcel** 首先,确保你的开发环境中已经安装了PHPExcel。...
set(CMAKE_PREFIX_PATH "/path/to/custom/library" ${CMAKE_PREFIX_PATH}) ``` 这种方式特别适用于库安装在多个非标准位置的情况。 #### 4. 手动指定库文件:使用 `target_link_libraries` 有时候,使用 `find_...
正确使用 `set_include_path()` - 在设置 `include_path` 时,需要确保包含了所有可能需要访问的目录。例如,上面的例子中,`'Zend'` 目录和 `ROOT` 都被添加到了 `include_path` 中,确保了 Zend 类库能够被正确...
在某些框架中,会结合以上方法,如设置 `include_path`、注册自定义的自动加载函数以及使用 `spl_autoload_register` 来确保类的正确加载。这样,即使类文件不在当前脚本的同级目录下,也能在指定的路径中找到并加载...
1. **使用GDI+** GDI+是Windows操作系统提供的一种图形处理库,它支持多种图像格式,包括PNG。在MFC应用中,可以通过包含GDI+相关的头文件并进行初始化,然后利用`Gdiplus::Image`类来加载PNG图片。首先,需要在...