n個のリモートサーバーを介してプログラムでファイルを取得する必要があるため、PHPで単純なSFTPクライアントを作成しています。PECLSSH2拡張機能を使用しています。
しかし、私は障害物にぶつかりました。php.netのドキュメントは、これを実行できることを示唆しています。
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');
しかし、私は似たようなことを試みるlsメソッドを持っています
public function ls($dir)
{
$rd = "ssh2.sftp://{$this->sftp}/$dir";
$handle = opendir($rd);
if (!is_resource($handle)) {
throw new SFTPException("Could not open directory.");
}
while (false !== ($file = readdir($handle))) {
if (substr($file, 0, 1) != '.'){
print $file . "\n";
}
}
closedir($handle);
}
次のエラーが発生します。
PHP Warning: opendir(): Unable to open ssh2.sftp://Resource id #5/outgoing on remote host
これは、リソースを文字列にキャストするときに発生するため、完全に理にかなっています。ドキュメントは間違っていますか?リソースをhost、username、hostに置き換えてみましたが、どちらも機能しませんでした。コマンドラインからSFTPを実行でき、正常に機能するため、パスが正しいことがわかります。
他の誰かがSFTPでSSH2拡張機能を使用しようとしましたか?ここで明らかな何かが欠けていますか?
アップデート:
社内の別のマシンでsftpをセットアップしましたが、問題なく動作します。だから、私が接続しようとしているサーバーについて何かが機能していないに違いありません。