所以我在项目中使用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.php
和two.php
使用phpseclib,我觉得我需要做的就是添加......
set_include_path(get_include_path() . PATH_SEPARATOR . '/tmp/phpseclib');
include('Net/SSH2.php');
...到每个人的顶部并且好好去。我做错了什么/错过了什么?
答案 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);