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

时间:2013-01-12 16:08:42

标签: php ftp sftp phpseclib

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

set_include_path();
get_include_path();

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

手册说明了set_include_path()

  

“设置include_path配置选项的持续时间   脚本。 “

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

另外,我真的不明白:

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

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

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

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

4 个答案:

答案 0 :(得分: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');

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

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

答案 1 :(得分:7)

为了更好地理解include_path是什么和不是什么,请阅读php.ini手册的this section

如果您正在尝试编写特定于项目的“自动加载器”,set_include_path不是最好的工具(您可能希望改为查看spl_autoload_register),但要回答您的问题:

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

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

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

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

答案 2 :(得分:1)

set_include_path只是为PHP引擎设置查找文件的可能位置。例如:

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

上述方法运行良好,并继续正确包含应用程序所需的其他文件。

答案 3 :(得分:0)

John,我认为你的第二个例子失败的原因是'phpseclib'没有指定完整路径。假设您的第一个示例有效,您可能希望替换

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

set_include_path(get_include_path() . PATH_SEPARATOR . WEBROOT_PRIVATE.'scripts\phpseclib');

在第二个例子中。要确认您的include_path是您认为应该是的,您可以添加行

echo get_include_path() . " is my include path.\n";

在set_include_path()调用之后。