2011-06-20 36 views
6

PHP SSH2を使用してリモートSSHサーバにディレクトリ 'xyz'が存在するかどうかを確認するにはどうすればよいですか?PHP SSH2を使用してリモートディレクトリを確認

+2

を使用して、フォルダまたはファイルであるかどうかを確認します。 PHP – powtac

+0

と交換キーを使用するか、動作させるためにあなたのPHPスクリプトにユーザ名/パスワードを提供する必要があります。鍵を交換する場合は、apacheを使用してスクリプトを実行する場合は、apacheユーザで鍵を交換する必要があることを考慮してください。 –

+0

私はssh接続の確立について話していません。接続後にサーバーに存在する特定のディレクトリを確認する必要があります。 – World

答えて

16

あなたは接頭辞SFTPを使用してfile_existsを使用することができます 'ssh2.sftpを://'

をたとえば、あなたができる定評の接続で:

$sftp = ssh2_sftp($connection); 
$fileExists = file_exists('ssh2.sftp://' . $sftp . '/home/marco'); 
1

仮定は

$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 
$cmd = 'if test -d "/YOUR_DIRECTORY"; then echo 1; fi'; 
$stream = ssh2_exec($connection, $cmd); 
Linuxサーバであります
3

phpseclib, a pure PHP SSH implementationの代わりにPHP SSH2を放棄することをお勧めします。

とりわけ、PHP SSH2のAPIはうんざりです。秘密鍵は読み込まれるファイルシステムに保存する必要がありますが、phpseclibでは必要なのは文字列だけです。 libssh2が必要とするようにファイルシステムにダンプしなくても、$ _POSTからキーを取ることができます。 libssh2には、秘密鍵に公開鍵であるが含まれているため、公開鍵用の別のファイル(脳死です)が必要です。

libshsh2のssh2_exec()もANSIカラーコードを返し、出力を返さないことがあります。また、ときどき(矛盾します)。

最後に、phpseclibはjust plain fasterです。

+0

'phpseclib'は、私有鍵での認証に関して高速ではありません。まともなキーの強さを使用すると、接続に10秒以上かかることがあります。 '秘密鍵は公開鍵を含んでいる'これは間違っている。これは公開鍵がsshのために必要でないという事実を変えるものではありません。私はssh2の制限付きのキーとしてのファイルパスを嫌いますが、モジュールのセキュリティを損なうことはなく、関数を使って簡単に一時ファイルを作成することができます。 'phpseclib'はスピードやCPU使用量を気にしなければ素晴らしいですが、私は両方を広範囲に使った人として、' ssh2'ははるかに高速でバグフリーです。 –

+2

phpseclibには数か月前に更新があったため、秘密鍵の認証を高速化する必要がありました。詳細については、http://phpseclib.sourceforge.net/math/intro.htmlを参照してください。 – neubert

0
<?php 
$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 

$sftp = ssh2_sftp($connection); 

$stream = file_exists("ssh2.sftp://$sftp/path/to/file"); 
?> 
0

リモートパスがここhttp://www.php.net/manual/en/function.ssh2-execマニュアルを確認してくださいPHP_SSH2

$path="/tmp"; 
$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 

$sftp = ssh2_sftp($connection); 
$isdir = is_dir("ssh2.sftp://$sftp/$path"); 
    if ($isdir ==true) { 
      echo "The Remote Folder is a Directory".PHP_EOL; 
    } 
    else { 
      $isfile = file_exists("ssh2.sftp://$sftp/$path"); 
      if ($isfile == true) { 
       echo "The Remote Path is a File".PHP_EOL; 
      } 
    } 
関連する問題