php – set_include_path(get_include_path() . PATH_SEPARATOR . phpseclib);

php – set_include_path(get_include_path() . PATH_SEPARATOR . phpseclib);

First of all you need to understand what the include_path configuration setting does:

Specifies a list of directories where the require, include, fopen(),
file(), readfile() and file_get_contents() functions look for files.
The format is like the systems PATH environment variable: a list of
directories separated with a colon in Unix or semicolon in Windows.

PHP considers each entry in the include path separately when looking
for files to include. It will check the first path, and if it doesnt
find it, check the next path, until it either locates the included
file or returns with a warning or an error. You may modify or set your
include path at runtime using set_include_path().

The construct

set_include_path(get_include_path() . PATH_SEPARATOR . phpseclib);

appends phpseclib to the list of directories searched when you request including a file with one of the above functions.

Since phpseclib is a relative path, the effect is the same as if you had specified ./phpseclib, i.e. PHP will look into a subdirectory named phpseclib inside the current directory of the process. It does not magically determine where the library is located in the filesystem; its your job to put it where it will be found.

To better understand what include_path is and isnt, read this section of php.ini manual.

If youre trying to write a project-specific autoloader, set_include_path is not the best tool for that (you might want to look into spl_autoload_register instead), but to answer your question:

set_include_path does overwrite whatever previous include_path was. Multiple paths can be provided using PATH_SEPARATOR constant as a separator, eg:

set_include_path($path1. PATH_SEPARATOR . $path2 . PATH_SEPARATOR . $path3);

thus you can add to already existing path instead of overwriting it like this:

set_include_path(get_include_path() . PATH_SEPARATOR . $mypath);

php – set_include_path(get_include_path() . PATH_SEPARATOR . phpseclib);

The the set_include_path just sets a possible location for the PHP engine to look for files. For example:

set_include_path( WEBROOT_PRIVATE.scriptsphpseclib );
if(include(Net/SSH2.php)){
    echo pass;
} else {
    echo fail;
}
include WEBROOT_PRIVATE.application/global_function_list.php;

The above worked perfectly well and continues to include correctly other files required for the application.

Leave a Reply

Your email address will not be published.