PHP 选项/信息 函数
在线手册:中文  英文

set_include_path

(PHP 4 >= 4.3.0, PHP 5)

set_include_path设置 include_path 配置选项

说明

string set_include_path ( string $new_include_path )

为当前脚本设置 include_path 运行时的配置选项。

参数

new_include_path

include_path 新的值。

返回值

成功时返回旧的 include_path 或者在失败时返回 FALSE

范例

Example #1 set_include_path() 例子

<?php
// 自 PHP 4.3.0 起可用
set_include_path('/usr/lib/pear');

// 在所有版本的 PHP 中均可用
ini_set('include_path''/usr/lib/pear');
?>

Example #2 添加到include path

利用常量 PATH_SEPARATOR 可跨平台扩展 include path。

这个例子中我们把 /usr/lib/pear 添加到了 现有的 include_path 的尾部。

<?php
$path 
'/usr/lib/pear';
set_include_path(get_include_path() . PATH_SEPARATOR $path);
?>

参见


PHP 选项/信息 函数
在线手册:中文  英文

用户评论:

cloxy at cloxy dot com (2012-03-27 18:11:56)

If you want to include files with their absolute path without changing the current include path, you can use the magic constant __DIR__ . For example:

<?php include(__DIR__.'/file.php'); ?>

It is available since PHP 5.3.

francois r vespa (2011-04-01 11:17:24)

include_path is not taking in consideration by very commonly used functions such as file_exists(), the following hack can come handy to override that

<?php

function suchFile($file)    // like file_exists() but takes in consideration include_path

{
    if(!
file_exists($file))
    
    {
        
$paths=explode(PATH_SEPARATOR,get_include_path());
        
        foreach(
$paths as $p)
        if(
file_exists(preg_replace('%/$%','',$p)."/$file"))
        return 
true;
        
        return 
false;
    }
    else
    return 
true;
}
?>

joel at pittet dot ca (2010-11-17 14:46:57)

Seems set_include_path wasn't working for me.
The problem was i didn't have .: in my include_path
Which seemed to stop the set_include_path().

mateusz at bkfmyjnie dot pl (2010-05-14 02:54:01)

It seems you can't really set empty inlude_path. First, set_include_path('') does exactly nothing (successfully), and second, '.' is always implicitly appended to the include path by PHP itself, as noted in comments below.
However, you can:
set_include_path(PATH_SEPARATOR); // note no quotes around the PATH_SEPARATOR; it's a string on its own
or, more explicit:
set_include_path('.');
Both seems to have the same result.

parks at vecinc dot com (2009-07-27 11:44:20)

If you find that this function is failing for you, and you're not sure why, you may have set your php include path in your sites's conf file in Apache (this may be true of .htaccess as well)
So to get it to work, comment out any "php_value include_path" type lines in your Apache conf file, and you should be able to set it now in your php code.

ChanibaL.net (2009-01-07 17:21:17)

The files are included in order of the inclusion path, in this example, the directory structure is as follows:
.
|-- index.php
|-- t1
|   |-- a
|   `-- b
`-- t2
    |-- b
    `-- c

<?php

set_include_path
('t1'.PATH_SEPARATOR.'t2');

include 
'a';  // includes from T1
include 'b';  // includes from T1
include 'c';  // includes from T2

?>

Note that the include path affects only include/require functions. 

<?php

var_dump
(file_exists('a'));  // false
var_dump(fopen('b''r'));  // file not found

?>

ricardo dot ferro at gmail dot com (2008-05-14 11:16:10)

Two functions to help:

<?php

function add_include_path ($path)
{
    foreach (
func_get_args() AS $path)
    {
        if (!
file_exists($path) OR (file_exists($path) && filetype($path) !== 'dir'))
        {
            
trigger_error("Include path '{$path}' not exists"E_USER_WARNING);
            continue;
        }
        
        
$paths explode(PATH_SEPARATORget_include_path());
        
        if (
array_search($path$paths) === false)
            
array_push($paths$path);
        
        
set_include_path(implode(PATH_SEPARATOR$paths));
    }
}

function 
remove_include_path ($path)
{
    foreach (
func_get_args() AS $path)
    {
        
$paths explode(PATH_SEPARATORget_include_path());
        
        if ((
$k array_search($path$paths)) !== false)
            unset(
$paths[$k]);
        else
            continue;
        
        if (!
count($paths))
        {
            
trigger_error("Include path '{$path}' can not be removed because it is the only"E_USER_NOTICE);
            continue;
        }
        
        
set_include_path(implode(PATH_SEPARATOR$paths));
    }
}

?>

chris-r3i (2007-03-06 14:35:29)

Can be useful to check the value of the constant PATH_SEPARATOR.

<?php
if ( ! defined"PATH_SEPARATOR" ) ) {
  if ( 
strpos$_ENV"OS" ], "Win" ) !== false )
    
define"PATH_SEPARATOR"";" );
  else 
define"PATH_SEPARATOR"":" );
}
?>

For older versions of php, PATH_SEPARATOR is not defined.
If it is so, we must check what kind of OS is on the web-server and define PATH_SEPARATOR properly

koenig at electronova dot net (2006-10-02 09:24:24)

You can also add several paths in one set_include_path separating them by ':'.
ex : set_include_path('/home/mysite/includes1:/home/mysite/includes2')

junya at xs4all dot nl (2005-01-28 05:41:09)

When you use .htaccess to set the include path, don't forget Apache directive 'AllowOverride Options' or 'AllowOverride All' is also needed.

df a t dougfelton d o t c o m (2005-01-25 07:37:41)

In order to use .htaccess files to set the include path, PHP must be installed as an Apache module. If PHP is compiled as a CGI binary, you can set the include path in a custom php.ini file (if, for example, you're being hosted somewhere and don't have access to the main php.ini file. Note that custom php.ini files don't affect subdirectories in the way that .htaccess files do, so you'll need to put your custom php.ini file in any subdirectories as well.

r dot s dot goldsmith at far-blue dot co dot uk (2004-12-08 03:23:37)

If you want to set the paths php uses to find included files on a directory by directory level, you can do so in Apache's .htaccess file. Add the line:
php_value include_path "<first path to look>:<second path>:<etc>:."
to the .htaccess file. This will replace any paths set in your environment or the php.ini file so remember to include the path to php's own libraries as, usually, the first option!
V.useful tip given to me by the 'php guy' at Edinburgh Uni's Computing Support.

易百教程