|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
理解动态语言的概念,运做机制,熟悉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给生吞活剥了,因为这一行一列的东东简直让自己头晕目眩。 |
|