PHP用FTP类上传文件视频等的简单实现方法
程序员文章站
2024-02-29 15:43:16
文件1:ftp.php
文件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
<?php require_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类上传文件视频等的简单实现方法的全部内容了,希望对大家有所帮助,多多支持~
下一篇: 删除MySQL数据库的简单教程
推荐阅读
-
PHP用FTP类上传文件视频等的简单实现方法
-
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
-
用php控制ftp上传文件有关问题已经简化成最简单的代码了 为什么还是有异常呢?
-
thinkPHP3.2简单实现文件上传的方法,_PHP教程
-
thinkPHP3.2简单实现文件上传的方法_PHP
-
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
-
用批处理上传文件到ftp目录下的实现方法
-
PHP用FTP类上传文件视频等的简单实现方法
-
PHP简单实现生成txt文件到指定目录的方法 php调用父类的方法 php调用类的方法 php函数和方法的区
-
thinkPHP3.2简单实现文件上传的方法_php实例