php メソッドで sftp アップロードを実装します: 1. コード「class SFTPConnection private $connection...try{...}catch{...}」を作成します; 2. 「sftp -oPort=port」を実行しますuser @server」ステートメントで十分です。
この記事の動作環境: 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 サイトの他の関連記事を参照してください。