程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php使用ftp遠程上傳文件類(完美解決主從文件同步問題的方法)

php使用ftp遠程上傳文件類(完美解決主從文件同步問題的方法)

編輯:PHP綜合

php使用ftp實現文件上傳代碼片段:

<?php 
  /**
   * ftp上傳文件類
   */ 
  class Ftp { 

    /**
     * 測試服務器
     * 
     * @var array
     */ 
    private $testServer = array( 
      'host' => 'ip', 
      'port' => 21, 
      'user' => 'userName', 
      'pwd' => 'password' 
    ); 

    /**
     * 打開並登錄服務器
     * 
     * @param string $flag 服務器標識test
     * @return mixed 
     *       0:服務器連接失敗
     *       1:服務器登錄失敗
     *       resource 連接標識
     */ 
    public function openServer($flag = 'test'){ 
      //選擇服務器 
      $config = $this->getServerConfig($flag); 

      //連接服務器 
      $connect = ftp_connect($config['host'], $config['port']); 
      if($connect == false) return 0; 

      //登錄服務器 
      if(!ftp_login($connect, $config['user'], $config['pwd'])) return 1; 

      //打開被動模式,數據的傳送由客戶機啟動,而不是由服務器開始 
      ftp_pasv($connect, true); 

      //返回連接標識 
      return $connect; 
    } 

    /**
     * 創建目錄並將目錄定位到當請目錄
     * 
     * @param resource $connect 連接標識
     * @param string $dirPath 目錄路徑
     * @return mixed 
     *       2:創建目錄失敗
     *       true:創建目錄成功
     */ 
    public function makeDir($connect, $dirPath){ 
      //處理目錄 
      $dirPath = '/' . trim($dirPath, '/'); 
      $dirPath = explode('/', $dirPath); 
      foreach ($dirPath as $dir){ 
        if($dir == '') $dir = '/'; 
        //判斷目錄是否存在 
        if(@ftp_chdir($connect, $dir) == false){ 
          //判斷目錄是否創建成功 
          if(@ftp_mkDir($connect, $dir) == false){ 
            return 2; 
          } 
          @ftp_chdir($connect, $dir); 
        } 
      } 
      return true; 
    } 

    /**
     * 關閉服務器
     * 
     * @param resource $connect 連接標識
     */ 
    public function closeServer($connect){ 
      if(!empty($connect)) ftp_close($connect); 
    } 

    /**
     * 上傳文件
     * 
     * @param string $flag 服務器標識
     * @param string $local 上傳文件的本地路徑
     * @param string $remote 上傳文件的遠程路徑
     * @return int 
     *       0:服務器連接失敗 
     *       1:服務器登錄失敗
     *       2:創建目錄失敗
     *       3:上傳文件失敗
     *       4:上傳成功
     */ 
    public function upload($flag = 'test', $local, $remote){ 
      //連接並登錄服務器 
      $connect = $this->openServer($flag); 
      if(($connect === 0) || ($connect === 1)) return $connect; 

      //上傳文件目錄處理 
      $mdr = $this->makeDir($connect, dirname($remote)); 
      if($mdr === 2) return 2; 

      //上傳文件 
      $result = ftp_put($connect, basename($remote), $local, FTP_BINARY); 

      //關閉服務器 
      $this->closeServer($connect); 

      //返回結果 
      return (!$result) ? 3 : 4; 
    } 

    /**
     * 刪除文件
     * 
     * @param string $flag 服務器標識
     * @param string $remote 文件的遠程路徑
     * @return int 
     *       0:服務器連接失敗 
     *       1:服務器登錄失敗
     *       2:刪除失敗
     *       3:刪除成功
     */ 
    public function delete($flag = 'test', $remote){ 
      //連接並登錄服務器 
      $connect = $this->openServer($flag); 
      if(($connect === 0) || ($connect === 1)) return $connect; 

      //刪除 
      $result = ftp_delete($connect, $remote); 

      //關閉服務器 
      $this->closeServer($connect); 

      //返回結果 
      return (!$result) ? 2 : 3; 
    } 

    /**
     * 讀取文件
     * 
     * @param string $flag 服務器標識
     * @param string $remote 文件的遠程路徑
     * @return mixed 
     *       0:服務器連接失敗 
     *       1:服務器登錄失敗
     */ 
    public function read($flag, $remote){ 
      //連接並登錄服務器 
      $connect = $this->openServer($flag); 
      if(($connect === 0) || ($connect === 1)) return $connect; 

      //讀取 
      $result = ftp_nlist($connect, $remote); 

      //關閉服務器 
      $this->closeServer($connect); 

      //返回結果 
      foreach ($result as $key => $value){ 
        if(in_array($value, array('.', '..'))) unset($result[$key]); 
      } 
      return array_values($result); 
    } 

    /**
     * 獲取ftp服務器配置
     * 
     * @param string $flag 服務器標識test
     * @return array ftp服務器連接配置
     */ 
    private function getServerConfig($flag = 'test'){ 
      $flag = strtolower($flag); 
      //測試服務器 
      if($flag == 'test') return $this->testServer; 
      //默認返回測試服務器 
      return $this->testServer; 
    } 
  }
  ?>

以上就是小編為大家帶來的php使用ftp遠程上傳文件類(完美解決主從文件同步問題的方法)的全部內容了,希望對大家有所幫助,多多支持~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved