我无法让 phpseclib 工作

I can't get phpseclib to work

我想做什么

我想使用 php 通过 sftp upload/download 一个文件。 phpseclib-library 看起来很有前途。

我已经做了什么

我将 conposer.json 更改为:

{
    "require": {
        "nicolab/php-ftp-client":"*",
        "php-curl-class/php-curl-class":"*",
        "phpseclib/phpseclib":"*"
    }
}

然后我更新了我的目录。 Composer 在供应商文件夹中安装了库。

问题

问题是我无法创建新的 SFTP-Object

Fatal error: Class 'SFTP' not found in...

我也试过 NET_SFTP 作为 classname 但这也不起作用。 我不明白的一件事是为什么 on,它声明 class 名称是 NET_SFTP,而在源代码中它明确称为 SFTP

自动加载似乎也不起作用。

我添加了echo "testline";到库中,看看是否加载了文件。如果我使用自动加载,什么也不会发生。如果我手动包含该文件,则会打印 "testline" 但仍然找不到 class。

我的代码

例子一

<?php
include '/vendor/autoload.php';

$sftp = new SFTP('domain');
if (!$sftp->login('user', 'pass')) {
    exit('Login Failed');
}

-> 没有回显

例子二:

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib/phpseclib');

include('Net/SSH2.php');

include('Net/SFTP.php');

$sftp = new SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

->回声

在这两个示例中都找不到 class。

One thing I dont understand is why on http://phpseclib.sourceforge.net/sftp/examples.html#stat it states that the classname is NET_SFTP when in the source its clearly called SFTP.

该网站正在记录 1.0 分支。 2.0 分支有类似的 API 但不完全相同。特别是,它是命名空间的,而 1.0 分支不是。

要修改您的第一个示例...

<?php
include '/vendor/autoload.php';

$sftp = new \phpseclib\Net\SFTP('domain');
if (!$sftp->login('user', 'pass')) {
    exit('Login Failed');
}

主分支的 API 可能会发生变化。只有 1.0 和 2.0 有固定的 API。因此,我认为更新您的 composer.json 也是合适的。 IE。做 "phpseclib/phpseclib": "~2.0" 而不是 *.