1. 程式人生 > >php SFTP檔案上傳

php SFTP檔案上傳

TP3.2存放類檔案目錄下(Common/Org/)新建php檔案 sftp.class.php

php沒有SFTP,使用的是SSH擴充套件

<?php
/******************************************** 
* MODULE:SFTP類 
*******************************************/
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['hostkey'] = $this->use_pubkey_file ? 'ssh-rsa' : [] ;
        $this->conn = ssh2_connect($this->config['host'], $this->config['port'], $methods);
        //(1) 使用祕鑰的時候
        if($this->use_pubkey_file){
            // 使用者認證協議
            $rc = ssh2_auth_pubkey_file($this->conn,$this->config['user'],$this->config['pubkey_file'],$this->config['privkey_file'],$this->config['passphrase']);
            //(2) 使用登陸使用者名稱字和登陸密碼
        }else{
            $rc = ssh2_auth_password( $this->conn, $this->config['user'],$this->config['passwd']);
        }
        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;
    }
}
?>

使用方法

import("Common/Org/sftp");
    $config = array("host"=>"host","user"=>"","port"=>"","passwd"=>"");
    $handle = new \sftp();
    $handle->init($config);
    $rc = $handle->connect();
    //上傳,成功返回true
    dump($handle->upload("remotePath","localPath"));exit;
    //下載,成功返回true
    dump($handle->download("remotePath","localPath"));exit;

使用時要注意擴充套件和接收端伺服器安裝

PHP之SFTP擴充套件庫編譯安裝注意事項

1、下載檔案: wget http://www.libssh2.org/download/libssh2-1.4.2.tar.gz wget http://pecl.PHP.net/get/ssh2-0.12.tgz2、安裝 libssh2 在安裝 SS2 tar -zxvf libssh2-1.4.2.tar.gz cd libssh2-1.4.2 ./configure --prefix=/usr/local/libssh2 make make test make install3、SSH安裝 tar -zxvf ssh2-0.12.tgz cd ssh2-0.12 phpize(個人目錄不同,例如:/usr/local/php/bin/phpize) ./configure --prefix=/usr/local/ssh2 --with-ssh2=/usr/local/libssh2 --with-php-config=/usr/local/php/bin/php-config   //找到php-config路徑 make make test make install

4、安裝完成

安裝完成後會在 /usr/local/php/lib/php/extensions目錄下生成一些檔案,可以不管

找到php.ini檔案,開啟後加入:

extension=ssh2.so