如何使用PHP的set_include_path和多目录库

时间:2016-06-26 14:56:46

标签: php phpseclib

所以我在项目中使用PHP Secure Communications Library 2.0,它在很多地方使用(不同子目录中的不同文件)

目前,为了使其工作,我将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_path(get_include_path() . PATH_SEPARATOR . '/tmp/phpseclib');

$sftp = new Net_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.phptwo.php使用phpseclib,我觉得我需要做的就是添加......

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

...到每个人的顶部并且好好去。我做错了什么/错过了什么?

1 个答案:

答案 0 :(得分:4)

在许多不同的地方加载库的最简单方法是使用自动加载器。

Composer由phpseclib建议,非常容易设置。 您可以从此处下载作曲家:https://getcomposer.org/download/

一旦你有了作曲家设置,你需要做的下一件事就是在项目的根目录中创建一个composer.json文件。对于您想要使用的任何版本,请输出2.0。*。

{
    "require": {
        "phpseclib/phpseclib": "2.0.*"
    }
}

可在此处找到可用的版本:https://packagist.org/packages/phpseclib/phpseclib

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

composer install
        or
php composer.phar install

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

需要进行的最后几项更改是在index.php文件中。

更改

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

require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
use \phpseclib\Net\SFTP;

允许您访问phpseclib文件夹中的SFTP功能。 另外,根据您使用的版本,一些命名法已经改变。

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

$sftp = new Net_SFTP($ihost);

$sftp = new SFTP($ihost);