web-dev-qa-db-ja.com

PHPでSFTPを実行する方法は?

Web FTPクライアント用の多くのPHPスクリプトに遭遇しました。 PHPでSFTPクライアントをWebアプリケーションとして実装する必要があります。 PHPはSFTPをサポートしていますか?サンプルが見つかりませんでした。誰でもこれで私を助けることができますか?

76
indranama

PHPにはssh2ストリームラッパーがあるため(デフォルトでは無効)、プロトコルにssh2.sftp://を使用することにより、ストリームラッパーをサポートする関数でsftp接続を使用できます。

file_get_contents('ssh2.sftp://user:[email protected]:22/path/to/filename');

または- ssh2 extension も使用する場合

$connection = ssh2_connect('Shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$sftp = ssh2_sftp($connection);
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');

http://php.net/manual/en/wrappers.ssh2.php を参照してください

副次的な注意事項として、このトピックに関するかなりの質問も既にあります。

69
Gordon

Ssh2関数はあまり良くありません。使用するのが難しく、インストールするのがさらに難しい場合、それらを使用すると、コードの移植性がゼロになります。 phpseclib、純粋なPHP SFTP実装 を使用することをお勧めします。

37
calgaryhit

「phpseclib」がこれに役立つはずだとわかりました(SFTPおよびその他の多くの機能)。 http://phpseclib.sourceforge.net/

ファイルをサーバーに置くには、単に呼び出します( http://phpseclib.sourceforge.net/sftp/examples.html#put からのコード例)

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

// puts a three-byte file named filename.remote on the SFTP server
$sftp->put('filename.remote', 'xxx');
// puts an x-byte file named filename.remote on the SFTP server,
// where x is the size of filename.local
$sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE);
27