php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)

时间:2021-09-12 04:55:41

php使用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
<?php
  /**
   * ftp上传文件
   */
  class Ftp {
 
    /**
     * 测试服务器
     *
     * @var array
     */
    private $testServer = array(
      'host' => 'ip',
      'port' => 21,
      'user' => 'userName',
      'pwd' => 'password'
    );
 
    /**
     * 打开并登录服务器
     *
     * @param string $flag 服务器标识test
     * @return mixed
     *       0:服务器连接失败
     *       1:服务器登录失败
     *       resource 连接标识
     */
    public function openServer($flag = 'test'){
      //选择服务器
      $config = $this->getServerConfig($flag);
 
      //连接服务器
      $connect = ftp_connect($config['host'], $config['port']);
      if($connect == false) return 0;
 
      //登录服务器
      if(!ftp_login($connect, $config['user'], $config['pwd'])) return 1;
 
      //打开被动模式,数据的传送由客户机启动,而不是由服务器开始
      ftp_pasv($connect, true);
 
      //返回连接标识
      return $connect;
    }
 
    /**
     * 创建目录并将目录定位到当请目录
     *
     * @param resource $connect 连接标识
     * @param string $dirPath 目录路径
     * @return mixed
     *       2:创建目录失败
     *       true:创建目录成功
     */
    public function makeDir($connect, $dirPath){
      //处理目录
      $dirPath = '/' . trim($dirPath, '/');
      $dirPath = explode('/', $dirPath);
      foreach ($dirPath as $dir){
        if($dir == '') $dir = '/';
        //判断目录是否存在
        if(@ftp_chdir($connect, $dir) == false){
          //判断目录是否创建成功
          if(@ftp_mkDir($connect, $dir) == false){
            return 2;
          }
          @ftp_chdir($connect, $dir);
        }
      }
      return true;
    }
 
    /**
     * 关闭服务器
     *
     * @param resource $connect 连接标识
     */
    public function closeServer($connect){
      if(!empty($connect)) ftp_close($connect);
    }
 
    /**
     * 上传文件
     *
     * @param string $flag 服务器标识
     * @param string $local 上传文件的本地路径
     * @param string $remote 上传文件的远程路径
     * @return int
     *       0:服务器连接失败
     *       1:服务器登录失败
     *       2:创建目录失败
     *       3:上传文件失败
     *       4:上传成功
     */
    public function upload($flag = 'test', $local, $remote){
      //连接并登录服务器
      $connect = $this->openServer($flag);
      if(($connect === 0) || ($connect === 1)) return $connect;
 
      //上传文件目录处理
      $mdr = $this->makeDir($connect, dirname($remote));
      if($mdr === 2) return 2;
 
      //上传文件
      $result = ftp_put($connect, basename($remote), $local, FTP_BINARY);
 
      //关闭服务器
      $this->closeServer($connect);
 
      //返回结果
      return (!$result) ? 3 : 4;
    }
 
    /**
     * 删除文件
     *
     * @param string $flag 服务器标识
     * @param string $remote 文件的远程路径
     * @return int
     *       0:服务器连接失败
     *       1:服务器登录失败
     *       2:删除失败
     *       3:删除成功
     */
    public function delete($flag = 'test', $remote){
      //连接并登录服务器
      $connect = $this->openServer($flag);
      if(($connect === 0) || ($connect === 1)) return $connect;
 
      //删除
      $result = ftp_delete($connect, $remote);
 
      //关闭服务器
      $this->closeServer($connect);
 
      //返回结果
      return (!$result) ? 2 : 3;
    }
 
    /**
     * 读取文件
     *
     * @param string $flag 服务器标识
     * @param string $remote 文件的远程路径
     * @return mixed
     *       0:服务器连接失败
     *       1:服务器登录失败
     */
    public function read($flag, $remote){
      //连接并登录服务器
      $connect = $this->openServer($flag);
      if(($connect === 0) || ($connect === 1)) return $connect;
 
      //读取
      $result = ftp_nlist($connect, $remote);
 
      //关闭服务器
      $this->closeServer($connect);
 
      //返回结果
      foreach ($result as $key => $value){
        if(in_array($value, array('.', '..'))) unset($result[$key]);
      }
      return array_values($result);
    }
 
    /**
     * 获取ftp服务器配置
     *
     * @param string $flag 服务器标识test
     * @return array ftp服务器连接配置
     */
    private function getServerConfig($flag = 'test'){
      $flag = strtolower($flag);
      //测试服务器
      if($flag == 'test') return $this->testServer;
      //默认返回测试服务器
      return $this->testServer;
    }
  }
  ?>

以上就是小编为大家带来的php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)的全部内容了,希望对大家有所帮助,多多支持服务器之家~