検索

PHPでSFTPを実装する方法

Dec 26, 2017 am 11:45 AM
phpsftp方法

この記事では、主に PHP で sftp を使用するためのチュートリアルを紹介します。この記事では、ftp プロトコル、ssh プロトコル、sftp プロトコルの概要とその他の知識について説明し、FTP および SFTP 操作クラスの実装コードを示します。お役に立てれば幸いです。

<?php 
/**

    php 中的sftp 使用教程 

    Telnet、FTP、SSH、SFTP、SSL 

    (一) ftp 协议简介 

		FTP(File Transfer Protocol,文件传输协议)是互联网上常用的协议之一,人们用FTP实现互连网上的文件传输。

	如同其他的很多通讯协议,FTP通讯协议也采用客户机 / 服务器(Client / Server )架构。用户可以通过各种不同的FTP客户端程序,

	借助FTP协议,来连接FTP服务器,以上传或者下载文件FTP的命令传输和数据传输是通过不同的端口进行传输的

	FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,

	这样FTP客户在和服 务器建立连接前就要经过一个被广为熟知的"三次握手"的过程,它带来的意义在于客户与服务器之间的连接是可靠的,

	而且是面向连接,为数据的传输提供了可靠 的保证。



    (二)ssh协议 

		ssh 的全称为 SecureShell ,可以报所有的传输数据惊醒加密,这样&#39;中间人&#39;就不能获得我们传输的数据
	同时,传输的数据是经过压缩的,可以加快传输的速度.ssh有很多功能,可以替代telnet 也可也为ftppop ,提供一个安全的通道 

	SSH协议框架中最主要的部分是三个协议:
	* 传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;
	* 用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;
	* 连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用; 

	 各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。

	 
    (三)sftp 协议 

	  使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议。区别:sftp是ssh内含的协议(ssh是加密的telnet协议),

		只要sshd服务器启动了,它就可用,而且sftp安全性较高,它本身不需要ftp服务器启动。 sftp = ssh + ftp(安全文件传输协议)。由于ftp是明文传输的,

		没有安全性,而sftp基于ssh,传输内容是加密过的,较为安全。目前网络不太安全,以前用telnet的都改用ssh2(SSH1已被破解)。sftp这个工具和ftp用

		法一样。但是它的传输文件是通过ssl加密了的,即使被截获了也无法破解。而且sftp相比ftp功能要多一些,多了一些文件属性的设置
*/

// 注意这里只是为了介绍ftp ,并没有做验证 ;      
class ftp{
     
    // 初始配置为NULL
    private $config =NULL ;
    // 连接为NULL 
    private $conn = NULL;
     
    public function init($config){
     $this->config = $config;    
    }
     
    // ftp 连接 
    public function connect(){
        return $this->conn = ftp_connect($this->config[&#39;host&#39;],$this->config[&#39;port&#39;])); 
    }
     
     
    // 传输数据 传输层协议,获得数据 true or false 
  public function download($remote, $local,$mode = &#39;auto&#39;){
      return $result = @ftp_get($this->conn, $localpath, $remotepath, $mode);
  }
   
  // 传输数据 传输层协议,上传数据 true or false 
  public function upload($remote, $local,$mode = &#39;auto&#39;){
      return $result = @ftp_put($this->conn, $localpath, $remotepath, $mode);
  }
     // 删除文件 
    public function remove($remote){
     return $result = @ftp_delete($this->conn_id, $file);
    }     
}       
 
 
 
// 使用 
$config = array(
            &#39;hostname&#39; => &#39;localhost&#39;,
      &#39;username&#39; => &#39;root&#39;,
      &#39;password&#39; => &#39;root&#39;,
      &#39;port&#39; => 21
 
) ;
  
$ftp = new Ftp();
$ftp->connect($config);
$ftp->upload(&#39;ftp_err.log&#39;,&#39;ftp_upload.log&#39;);
$ftp->download(&#39;ftp_upload.log&#39;,&#39;ftp_download.log&#39;);
 
 
 
/*根据上面的三个协议写出基于ssh 的ftp 类
我们知道进行身份认证的方式有两种:公钥;密码 ;
(1) 使用密码登陆
(2) 免密码登陆也就是使用公钥登陆 
 
*/
 
class sftp{
     
     
    // 初始配置为NULL
    private $config =NULL ;
    // 连接为NULL 
    private $conn = NULL;
 
     
    // 是否使用秘钥登陆 
     private $use_pubkey_file= false;
     
    // 初始化
    public function init($config){
        $this->config = $config ; 
    }
     
     
    // 连接ssh ,连接有两种方式(1) 使用密码
    // (2) 使用秘钥 
    public function connect(){
         
        $methods[&#39;hostkey&#39;] = $use_pubkey_file ? &#39;ssh-rsa&#39; : [] ; 
        $con = ssh2_connect($this->config[&#39;host&#39;], $this->config[&#39;port&#39;], $methods);
        //(1) 使用秘钥的时候 
        if($use_pubkey_file){
        // 用户认证协议
             $rc = ssh2_auth_pubkey_file(
                $conn,
                $this->config[&#39;user&#39;],
                $this->config[&#39;pubkey_file&#39;],
                $this->config[&#39;privkey_file&#39;],
                $this->config[&#39;passphrase&#39;]) 
            );
        //(2) 使用登陆用户名字和登陆密码
        }else{
            $rc = ssh2_auth_password( $conn, $this->conf_[&#39;user&#39;],$this->conf_[&#39;passwd&#39;]);
       
        }
         
        return $rc ; 
    }
     
     
    // 传输数据 传输层协议,获得数据
      public function download($remote, $local){           
          return ssh2_scp_recv($this->conn_, $remote, $local);
      }
       
     //传输数据 传输层协议,写入ftp服务器数据
     public function upload($remote, $local,$file_mode=0664){
          return ssh2_scp_send($this->conn_, $local, $remote, $file_mode);           
     }
      
     // 删除文件 
      public function remove($remote){
            $sftp = ssh2_sftp($this->conn_);
            $rc  = false;
 
    if (is_dir("ssh2.sftp://{$sftp}/{$remote}")) {
            $rc = false ;
             
            // ssh 删除文件夹
      $rc = ssh2_sftp_rmdir($sftp, $remote);
            } else {
          // 删除文件
                $rc = ssh2_sftp_unlink($sftp, $remote);
            }
            return $rc;
             
        }
  
     
}
 
 
$config = [
  "host"     => "192.168.1.1 ",   // ftp地址
  "user"     => "***", 
  "port"     => "22",
  "pubkey_path" => "/root/.ssh/id_rsa.pub",  // 公钥的存储地址
  "privkey_path" => "/root/.ssh/id_rsa",     // 私钥的存储地址
];
 
$handle = new SftpAccess();
$handle->init($config);
$rc = $handle->connect();
$handle->getData(remote, $local);		

関連する推奨事項:

phpファイルの読み取りシリーズの方法の詳細な説明

Php ssh2拡張機能を使用してテストサーバーへのsvn自動送信を実装する、ssh2svn_PHPチュートリアル

php ssh2 拡張機能の操作

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

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

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境