如何使用PHP的set_include_路径和多目录库

如何使用PHP的set_include_路径和多目录库,php,phpseclib,Php,Phpseclib,所以我在一个项目中使用它,它被用于不同子目录中不同文件的许多地方 目前,为了让它工作,我将5个目录和1个文件复制到每个子目录中,然后使用include'Net/SSH2.php'包含;我相信这是不正确的 文档中说要使用以下内容: set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib'); include('Net/SSH2.php'); 但我不能让它工作 我有一个文件/var/www/test.php和/var/ww

所以我在一个项目中使用它,它被用于不同子目录中不同文件的许多地方

目前,为了让它工作,我将5个目录和1个文件复制到每个子目录中,然后使用include'Net/SSH2.php'包含;我相信这是不正确的

文档中说要使用以下内容:

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');
但我不能让它工作

我有一个文件/var/www/test.php和/var/www/phpseclib

我到目前为止所做的一切

ini_set('display_errors', 1);
echo get_include_path();  //Gets me .:
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');

$sftp = new Net_SFTP('10.0.0.15');  //A valid IP for an SFTP host on the network
这将导致致命错误:在/var/www/test.php中找不到类“Net_SFTP”

然后我将phpseclib目录移动到/tmp,并更改为set_include_pathget_include_path。路径分隔符。”/tmp/phpseclib'

$sftp=新净sftp'10.0.0.15';仍然会导致致命错误:在/var/www/test.php中找不到类“Net_SFTP”

因此,我的结构是: 适当设置了/Users/jason/tmp中所有文件的权限

/Users/jason/tmp/phpseclib
/Users/jason/tmp/phpseclib/Crypt
/Users/jason/tmp/phpseclib/File
/Users/jason/tmp/phpseclib/Math
/Users/jason/tmp/phpseclib/Net
/Users/jason/tmp/phpseclib/System
/Users/jason/tmp/phpseclib/openssl.cnf

/var/www/test.php
/var/www/A/two.php
我想在test.php和two.php中都使用phpseclib,我觉得我需要做的就是添加

set_include_path(get_include_path() . PATH_SEPARATOR . '/tmp/phpseclib');
include('Net/SSH2.php');

…到达每一个顶部,并准备好。我做错了什么/遗漏了什么?

在多个不同位置加载库的最简单方法是使用自动加载器

Composer是由phpseclib建议的,非常容易设置。 您可以从此处下载composer:

一旦设置了composer,接下来需要做的就是在项目的根目录中创建一个composer.json文件。Sub out 2.0.*适用于您想要使用的任何版本

{
    "require": {
        "phpseclib/phpseclib": "2.0.*"
    }
}
可在此处找到可用版本:

创建此文件后,您需要在终端中运行这些命令之一,以生成自动加载库所需的所有内容。该命令将取决于系统的设置方式

composer install
        or
php composer.phar install
运行此命令后,将生成一个供应商文件夹,其中包含您指定的所有必需库。在这种情况下,只需phpseclib

需要进行的最后几项更改位于index.php文件中

改变

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');

这将允许您访问phpseclib文件夹中的SFTP函数。 另外,根据您使用的版本,一些术语已经更改

如果您使用的是2.0。*您需要更改

$sftp = new Net_SFTP($ihost);


在多个不同位置加载库的最简单方法是使用自动加载器

Composer是由phpseclib建议的,非常容易设置。 您可以从此处下载composer:

一旦设置了composer,接下来需要做的就是在项目的根目录中创建一个composer.json文件。Sub out 2.0.*适用于您想要使用的任何版本

{
    "require": {
        "phpseclib/phpseclib": "2.0.*"
    }
}
可在此处找到可用版本:

创建此文件后,您需要在终端中运行这些命令之一,以生成自动加载库所需的所有内容。该命令将取决于系统的设置方式

composer install
        or
php composer.phar install
运行此命令后,将生成一个供应商文件夹,其中包含您指定的所有必需库。在这种情况下,只需phpseclib

需要进行的最后几项更改位于index.php文件中

改变

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');

这将允许您访问phpseclib文件夹中的SFTP函数。 另外,根据您使用的版本,一些术语已经更改

如果您使用的是2.0。*您需要更改

$sftp = new Net_SFTP($ihost);


每天自动删除/tmp/中的文件。也许/var/www/phpseclib会更好?另外,我还要仔细检查权限。确保www数据或Apache正在运行的任何用户都可以访问该目录。。。您正在使用git的2.0分支吗?如果是这样的话,你就不应该按照上面的说明去做——你应该使用自动加载器。作曲家将是理想的,但你可以做它没有作曲家。有关更多信息,请参阅。@neubert谢谢,我更新了问题,/tmp是因为我懒惰。我正在使用2.0分支,因此我将每天检查/tmp/get自动删除中的autoloader.Files。也许/var/www/phpseclib会更好?另外,我还要仔细检查权限。确保www数据或Apache正在运行的任何用户都可以访问该目录。。。您正在使用git的2.0分支吗?如果是这样的话,你就不应该按照上面的说明去做——你应该使用自动加载器。作曲家将是理想的,但你可以做它没有作曲家。有关更多信息,请参阅。@neubert谢谢,我更新了问题,/tmp是因为我懒惰。我正在使用2.0分支,因此我将检查自动加载器。