Ошибка типа при попытке установить PreferredAlgorithms

У меня возникли проблемы со следующим кодом. Это всего лишь раздел предварительного входа. Раньше это работало так: я получал ключ из файла. создайте новый объект 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. Ни то, ни другое не сработало.

🤔 А знаете ли вы, что...
Синтаксис PHP схож с синтаксисом C, C++, Java и Perl.


2
51
1

Ответ:

Решено

Вы делаете это:

$sftp->setPreferredAlgorithms(['hostkey' => 'ssh-dss']);

Когда вам следует это сделать:

$sftp->setPreferredAlgorithms(['hostkey' => ['ssh-dss']]);