我无法让 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"
而不是 *
.
我想做什么
我想使用 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"
而不是 *
.