檔案1:ftp.php
<?php/** * 仿寫CodeIgniter的FTP類 * FTP基本操作: * 1) 登陸; connect * 2) 目前的目錄檔案清單; filelist * 3) 目錄改變; chgdir * 4) 重新命名/移動; rename * 5) 建立檔案夾; mkdir * 6) 刪除; delete_dir/delete_file * 7) 上傳; upload * 8) 下載 download * * @author quanshuidingdang */class Ftp { private $hostname= '';private $username= '';private $password= '';private $port= 21;private $passive= TRUE;private $debug= TRUE;private $conn_id= FALSE; /*** 建構函式** @param array 配置數組 : $config = array('hostname'=>'','username'=>'','password'=>'','port'=>''...);*/public function __construct($config = array()) {if(count($config) > 0) {$this->_init($config);}} /*** FTP串連** @access public* @param array 配置數組* @return boolean*/public function connect($config = array()) {if(count($config) > 0) {$this->_init($config);}//判斷是否開啟了ftp串連if(FALSE === ($this->conn_id = @ftp_connect($this->hostname,$this->port))) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_connect");}return FALSE;}//判斷是否登入成功if( ! $this->_login()) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_login");}return FALSE;}//判斷是否開啟FTP被動模式if($this->passive === TRUE) {ftp_pasv($this->conn_id, TRUE);} return TRUE;} /*** 目錄改變** @access public* @param string 目錄標識(ftp)* @param boolean * @return boolean*/public function chgdir($path = '', $supress_debug = FALSE) {if($path == '' OR ! $this->_isconn()) {return FALSE;} $result = @ftp_chdir($this->conn_id, $path); if($result === FALSE) {if($this->debug === TRUE AND $supress_debug == FALSE) {$this->_error("ftp_unable_to_chgdir:dir[".$path."]");}return FALSE;} return TRUE;} /*** 目錄產生** @access public* @param string 目錄標識(ftp)* @param int 檔案許可權列表 * @return boolean*/public function mkdir($path = '', $permissions = NULL) {if($path == '' OR ! $this->_isconn()) {return FALSE;} $result = @ftp_mkdir($this->conn_id, $path); if($result === FALSE) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_mkdir:dir[".$path."]");}return FALSE;} if( ! is_null($permissions)) {$this->chmod($path,(int)$permissions);} return TRUE;} /*** 上傳** @access public* @param string 本地目錄標識* @param string 遠程目錄標識(ftp)* @param string 上傳模式 auto || ascii* @param int 上傳後的檔案許可權列表 * @return boolean*/public function upload($localpath, $remotepath, $mode = 'auto', $permissions = NULL) {if( ! $this->_isconn()) {return FALSE;}//判斷本地檔案是否存在if( ! file_exists($localpath)) {if($this->debug === TRUE) {$this->_error("ftp_no_source_file:".$localpath);}return FALSE;}//判斷上傳模式if($mode == 'auto') { //擷取檔案尾碼類型$ext = $this->_getext($localpath); //根據尾碼類型決定上傳模式是 FTP_ASCII(文字模式) 還是 FTP_BINARY(二進位模式);$mode = $this->_settype($ext);} $mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;//上傳$result = @ftp_put($this->conn_id, $remotepath, $localpath, $mode);//判斷上傳是否成功if($result === FALSE) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_upload:localpath[".$localpath."]/remotepath[".$remotepath."]");}return FALSE;}//判斷是否需要改寫檔案許可權if( ! is_null($permissions)) {$this->chmod($remotepath,(int)$permissions);} return TRUE;} /*** 下載** @access public* @param string 遠程目錄標識(ftp)* @param string 本地目錄標識* @param string 下載模式 auto || ascii * @return boolean*/public function download($remotepath, $localpath, $mode = 'auto') {if( ! $this->_isconn()) {return FALSE;} if($mode == 'auto') {$ext = $this->_getext($remotepath);$mode = $this->_settype($ext);} $mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY; $result = @ftp_get($this->conn_id, $localpath, $remotepath, $mode); if($result === FALSE) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_download:localpath[".$localpath."]-remotepath[".$remotepath."]");}return FALSE;} return TRUE;} /*** 重新命名/移動** @access public* @param string 遠程目錄標識(ftp)* @param string 新目錄標識* @param boolean 判斷是重新命名(FALSE)還是移動(TRUE) * @return boolean*/public function rename($oldname, $newname, $move = FALSE) {if( ! $this->_isconn()) {return FALSE;} $result = @ftp_rename($this->conn_id, $oldname, $newname); if($result === FALSE) {if($this->debug === TRUE) {$msg = ($move == FALSE) ? "ftp_unable_to_rename" : "ftp_unable_to_move";$this->_error($msg);}return FALSE;} return TRUE;} /*** 刪除檔案** @access public* @param string 檔案標識(ftp)* @return boolean*/public function delete_file($file) {if( ! $this->_isconn()) {return FALSE;} $result = @ftp_delete($this->conn_id, $file); if($result === FALSE) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_delete_file:file[".$file."]");}return FALSE;} return TRUE;} /*** 刪除檔案夾** @access public* @param string 目錄標識(ftp)* @return boolean*/public function delete_dir($path) {if( ! $this->_isconn()) {return FALSE;} //對目錄宏的'/'字元添加反斜線'\'$path = preg_replace("/(.+?)\/*$/", "\\1/", $path); //擷取目錄檔案清單$filelist = $this->filelist($path); if($filelist !== FALSE AND count($filelist) > 0) {foreach($filelist as $item) {//如果我們無法刪除,那麼就可能是一個檔案夾//所以我們遞迴調用delete_dir()if( ! @delete_file($item)) {$this->delete_dir($item);}}} //刪除檔案夾(空檔案夾)$result = @ftp_rmdir($this->conn_id, $path); if($result === FALSE) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_delete_dir:dir[".$path."]");}return FALSE;} return TRUE;} /*** 修改檔案許可權** @access public* @param string 目錄標識(ftp)* @return boolean*/public function chmod($path, $perm) {if( ! $this->_isconn()) {return FALSE;} //只有在PHP5中才定義了修改許可權的函數(ftp)if( ! function_exists('ftp_chmod')) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_chmod(function)");}return FALSE;} $result = @ftp_chmod($this->conn_id, $perm, $path); if($result === FALSE) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_chmod:path[".$path."]-chmod[".$perm."]");}return FALSE;}return TRUE;} /*** 擷取目錄檔案清單** @access public* @param string 目錄標識(ftp)* @return array*/public function filelist($path = '.') {if( ! $this->_isconn()) {return FALSE;} return ftp_nlist($this->conn_id, $path);} /*** 關閉FTP** @access public* @return boolean*/public function close() {if( ! $this->_isconn()) {return FALSE;} return @ftp_close($this->conn_id);} /*** FTP成員變數初始化** @access private* @param array 配置數組 * @return void*/private function _init($config = array()) {foreach($config as $key => $val) {if(isset($this->$key)) {$this->$key = $val;}} //特殊字元過濾$this->hostname = preg_replace('|.+?://|','',$this->hostname);} /*** FTP登陸** @access private* @return boolean*/private function _login() {return @ftp_login($this->conn_id, $this->username, $this->password);} /*** 判斷con_id** @access private* @return boolean*/private function _isconn() {if( ! is_resource($this->conn_id)) {if($this->debug === TRUE) {$this->_error("ftp_no_connection");}return FALSE;}return TRUE;} /*** 從檔案名稱中擷取尾碼擴充** @access private* @param string 目錄標識* @return string*/private function _getext($filename) {if(FALSE === strpos($filename, '.')) {return 'txt';} $extarr = explode('.', $filename);return end($extarr);} /*** 從尾碼擴充定義FTP傳輸模式 ascii 或 binary** @access private* @param string 尾碼擴充* @return string*/private function _settype($ext) {$text_type = array ('txt','text','php','phps','php4','js','css','htm','html','phtml','shtml','log','xml'); return (in_array($ext, $text_type)) ? 'ascii' : 'binary';} /*** 錯誤記錄檔記錄** @access prvate* @return boolean*/private function _error($msg) {return @file_put_contents('ftp_err.log', "date[".date("Y-m-d H:i:s")."]-hostname[".$this->hostname."]-username[".$this->username."]-password[".$this->password."]-msg[".$msg."]\n", FILE_APPEND);}} /*End of file ftp.php*//*Location /Apache Group/htdocs/ftp.php*/
檔案2:ftp_demo.php
<?phprequire_once('ftp.php'); $config = array('hostname' => '101.64.183.92', //伺服器位址'username' => 'ftpadminuser', //FTP登入帳號'password' => 'admin_user', //FTP登入密碼'port' => 2112 //連接埠號碼); $ftp = new Ftp();//串連$ftp->connect($config);//上傳第一個參數是本地檔案名稱,第二個參數是FTP檔案名稱$rs=$ftp->upload('jsyh.flv','jsyh.flv');if($rs){ echo 1;}// $ftp->download('ftp_upload.log','ftp_download.log');
以上就是小編為大家帶來的PHP用FTP類上傳檔案視頻等的簡單實現方法的全部內容了,希望對大家有所協助,多多支援topic.alibabacloud.com~