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

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

零到壹度
零到壹度オリジナル
2018-04-11 18:03:124717ブラウズ

この記事の内容は、PHP + sftp で実装されたファイルのアップロードとダウンロードを共有することです。必要な友人はそれを参照できます

最近、銀行と協力するプロジェクトを開発しました。 、ドキュメントのアップロードとダウンロードが必要です。ファイルの機密性には一定の要件があるため、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"

今、唯一の方法は、多くの情報を確認した後、最終的にファイルの実際のパスを確認し、最終的にアクセスされたファイルのアドレスを返す

ssh2_sftp_realpathを見つけました。 SFTPに接続した後。 "ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"

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

sh2.sftp://{$resSFTP}

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

アップロードに使用する関数は使用できませんcopy、file_get_content、curl

を使用してアップロードする必要があります

ssh2_scp_recvダウンロード

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

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