ホームページ >バックエンド開発 >PHPの問題 >PHPでSFTPアップロードを実装する方法

PHPでSFTPアップロードを実装する方法

藏色散人
藏色散人オリジナル
2021-09-14 10:57:302813ブラウズ

php メソッドで sftp アップロードを実装します: 1. コード「class SFTPConnection private $connection...try{...}catch{...}」を作成します; 2. 「sftp -oPort=port」を実行しますuser @server」ステートメントで十分です。

PHPでSFTPアップロードを実装する方法

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

php は sftp をどのように実装しますかアップロード?

php SFTP ファイルのアップロードの実装

php SFTP ファイルのアップロードを実装するには、php.net 公式 Web サイトのメソッドを完全に使用できます。

class SFTPConnection
{
    private $connection;
    private $sftp;

    public function __construct($host, $port=22)
    {
        $this->connection = @ssh2_connect($host, $port);
        if (! $this->connection)
            throw new Exception("Could not connect to $host on port $port.");
    }

    public function login($username, $password)
    {
        if (! @ssh2_auth_password($this->connection, $username, $password))
            throw new Exception("Could not authenticate with username $username " .
                                "and password $password.");

        $this->sftp = @ssh2_sftp($this->connection);
        if (! $this->sftp)
            throw new Exception("Could not initialize SFTP subsystem.");
    }

    public function uploadFile($local_file, $remote_file)
    {
        $sftp = $this->sftp;
        $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');

        if (! $stream)
            throw new Exception("Could not open file: $remote_file");

        $data_to_send = @file_get_contents($local_file);
        if ($data_to_send === false)
            throw new Exception("Could not open local file: $local_file.");

        if (@fwrite($stream, $data_to_send) === false)
            throw new Exception("Could not send data from file: $local_file.");

        @fclose($stream);
    }
}

try
{
    $sftp = new SFTPConnection("localhost", 22);
    $sftp->login("username", "password");
    $sftp->uploadFile("/tmp/to_be_sent", "/tmp/to_be_received");
}
catch (Exception $e)
{
    echo $e->getMessage() . "\n";
}

ただし、プロセス中に問題が発生しました。私の php バージョンは PHP 5.6.31 (cli) (ビルド: Aug 2 2017 15:05:23) です。

$stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');
# を実行すると、 ##fopen、ファイルを実行すると「セグメンテーション違反」エラーが報告されますが、次の方法で解決できます

$stream = @fopen("ssh2.sftp://" . intval($sftp) . $remote_file, 'w');

このうち、sftpアップロードを実装する場合、アップロードされたファイルとアップロードディレクトリの違いが考慮されていないため (例: /upload および /upload /test.txt)、php が実行されるたびに、リモート ホスト上の fopen(): Unable to open ssh2.sftp://5/upload が報告されます。問題の解決策は

Serious、大文字の Serious

上記は php によって実行されます。SFTP サーバーにログインして確認するだけで、結果がわかります。

sftp コマンドのログイン方法:

sftp -oPort=port user@server にパスワードを入力します。入力後、相対ディレクトリに移動してファイルが存在するかどうかを確認できます。

推奨学習: "

PHP ビデオ チュートリアル "

以上がPHPでSFTPアップロードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。