我在使用以下代码时遇到问题。这只是登录前部分。 以前的工作方式是,我从文件中获取密钥。创建一个新的 sftp 对象,将首选算法设置为 ssh-dss(这是该特定服务器提供的唯一算法),然后登录。一切都很好。我一定是在服务器上更新了一些东西,导致事情搞砸了,因为代码没有改变,但这一点现在已经损坏了。
我不断收到此错误:
array_intersect(): Argument #1 ($array) must be of type array, string given
我们正在使用 PHP 8.0.30
PHPSECLIB 3.0
在 Ubuntu 20.04.6 上
阿帕奇 2.4.62
我在 WordPress 上也遇到过类似的问题,但没有任何解决方案。
如果您能帮我解决这个问题,我将非常感激。
$key = $this->__getKeyWithFile($mykey, $myphrase);
$sftp = new SFTP($host, $port);
if (!empty($sftp)) {
try {
$sftp->setPreferredAlgorithms(['hostkey' => 'ssh-dss']);
$sftp->login($user, $key)
} catch (Error $er) {
echo $er->getMessage();
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
编辑添加完整错误。我的不好。不过下面问题就解决了。
PHP Fatal error: Uncaught TypeError: array_intersect(): Argument #1 ($array) must be of type array, string given in /vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:4623
Stack trace:
#0 /vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php(4623): array_intersect()
#1 FTPTools.php(105): phpseclib3\Net\SSH2->setPreferredAlgorithms()
#2 Reporter.php(1247): FTPTools->login()
#3 run_rebot.php(60): Reporter->myfunction()
#4 {main}
thrown in /vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php on line 4623
我尝试更新我的服务器。我尝试重新安装 phpseclib。都不起作用。
你正在这样做:
$sftp->setPreferredAlgorithms(['hostkey' => 'ssh-dss']);
当你应该这样做时:
$sftp->setPreferredAlgorithms(['hostkey' => ['ssh-dss']]);