ホームページ  >  記事  >  バックエンド開発  >  PHP は sftp に接続してファイルのアップロードとダウンロードを実装します

PHP は sftp に接続してファイルのアップロードとダウンロードを実装します

不言
不言オリジナル
2018-04-16 10:07:142299ブラウズ

この記事の内容は、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 = &#39;D:\down&#39;.time().&#39;.txt&#39;;
·$opts = array(
·&#39;http&#39;=>array(
·&#39;method&#39;=>"GET",
·&#39;timeout&#39;=>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 &#39;download failed&#39;;
·//}
·//--------------------------------------------------------------------------------------------------------------
·//上传文件
·//1
·//file_put_contents("ssh2.sftp://{$resSFTP}/var/testfile/456.txt", &#39;D:/ab.txt&#39;);
·//2也可以用copy()
·if(!copy("d:/ab.txt", "ssh2.sftp://{$resSFTP}/var/testfile/up".time().".txt")) {
·echo &#39;upload failed&#39;;
·}
·} 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接続後にアクセスしたファイルのアドレスを返します。

"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"

を渡すと、このアドレスが間違っていることを示すエラーが報告されます。最後に、アップロードを確認します。ダウンロード アドレスは、前の

sh2.sftp://{$resSFTP}

で追加する必要はなく、SFTP ファイル パスを直接使用します。

アップロードに使用する関数は使用できません。前述の

copy、file_get_content、curl

を使用する必要があります

ssh2_scp_send Upload

ssh2_scp_recv Download

関連する推奨事項:

PHP connect to mysql メソッド - mysqli と PDO

PHP 接続プールの詳細な説明






以上がPHP は sftp に接続してファイルのアップロードとダウンロードを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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