set_include_path(get_include_path().PATH_SEPARATOR.'phpseclib');

Joh*_*ohn 12 php ftp sftp phpseclib

我偶然发现了以前从未在php中使用过的两个函数

set_include_path();
get_include_path();
Run Code Online (Sandbox Code Playgroud)

我目前正在寻找将phpseclib实现到我正在处理的项目上.因为我需要使用SSH2的SFTP类扩展,而后者又需要MathBigInteger类等.等等.

手册说set_include_path():

"在脚本的持续时间内设置include_path配置选项."

这对我的框架的其余部分意味着什么,它会设置来自'phpseclib'目录的所有包含路径吗?

另外,我真的没有得到:

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
Run Code Online (Sandbox Code Playgroud)

我将php sec存储在我的文件系统中的自定义库目录中,get_include_path()有些神奇地找到我的文件系统中的phpseclib目录吗?

正如你所看到的,我完全迷失在这里......有人可以帮我一点点好吗?

PS/I只需要在应用程序的一个partivular点上使用这个库,因此只想在需要时包含它,目前我想将它包含在我的模型类的子代中.

Jon*_*Jon 16

首先,您需要了解include_path配置设置的作用:

指定require,include,fopen(),file(),readfile()和file_get_contents()函数查找文件的目录列表.格式类似于系统的PATH环境变量:用Unix中的冒号或Windows中的分号分隔的目录列表.

在查找要包含的文件时,PHP会分别考虑包含路径中的每个条目.它将检查第一个路径,如果找不到它,请检查下一个路径,直到找到包含的文件或返回警告或错误.您可以使用set_include_path()在运行时修改或设置包含路径.

构造

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
Run Code Online (Sandbox Code Playgroud)

phpseclib当您请求包含具有上述功能之一的文件时,会附加到搜索到的目录列表中.

由于phpseclib是相对路径,因此效果与您指定的相同./phpseclib,即PHP将查看phpseclib在进程的当前目录中命名的子目录.它并没有神奇地确定库在文件系统中的位置; 将它放在可以找到的地方是你的工作.


laf*_*for 7

为了更好地理解什么include_path是和不是,请阅读php.ini手册的这一部分.

如果您正在尝试编写特定于项目的"自动加载器",那么set_include_path它不是最好的工具(您可能需要查看spl_autoload_register),但要回答您的问题:

set_include_path会覆盖以前的任何内容include_path.可以使用PATH_SEPARATOR常量作为分隔符提供多个路径,例如:

set_include_path($path1. PATH_SEPARATOR . $path2 . PATH_SEPARATOR . $path3);
Run Code Online (Sandbox Code Playgroud)

因此,您可以添加到已存在的路径,而不是像这样覆盖它:

set_include_path(get_include_path() . PATH_SEPARATOR . $mypath);
Run Code Online (Sandbox Code Playgroud)