我有一个link我在哪里看到了更改默认属性的引用。设置所需的模式以通过SFTP传输数据集。
这是怎么回事......
sftp> ls /+mode=text,lrecl=80,recfm=fb
在此,我们将模式更改为文本(默认为binary
模式)。
当我通过命令提示符执行它时它工作正常并给出相同的响应,这意味着命令执行得非常完美!
(在命令提示符下执行后的响应)
sftp> ls /+mode=text,lrecl=80,recfm=fb
/+mode=text,lrecl=80,recfm=fb
但如果我尝试通过PHP代码使用相同的内容,则会将错误抛给我
ls:找不到FSUM6785文件或目录“/ + mode = text,lrecl = 80,recfm = fb”
以下是我使用phpseclib库的方法:
define('NET_SFTP_LOGGING', NET_SFTP_LOG_COMPLEX);
$user = 'username';
$host = 'host';
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('file.ppk'));
$sftp = new Net_SFTP($host);
if ($sftp->login($user,$key)) {
echo $sftp->exec('ls /+mode=text,lrecl=80,recfm=fb');
} else {
return false;
}
在上面,如果我尝试使用$sftp->exec('ls -la');
和$sftp->exec('pwd');
它给了我目前的目录列表和分别是当前目录..这意味着SFTP连接正常,exec
命令有效。
但是当我使用上面提到的ls /+mode=text,lrecl=80,recfm=fb
命令时,同样的抛出错误。
是否需要设置其他任何内容才能使这些/+mode=text.....
命令正常工作
答案 0 :(得分:1)
sftp> ls /+mode=text,lrecl=80,recfm=fb
以上是OpenSSH sftp
客户端命令ls
。在内部,它会发出一系列SFTP请求(OPENDIR
,READDIR
,CLOSE
)以检索目录列表。
实施SFTP服务器以专门处理具有该唯一语法的OPENDIR
,如the article you link to中所述。
echo $sftp->exec('ls /+mode=text,lrecl=80,recfm=fb');
虽然上面执行了远程shell ls
命令。 shell ls
命令没有对语法进行特殊处理,并将其视为路径并失败。
请注意,在exec
实例上执行$sftp
时,该方法实际上是在父SSH2
类中实现的,与SFTP无关。
要模拟OpenSSH ls
的{{1}}命令(即发送sftp
SFTP请求),请使用OPENDIR
类的一些目录列表命令,如{{ 1}}或SFTP
:
nlist