我偶然发现了两个我从未在php中使用过的函数。
set_include_path();
get_include_path();目前,我希望将phpseclib实现到我正在处理的项目上。因为我需要使用SSH2的SFTP类扩展,这反过来又需要MathBigInteger类。等。
手册上提到了set_include_path()
“为脚本的持续时间设置include_path配置选项。”
这对我的框架的其余部分意味着什么,它会设置来自'phpseclib‘dir的所有包含路径吗?
而且,我真的不明白:
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');我将phpseclib存储在文件系统中的自定义库目录中,get_include_path()在我的文件系统中如何神奇地找到phpseclib目录?
如你所见,我在这里完全迷路了。有谁能帮我理清一下吗?
PS/ I只需要在应用程序中的一个分区点使用这个库,因此只希望在需要时包含它,目前我希望将它包含在我的模型类的子类中。
发布于 2013-01-12 16:32:32
首先,您需要了解include_path配置设置的功能:
指定请求、包含、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的子目录。它并不能神奇地确定库在文件系统中的位置;您的工作是将它放在将被找到的位置。
发布于 2013-01-12 16:34:28
要更好地理解include_path是什么和不是什么,请阅读本节 of 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);因此,您可以添加到已经存在的路径,而不是像这样覆盖它:
set_include_path(get_include_path() . PATH_SEPARATOR . $mypath);发布于 2013-01-12 16:31:01
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';上面的工作非常好,并且继续正确地包含应用程序所需的其他文件。
https://stackoverflow.com/questions/14295164
复制相似问题