PluginProbe ʕ •ᴥ•ʔ
UpdraftPlus: WP Backup & Migration Plugin / 1.11.26
UpdraftPlus: WP Backup & Migration Plugin v1.11.26
1.26.4 1.26.3 1.9.19 1.9.25 1.9.26 1.9.30 1.9.31 1.9.32 1.9.4 1.9.40 1.9.41 1.9.42 1.9.43 1.9.44 1.9.45 1.9.46 1.9.5 1.9.50 1.9.51 1.9.60 1.9.62 1.9.63 1.9.64 1.11.12 1.4.8 1.11.15 1.4.9 1.11.17 1.5.16 1.11.18 1.5.20 1.11.2 1.5.21 1.11.20 1.5.22 1.11.23 1.5.5 1.11.24 1.5.6 1.11.25 1.5.7 1.11.26 1.5.8 1.11.27 1.5.9 1.11.28 1.6.1 1.11.3 1.6.17 1.11.4 1.6.2 1.11.5 1.6.46 1.11.8 1.7.0 1.11.9 1.7.1 1.12.0 1.7.18 1.12.1 1.7.20 1.12.12 1.7.3 1.12.13 1.7.34 1.12.15 1.7.35 1.12.17 1.7.39 1.12.2 1.7.40 1.12.20 1.7.41 1.12.23 1.8.1 1.12.24 1.8.11 1.12.25 1.8.12 1.12.28 1.8.13 1.12.29 1.8.2 1.12.30 1.8.5 1.12.32 1.8.8 1.12.34 1.9.0 1.12.35 1.9.13 1.12.37 1.9.15 1.12.39 1.9.17 1.12.4 1.12.40 1.12.6 1.13.1 1.13.11 1.13.12 1.13.15 1.13.16 1.13.2 1.13.3 1.13.4 1.13.5 1.13.6 1.13.7 1.13.8 1.13.9 1.14.10 1.14.11 1.14.12 1.14.13 1.14.2 1.14.3 1.14.4 1.14.5 1.14.7 1.14.9 1.15.0 1.15.2 1.15.3 1.15.5 1.15.6 1.15.7 1.16.0 1.16.10 1.16.11 1.16.12 1.16.13 1.16.14 1.16.15 1.16.16 1.16.17 1.16.20 1.16.21 1.16.22 1.16.23 1.16.24 1.16.25 1.16.26 1.16.28 1.16.29 1.16.32 1.16.34 1.16.35 1.16.36 1.16.37 1.16.4 1.16.40 1.16.41 1.16.42 1.16.43 1.16.44 1.16.45 1.16.46 1.16.47 1.16.48 1.16.49 1.16.5 1.16.50 1.16.51 1.16.53 1.16.55 1.16.56 1.16.59 1.16.6 1.16.60 1.16.61 1.16.62 1.16.63 1.16.64 1.16.65 1.16.66 1.16.67 1.16.68 1.16.69 1.16.7 1.16.8 1.16.9 1.2.0 1.2.1 1.2.10 1.2.11 1.2.12 1.2.14 1.2.15 1.2.16 1.2.17 1.2.19 1.2.2 1.2.20 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.33 1.2.35 1.2.36 1.2.38 1.2.39 1.2.4 1.2.40 1.2.41 1.2.42 1.2.43 1.2.44 1.2.45 1.2.46 1.2.5 1.2.7 1.2.8 1.2.9 1.22.1 1.22.10 1.22.11 1.22.12 1.22.14 1.22.15 1.22.16 1.22.17 1.22.18 1.22.19 1.22.20 1.22.21 1.22.22 1.22.23 1.22.24 1.22.3 1.22.4 1.22.5 1.22.6 1.22.7 1.22.8 1.22.9 1.23.1 1.23.10 1.23.11 1.23.12 1.23.13 1.23.15 1.23.16 1.23.2 1.23.3 1.23.4 1.23.5 1.23.6 1.23.7 1.23.8 1.23.9 1.24.1 1.24.10 1.24.11 1.24.12 1.24.2 trunk 1.24.3 0.7.4 1.24.4 0.7.7 1.24.5 0.8.28 1.24.6 0.8.29 1.24.7 0.8.30 1.24.8 0.8.31 1.24.9 0.8.32 1.25.1 0.8.33 1.25.2 0.8.36 1.25.3 0.8.37 1.25.5 0.8.50 1.25.6 0.8.51 1.25.7 0.9.1 1.25.8 0.9.10 1.25.9 0.9.11 1.26.1 0.9.12 1.26.2 0.9.2 1.3.10 0.9.20 1.3.12 0.9.21 1.3.14 0.9.22 1.3.15 1.0.10 1.3.17 1.0.11 1.3.18 1.0.12 1.3.19 1.0.15 1.3.2 1.0.16 1.3.20 1.0.18 1.3.22 1.0.20 1.3.23 1.0.3 1.3.24 1.0.4 1.3.25 1.0.5 1.3.3 1.0.6 1.3.4 1.0.7 1.3.6 1.0.8 1.3.7 1.0.9 1.3.8 1.1.0 1.3.9 1.1.10 1.4.0 1.1.11 1.4.10 1.1.12 1.4.11 1.1.13 1.4.12 1.1.14 1.4.13 1.1.15 1.4.14 1.1.16 1.4.15 1.1.17 1.4.2 1.1.2 1.4.27 1.1.3 1.4.28 1.1.5 1.4.29 1.1.6 1.4.30 1.1.8 1.4.4 1.1.9 1.4.48 1.10.1 1.4.5 1.10.3 1.4.6 1.11.1 1.4.7
updraftplus / includes / ftp.class.php
updraftplus / includes Last commit date
Dropbox 10 years ago Google 10 years ago cloudfiles 12 years ago images 10 years ago labelauty 10 years ago phpseclib 10 years ago selectric 10 years ago S3.php 10 years ago S3compat.php 10 years ago cacert.pem 10 years ago class-partialfileservlet.php 10 years ago class-semaphore.php 12 years ago ftp.class.php 10 years ago get-cpanel-quota-usage.pl 12 years ago google-extensions.php 10 years ago jquery-ui.custom.css 10 years ago jquery.blockUI.js 10 years ago updraft-admin-ui.js 10 years ago
ftp.class.php
227 lines
1 <?php
2
3 if (!defined('UPDRAFTPLUS_DIR')) die('No direct access allowed.');
4
5 /* Adapted from http://www.solutionbot.com/2009/01/02/php-ftp-class/ */
6 class UpdraftPlus_ftp_wrapper {
7 private $conn_id;
8 private $host;
9 private $username;
10 private $password;
11 private $port;
12 public $timeout = 60;
13 public $passive = true;
14 public $system_type = '';
15 public $ssl = false;
16 public $use_server_certs = false;
17 public $disable_verify = true;
18 public $login_type = 'non-encrypted';
19
20 public function __construct($host, $username, $password, $port = 21) {
21 $this->host = $host;
22 $this->username = $username;
23 $this->password = $password;
24 $this->port = $port;
25 }
26
27 public function connect() {
28
29 $time_start = time();
30 $this->conn_id = ftp_connect($this->host, $this->port, 20);
31
32 if ($this->conn_id) $result = ftp_login($this->conn_id, $this->username, $this->password);
33
34 if (!empty($result)) {
35 ftp_set_option($this->conn_id, FTP_TIMEOUT_SEC, $this->timeout);
36 ftp_pasv($this->conn_id, $this->passive);
37 $this->system_type = ftp_systype($this->conn_id);
38 return true;
39 }
40
41 if (time() - $time_start > 19) {
42 global $updraftplus_admin;
43 if (isset($updraftplus_admin->logged) && is_array($updraftplus_admin->logged)) {
44 $updraftplus_admin->logged[] = sprintf(__('The %s connection timed out; if you entered the server correctly, then this is usually caused by a firewall blocking the connection - you should check with your web hosting company.', 'updraftplus'), 'FTP');
45 } else {
46 global $updraftplus;
47 $updraftplus->log(sprintf(__('The %s connection timed out; if you entered the server correctly, then this is usually caused by a firewall blocking the connection - you should check with your web hosting company.', 'updraftplus'), 'FTP'), 'error');
48 }
49 }
50
51 return false;
52 }
53
54 public function put($local_file_path, $remote_file_path, $mode = FTP_BINARY, $resume = false, $updraftplus = false) {
55
56 $file_size = filesize($local_file_path);
57
58 $existing_size = 0;
59 if ($resume) {
60 $existing_size = ftp_size($this->conn_id, $remote_file_path);
61 if ($existing_size <=0) {
62 $resume = false; $existing_size = 0;
63 } else {
64 if (is_a($updraftplus, 'UpdraftPlus')) $updraftplus->log("File already exists at remote site: size $existing_size. Will attempt resumption.");
65 if ($existing_size >= $file_size) {
66 if (is_a($updraftplus, 'UpdraftPlus')) $updraftplus->log("File is apparently already completely uploaded");
67 return true;
68 }
69 }
70 }
71
72 // From here on, $file_size is only used for logging calculations. We want to avoid divsion by zero.
73 $file_size = max($file_size, 1);
74
75 if (!$fh = fopen($local_file_path, 'rb')) return false;
76 if ($existing_size) fseek($fh, $existing_size);
77
78 $ret = ftp_nb_fput($this->conn_id, $remote_file_path, $fh, FTP_BINARY, $existing_size);
79
80 // $existing_size can now be re-purposed
81
82 while ($ret == FTP_MOREDATA) {
83 if (is_a($updraftplus, 'UpdraftPlus')) {
84 $new_size = ftell($fh);
85 if ($new_size - $existing_size > 524288) {
86 $existing_size = $new_size;
87 $percent = round(100*$new_size/$file_size,1);
88 $updraftplus->record_uploaded_chunk($percent, '', $local_file_path);
89 }
90 }
91 // Continue upload
92 $ret = ftp_nb_continue($this->conn_id);
93 }
94
95 fclose($fh);
96
97 if ($ret != FTP_FINISHED) {
98 if (is_a($updraftplus, 'UpdraftPlus')) $updraftplus->log("FTP upload: error ($ret)");
99 return false;
100 }
101
102 return true;
103
104 }
105
106 public function get($local_file_path, $remote_file_path, $mode = FTP_BINARY, $resume = false, $updraftplus = false) {
107
108 $file_last_size = 0;
109
110 if ($resume) {
111 if (!$fh = fopen($local_file_path, 'ab')) return false;
112 clearstatcache($local_file_path);
113 $file_last_size = filesize($local_file_path);
114 } else {
115 if (!$fh = fopen($local_file_path, 'wb')) return false;
116 }
117
118 $ret = ftp_nb_fget($this->conn_id, $fh, $remote_file_path, $mode, $file_last_size);
119
120 if (false == $ret) return false;
121
122 while ($ret == FTP_MOREDATA) {
123
124 if ($updraftplus) {
125 $file_now_size = filesize($local_file_path);
126 if ($file_now_size - $file_last_size > 524288) {
127 $updraftplus->log("FTP fetch: file size is now: ".sprintf("%0.2f",filesize($local_file_path)/1048576)." Mb");
128 $file_last_size = $file_now_size;
129 }
130 clearstatcache($local_file_path);
131 }
132
133 $ret = ftp_nb_continue($this->conn_id);
134 }
135
136 fclose($fh);
137
138 if ($ret == FTP_FINISHED) {
139 if ($updraftplus) $updraftplus->log("FTP fetch: fetch complete");
140 return true;
141 } else {
142 if ($updraftplus) $updraftplus->log("FTP fetch: fetch failed");
143 return false;
144 }
145
146 }
147
148 public function chmod($permissions, $remote_filename) {
149 if ($this->is_octal($permissions)) {
150 $result = ftp_chmod($this->conn_id, $permissions, $remote_filename);
151 if ($result) {
152 return true;
153 } else {
154 return false;
155 }
156 } else {
157 throw new Exception('$permissions must be an octal number');
158 }
159 }
160
161 public function chdir($directory) {
162 ftp_chdir($this->conn_id, $directory);
163 }
164
165 public function delete($remote_file_path) {
166 if (ftp_delete($this->conn_id, $remote_file_path)) {
167 return true;
168 } else {
169 return false;
170 }
171 }
172
173 public function make_dir($directory) {
174 if (ftp_mkdir($this->conn_id, $directory)) {
175 return true;
176 } else {
177 return false;
178 }
179 }
180
181 public function rename($old_name, $new_name) {
182 if (ftp_rename($this->conn_id, $old_name, $new_name))
183 {
184 return true;
185 }
186 else
187 {
188 return false;
189 }
190 }
191
192 public function remove_dir($directory) {
193 if (ftp_rmdir($this->conn_id, $directory))
194 {
195 return true;
196 }
197 else
198 {
199 return false;
200 }
201 }
202
203 public function dir_list($directory) {
204 return ftp_nlist($this->conn_id, $directory);
205 }
206
207 public function cdup() {
208 ftp_cdup($this->conn_id);
209 }
210
211 public function size($f) {
212 return ftp_size($this->conn_id, $f);
213 }
214
215 public function current_dir() {
216 return ftp_pwd($this->conn_id);
217 }
218
219 private function is_octal($i) {
220 return decoct(octdec($i)) == $i;
221 }
222
223 public function __destruct() {
224 if ($this->conn_id) ftp_close($this->conn_id);
225 }
226 }
227 ?>