仓酷云

标题: PHP教程之PHP近程附件上传 [打印本页]

作者: 只想知道    时间: 2015-2-3 23:30
标题: PHP教程之PHP近程附件上传
理解动态语言的概念,运做机制,熟悉PHP语法     
  明天对ShuipFCMS法式增添了近程附件的功效。是使用FTP完成,上面贴出一个PHPCMS V9外面的一个FTP处置类,大致讲讲怎样完成近程附件的完成。
  FTP类源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 class Ftp {              //FTP 毗连资本     private $link;     //FTP毗连工夫     public $link_time;     //毛病代码     private $err_code = 0;     //传送形式{文本形式:FTP_ASCII, 二进制形式:FTP_BINARY}     public $mode = FTP_BINARY;              /**      * 毗连FTP办事器      * @param string $host       办事器地址      * @param string $username   用户名      * @param string $password   暗码      * @param integer $port       办事器端口,默许值为21      * @param boolean $pasv        是不是开启主动形式      * @param boolean $ssl      是不是利用SSL毗连      * @param integer $timeout     超不时间       */     public function connect($host, $username = '', $password = '', $port = '21', $pasv = false, $ssl = false, $timeout = 30) {         $start = time();         if ($ssl) {             if (!$this->link = @ftp_ssl_connect($host, $port, $timeout)) {                 $this->err_code = 1;                 return false;             }         } else {             if (!$this->link = @ftp_connect($host, $port, $timeout)) {                 $this->err_code = 1;                 return false;             }         }                  if (@ftp_login($this->link, $username, $password)) {             if ($pasv)                 ftp_pasv($this->link, true);             $this->link_time = time() - $start;             return true;         } else {             $this->err_code = 1;             return false;         }         register_shutdown_function(array(&$this, 'close'));     }              /**      * 创立文件夹      * @param string $dirname 目次名,      */     public function mkdir($dirname) {         if (!$this->link) {             $this->err_code = 2;             return false;         }         $dirname = $this->ck_dirname($dirname);         $nowdir = '/';         foreach ($dirname as $v) {             if ($v && !$this->chdir($nowdir . $v)) {                 if ($nowdir)                     $this->chdir($nowdir);                 @ftp_mkdir($this->link, $v);             }             if ($v)                 $nowdir .= $v . '/';         }         return true;     }              /**      * 上传文件      * @param string $remote 近程寄存地址      * @param string $local 当地寄存地址      */     public function put($remote, $local) {         if (!$this->link) {             $this->err_code = 2;             return false;         }         $dirname = pathinfo($remote, PATHINFO_DIRNAME);         if (!$this->chdir($dirname)) {             $this->mkdir($dirname);         }         if (@ftp_put($this->link, $remote, $local, $this->mode)) {             return true;         } else {             $this->err_code = 7;             return false;         }     }              /**      * 删除文件夹      * @param string $dirname  目次地址      * @param boolean $enforce 强迫删除      */     public function rmdir($dirname, $enforce = false) {         if (!$this->link) {             $this->err_code = 2;             return false;         }         $list = $this->nlist($dirname);         if ($list && $enforce) {             $this->chdir($dirname);             foreach ($list as $v) {                 $this->f_delete($v);             }         } elseif ($list && !$enforce) {             $this->err_code = 3;             return false;         }         @ftp_rmdir($this->link, $dirname);         return true;     }              /**      * 删除指定文件      * @param string $filename 文件名      */     public function f_delete($filename) {         if (!$this->link) {             $this->err_code = 2;             return false;         }         if (@ftp_delete($this->link, $filename)) {             return true;         } else {             $this->err_code = 4;             return false;         }     }              /**      * 前往给定目次的文件列表      * @param string $dirname  目次地址      * @return array 文件列表数据      */     public function nlist($dirname) {         if (!$this->link) {             $this->err_code = 2;             return false;         }         if ($list = @ftp_nlist($this->link, $dirname)) {             return $list;         } else {             $this->err_code = 5;             return false;         }     }              /**      * 在 FTP 办事器上改动以后目次      * @param string $dirname 修正办事器受骗前目次      */     public function chdir($dirname) {         if (!$this->link) {             $this->err_code = 2;             return false;         }         if (@ftp_chdir($this->link, $dirname)) {             return true;         } else {             $this->err_code = 6;             return false;         }     }              /**      * 获得毛病信息      */     public function get_error() {         if (!$this->err_code)             return false;         $err_msg = array(             '1' => 'Server can not connect',             '2' => 'Not connect to server',             '3' => 'Can not delete non-empty folder',             '4' => 'Can not delete file',             '5' => 'Can not get file list',             '6' => 'Can not change the current directory on the server',             '7' => 'Can not upload files'         );         return $err_msg[$this->err_code];     }              /**      * 检测目次名      * @param string $url 目次      * @return 由 / 分隔的前往数组      */     private function ck_dirname($url) {         $url = str_replace('', '/', $url);         $urls = explode('/', $url);         return $urls;     }              /**      * 封闭FTP毗连      */     public function close() {         return @ftp_close($this->link);     }          }   
  先来讲说近程附件上传的大致流程:
     用户选择文件上传提交到办事器->办事器吸收到文件->办事器一些平安检测完成经由过程FTP功效上传到响应FTP办事器。
  我说的只是一个也许进程,不是很尺度,分明个意思便可啦!~
  这个类大导致用办法:
    起首经由过程 $ftps->connect($host,$username,$password,$post,$pasv,$ssl,$timeout);停止FTP办事器毗连。
    经由过程详细的函数停止FTP的操作。
     $ftps->mkdir() 创立目次,可以创立多级目次以“/abc/def/higk”的模式停止多级目次的创立。
     $ftps->put()上传文件
     $ftps->rmdir()删除目次
     $ftps->f_delete()删除文件
     $ftps->nlist()列出指定目次的文件
     $ftps->chdir()变动以后文件夹
     $ftps->get_error()获得毛病信息
学习数据库了,MYSQL可算是PHP的黄金搭档了,不过,虽然话是这么说,你也可能恨不得把MYSQL给生吞活剥了,因为这一行一列的东东简直让自己头晕目眩。
作者: 若天明    时间: 2015-2-3 23:57
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
作者: 乐观    时间: 2015-2-7 16:51
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 只想知道    时间: 2015-2-22 16:14
写的比较杂,因为我也是个新手,不当至于大家多多指正。
作者: 分手快乐    时间: 2015-2-24 03:21
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: admin    时间: 2015-3-11 04:26
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者: 飘灵儿    时间: 2015-3-13 01:08
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 第二个灵魂    时间: 2015-3-13 22:35
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者: 山那边是海    时间: 2015-3-19 02:59
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: 金色的骷髅    时间: 2015-3-27 02:11
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
作者: 海妖    时间: 2015-4-6 17:02
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 老尸    时间: 2015-5-3 21:45
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 若相依    时间: 2015-5-6 08:09
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 谁可相欹    时间: 2015-5-10 00:46
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 兰色精灵    时间: 2015-5-11 15:12
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 因胸联盟    时间: 2015-5-12 03:26
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 莫相离    时间: 2015-5-12 05:46
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者: 活着的死人    时间: 2015-6-3 21:33
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 简单生活    时间: 2015-6-9 22:08
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 精灵巫婆    时间: 2015-6-16 19:58
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2