ホームページ >バックエンド開発 >PHPチュートリアル >PHP は sftp に接続してファイルのアップロードとダウンロードを実装します
この記事の内容は、sftp と PHP を接続してファイルのアップロードとダウンロードを実現することについてです。これは、必要な友人に参照してもらえるように共有します。ファイルをアップロードしてダウンロードする必要があります。ファイルの機密性には一定の要件があるため、SFTP が使用されます。しかし、実際の開発では、インターネット上にあるチュートリアルや事例が使えず、何度もコピーするという問題が発生しました。継続的なデバッグの結果、ついに PHP のファイルのアップロードとダウンロードが実現しました。現在は参照用にのみ記録されています。
1. PHP バージョンを確認し、対応する ssh2 拡張機能をダウンロードします https://windows.php.net/downloads/pecl/releases/ssh2/ 。具体的なインストールについては、オンラインで検索してください。 phpinfo() はインストールされているかどうかを確認します。インストールが成功すると、ssh2.
2が表示されます。
インターネットで提供されているアップロードとダウンロードの方法(見たことがあるはずです)<·?·php
//php环境中必须有ssh
·$strServer = "服务器ip";//服务器ip
·$strServerPort = "22";//端口号
·$strServerUsername = "***";//用户名
·$strServerPassword = "***";//密码
·//connect to server
·$resConnection = ssh2_connect($strServer, $strServerPort);
·if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){
·//初始化 SFTP
·$resSFTP = ssh2_sftp($resConnection);
·echo $resSFTP;
·//下载文件
·//1
·$filename = 'D:\down'.time().'.txt';
·$opts = array(
·'http'=>array(
·'method'=>"GET",
·'timeout'=>60,
·)
·);
·$context = stream_context_create($opts);
·$strData = ·file_get_contents("ssh2.sftp://{$resSFTP}/var/testfile/abc.txt", false, $context);
·file_put_contents($filename, $strData);
·//2 也可以用copy()
·//if(!copy("ssh2.sftp://{$resSFTP}/dfr508/WUN/ikea-logo.jpg", $filename)) {
·// echo 'download failed';
·//}
·//--------------------------------------------------------------------------------------------------------------
·//上传文件
·//1
·//file_put_contents("ssh2.sftp://{$resSFTP}/var/testfile/456.txt", 'D:/ab.txt');
·//2也可以用copy()
·if(!copy("d:/ab.txt", "ssh2.sftp://{$resSFTP}/var/testfile/up".time().".txt")) {
·echo 'upload failed';
·}
·} else {
·echo "无法在服务器进行身份验证";
·}
·?·>
しかし、オンラインチュートリアルに従っても、それを達成できませんでした。 , そのため、段階的に原因を調査する必要がありました。
$strServer = "";//服务器ip $strServerPort = "";//端口号 $strServerUsername = "";//用户名 $strServerPassword = "";//密码 //1连接服务器 $resConnection = ssh2_connect($strServer, $strServerPort); //2验证连 if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){ //3初始化 SFTP $resSFTP = ssh2_sftp($resConnection);
まず、最初の 3 つの手順では問題ありません。
copy、file_get_content、curl メソッドを使用してアップロードとダウンロードを実行すると、502 エラーが報告されます。パスなどを確認して問題なかったのですが、どうしても成功しません。
SFTPサーバー上のファイルアドレスにアクセスできないことが後から推測されます。
"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"
今、本当に使えるアドレスしか見つかりません。たくさんの情報を調べて、最終的にPHPで見つけました。 Manual
ssh2_sftp_realpath ファイルの実パスを確認し、最後にSFTP接続後にアクセスしたファイルのアドレスを返します。
アップロードに使用する関数は使用できません。前述の
copy、file_get_content、curlを使用する必要があります
ssh2_scp_send Upload
ssh2_scp_recv Download
以上がPHP は sftp に接続してファイルのアップロードとダウンロードを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。