【问题标题】:I can't get phpseclib to work我无法让 phpseclib 工作
【发布时间】:2015-10-28 06:39:48
【问题描述】:

我想做什么

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

我已经做过的事情

我将 conposer.json 更改为:

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

然后我更新了我的目录。 Composer 将库安装在 vendor 文件夹中。

问题

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

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

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

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

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

我的代码

示例一

<?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');
}

->回声

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

【问题讨论】:

  • 只是想注意 phpseclib 3.0,它的 use phpseclib3\Net\SFTP;

标签: php phpseclib


【解决方案1】:

我不明白的一件事是为什么在 http://phpseclib.sourceforge.net/sftp/examples.html#stat 上它声明类名是 NET_SFTP 而在源代码中它明确称为 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" 而不是*

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 2015-05-20
    • 2015-10-22
    • 2023-03-24
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多