html5中文学习网

您的位置: 首页 > 网络编程 > PHP编程 » 正文

PHP远程附件上传_PHP教程_编程技术

[ ] 已经帮助:人解决问题

 NQEHTML5中文学习网 - HTML5先行者学习网

今天对ShuipFCMS程序增加了远程附件的功能。是利用FTP实现,下面贴出一个PHPCMS V9里面的一个FTP处理类,大致讲讲怎么实现远程附件的实现。NQEHTML5中文学习网 - HTML5先行者学习网

FTP类源代码:NQEHTML5中文学习网 - HTML5先行者学习网

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);
    }
        
}

 NQEHTML5中文学习网 - HTML5先行者学习网

先来说说远程附件上传的大致流程:NQEHTML5中文学习网 - HTML5先行者学习网

   用户选择文件上传提交到服务器->服务器接收到文件->服务器一些安全检测完成通过FTP功能上传到相应FTP服务器。NQEHTML5中文学习网 - HTML5先行者学习网

我说的只是一个大概过程,不是很标准,明白个意思即可啦!~NQEHTML5中文学习网 - HTML5先行者学习网

这个类大致使用方法:NQEHTML5中文学习网 - HTML5先行者学习网

  首先通过 $ftps->connect($host,$username,$password,$post,$pasv,$ssl,$timeout);进行FTP服务器连接。NQEHTML5中文学习网 - HTML5先行者学习网

  通过具体的函数进行FTP的操作。NQEHTML5中文学习网 - HTML5先行者学习网

   $ftps->mkdir() 创建目录,可以创建多级目录以“/abc/def/higk”的形式进行多级目录的创建。NQEHTML5中文学习网 - HTML5先行者学习网

   $ftps->put()上传文件NQEHTML5中文学习网 - HTML5先行者学习网

   $ftps->rmdir()删除目录NQEHTML5中文学习网 - HTML5先行者学习网

   $ftps->f_delete()删除文件NQEHTML5中文学习网 - HTML5先行者学习网

   $ftps->nlist()列出指定目录的文件NQEHTML5中文学习网 - HTML5先行者学习网

   $ftps->chdir()变更当前文件夹NQEHTML5中文学习网 - HTML5先行者学习网

   $ftps->get_error()获取错误信息NQEHTML5中文学习网 - HTML5先行者学习网

NQEHTML5中文学习网 - HTML5先行者学习网
NQEHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助