You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用setPreferredAlgorithms触发TypeError,PHP+phpseclib问题求助

问题解决:phpseclib 3.0 setPreferredAlgorithms 触发 array_intersect 类型错误

问题原因

phpseclib 3.x版本中,setPreferredAlgorithms方法的hostkey参数要求传入数组类型,你当前传入的是字符串'ssh-dss',导致SSH2.php内部调用array_intersect函数时参数类型不匹配,触发TypeError。

解决方案

将hostkey对应的值改为数组格式,即使只有一个算法也要用数组包裹:

修改后的核心代码:

$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();
  }
}

补充说明

  1. 原代码中$sftp->login($user, $key)末尾遗漏了分号,建议一并补上避免语法问题。
  2. 服务器更新后可能强化了SSH算法协商的校验逻辑,或phpseclib内部实现对参数类型要求更严格,导致原本能运行的字符串参数现在触发错误。

内容的提问来源于stack exchange,提问作者fliz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:44:51