我希望使用upload
通过download
sftp
/ php
一个文件。
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
作为类名,但这也不起作用。
我不明白的一件事就是为什么on,它在源代码中指出类名为NET_SFTP
时明确称为SFTP
。
自动加载似乎无法正常工作。
我将echo "testline";
添加到库中以查看文件是否已加载。如果我使用自动加载,没有任何反应。如果我手动包含该文件,则会打印"testline"
,但仍未找到该类。
示例一
<?php
include '/vendor/autoload.php';
$sftp = new SFTP('domain');
if (!$sftp->login('user', 'pass')) {
exit('Login Failed');
}
- &GT;没有回声
示例二:
<?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');
}
- &GT;回声
在这两个例子中都找不到班级。
答案 0 :(得分:6)
我不明白的一点是,为什么在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的更新也是合适的。即。 "phpseclib/phpseclib": "~2.0"
代替*
。