| 1 | 30,31c30,31 |
|---|
| 2 | < function __construct($verb=FALSE, $le=FALSE) { |
|---|
| 3 | < parent::__construct(false, $verb, $le); |
|---|
| 4 | --- |
|---|
| 5 | > function __construct( $verb = false, $le = false ) { |
|---|
| 6 | > parent::__construct( false, $verb, $le ); |
|---|
| 7 | 38,40c38,41 |
|---|
| 8 | < function _settimeout($sock) { |
|---|
| 9 | < if(!@stream_set_timeout($sock, $this->_timeout)) { |
|---|
| 10 | < $this->PushError('_settimeout','socket set send timeout'); |
|---|
| 11 | --- |
|---|
| 12 | > function _settimeout( $sock ) { |
|---|
| 13 | > |
|---|
| 14 | > if ( ! @stream_set_timeout( $sock, $this->_timeout ) ) { |
|---|
| 15 | > $this->PushError( '_settimeout','socket set send timeout' ); |
|---|
| 16 | 42c43 |
|---|
| 17 | < return FALSE; |
|---|
| 18 | --- |
|---|
| 19 | > return false; |
|---|
| 20 | 44c45,46 |
|---|
| 21 | < return TRUE; |
|---|
| 22 | --- |
|---|
| 23 | > |
|---|
| 24 | > return true; |
|---|
| 25 | 47,52c49,55 |
|---|
| 26 | < function _connect($host, $port) { |
|---|
| 27 | < $this->SendMSG("Creating socket"); |
|---|
| 28 | < $sock = @fsockopen($host, $port, $errno, $errstr, $this->_timeout); |
|---|
| 29 | < if (!$sock) { |
|---|
| 30 | < $this->PushError('_connect','socket connect failed', $errstr." (".$errno.")"); |
|---|
| 31 | < return FALSE; |
|---|
| 32 | --- |
|---|
| 33 | > function _connect( $host, $port ) { |
|---|
| 34 | > $this->SendMSG( "Creating socket" ); |
|---|
| 35 | > $sock = @fsockopen( $host, $port, $errno, $errstr, $this->_timeout ); |
|---|
| 36 | > |
|---|
| 37 | > if ( ! $sock ) { |
|---|
| 38 | > $this->PushError( '_connect','socket connect failed', $errstr." (".$errno.")" ); |
|---|
| 39 | > return false; |
|---|
| 40 | 54c57,58 |
|---|
| 41 | < $this->_connected=true; |
|---|
| 42 | --- |
|---|
| 43 | > |
|---|
| 44 | > $this->_connected = true; |
|---|
| 45 | 58,66c62,73 |
|---|
| 46 | < function _readmsg($fnction="_readmsg"){ |
|---|
| 47 | < if(!$this->_connected) { |
|---|
| 48 | < $this->PushError($fnction, 'Connect first'); |
|---|
| 49 | < return FALSE; |
|---|
| 50 | < } |
|---|
| 51 | < $result=true; |
|---|
| 52 | < $this->_message=""; |
|---|
| 53 | < $this->_code=0; |
|---|
| 54 | < $go=true; |
|---|
| 55 | --- |
|---|
| 56 | > function _readmsg( $fnction = "_readmsg" ) { |
|---|
| 57 | > |
|---|
| 58 | > if ( ! $this->_connected ) { |
|---|
| 59 | > $this->PushError( $fnction, 'Connect first' ); |
|---|
| 60 | > return false; |
|---|
| 61 | > } |
|---|
| 62 | > |
|---|
| 63 | > $result = true; |
|---|
| 64 | > $this->_message = ""; |
|---|
| 65 | > $this->_code = 0; |
|---|
| 66 | > $go = true; |
|---|
| 67 | > |
|---|
| 68 | 68,71c75,79 |
|---|
| 69 | < $tmp=@fgets($this->_ftp_control_sock, 512); |
|---|
| 70 | < if($tmp===false) { |
|---|
| 71 | < $go=$result=false; |
|---|
| 72 | < $this->PushError($fnction,'Read failed'); |
|---|
| 73 | --- |
|---|
| 74 | > $tmp = @fgets( $this->_ftp_control_sock, 512 ); |
|---|
| 75 | > |
|---|
| 76 | > if ( false === $tmp ) { |
|---|
| 77 | > $go = $result = false; |
|---|
| 78 | > $this->PushError( $fnction, 'Read failed' ); |
|---|
| 79 | 73,74c81,84 |
|---|
| 80 | < $this->_message.=$tmp; |
|---|
| 81 | < if(preg_match("/^([0-9]{3})(-(.*[".CRLF."]{1,2})+\\1)? [^".CRLF."]+[".CRLF."]{1,2}$/", $this->_message, $regs)) $go=false; |
|---|
| 82 | --- |
|---|
| 83 | > $this->_message .= $tmp; |
|---|
| 84 | > if ( preg_match("/^([0-9]{3})(-(.*[" . CRLF . "]{1,2})+\\1)? [^" . CRLF . "]+[" . CRLF . "]{1,2}$/", $this->_message, $regs ) ) { |
|---|
| 85 | > $go = false; |
|---|
| 86 | > } |
|---|
| 87 | 76,78c86,92 |
|---|
| 88 | < } while($go); |
|---|
| 89 | < if($this->LocalEcho) echo "GET < ".rtrim($this->_message, CRLF).CRLF; |
|---|
| 90 | < $this->_code=(int)$regs[1]; |
|---|
| 91 | --- |
|---|
| 92 | > } while ( $go ); |
|---|
| 93 | > |
|---|
| 94 | > if ( $this->LocalEcho ) { |
|---|
| 95 | > echo "GET < " . rtrim( $this->_message, CRLF ) . CRLF; |
|---|
| 96 | > } |
|---|
| 97 | > |
|---|
| 98 | > $this->_code = (int) $regs[1]; |
|---|
| 99 | 82,105c96,129 |
|---|
| 100 | < function _exec($cmd, $fnction="_exec") { |
|---|
| 101 | < if(!$this->_ready) { |
|---|
| 102 | < $this->PushError($fnction,'Connect first'); |
|---|
| 103 | < return FALSE; |
|---|
| 104 | < } |
|---|
| 105 | < if($this->LocalEcho) echo "PUT > ",$cmd,CRLF; |
|---|
| 106 | < $status=@fputs($this->_ftp_control_sock, $cmd.CRLF); |
|---|
| 107 | < if($status===false) { |
|---|
| 108 | < $this->PushError($fnction,'socket write failed'); |
|---|
| 109 | < return FALSE; |
|---|
| 110 | < } |
|---|
| 111 | < $this->_lastaction=time(); |
|---|
| 112 | < if(!$this->_readmsg($fnction)) return FALSE; |
|---|
| 113 | < return TRUE; |
|---|
| 114 | < } |
|---|
| 115 | < |
|---|
| 116 | < function _data_prepare($mode=FTP_ASCII) { |
|---|
| 117 | < if(!$this->_settype($mode)) return FALSE; |
|---|
| 118 | < if($this->_passive) { |
|---|
| 119 | < if(!$this->_exec("PASV", "pasv")) { |
|---|
| 120 | < $this->_data_close(); |
|---|
| 121 | < return FALSE; |
|---|
| 122 | < } |
|---|
| 123 | < if(!$this->_checkCode()) { |
|---|
| 124 | --- |
|---|
| 125 | > function _exec( $cmd, $fnction = "_exec" ) { |
|---|
| 126 | > |
|---|
| 127 | > if ( ! $this->_ready ) { |
|---|
| 128 | > $this->PushError( $fnction, 'Connect first' ); |
|---|
| 129 | > return false; |
|---|
| 130 | > } |
|---|
| 131 | > |
|---|
| 132 | > if ( $this->LocalEcho ) { |
|---|
| 133 | > echo "PUT > ", $cmd, CRLF; |
|---|
| 134 | > } |
|---|
| 135 | > |
|---|
| 136 | > $status = @fputs( $this->_ftp_control_sock, $cmd . CRLF ); |
|---|
| 137 | > |
|---|
| 138 | > if ( false === $status) { |
|---|
| 139 | > $this->PushError( $fnction, 'socket write failed' ); |
|---|
| 140 | > return false; |
|---|
| 141 | > } |
|---|
| 142 | > |
|---|
| 143 | > $this->_lastaction = time(); |
|---|
| 144 | > if ( ! $this->_readmsg( $fnction ) ) { |
|---|
| 145 | > return false; |
|---|
| 146 | > } |
|---|
| 147 | > return true; |
|---|
| 148 | > } |
|---|
| 149 | > |
|---|
| 150 | > function _data_prepare( $mode = FTP_ASCII ) { |
|---|
| 151 | > |
|---|
| 152 | > if ( ! $this->_settype( $mode ) ) { |
|---|
| 153 | > return false; |
|---|
| 154 | > } |
|---|
| 155 | > |
|---|
| 156 | > if ( $this->_passive ) { |
|---|
| 157 | > |
|---|
| 158 | > if ( ! $this->_exec( "PASV", "pasv" ) ) { |
|---|
| 159 | 107c131 |
|---|
| 160 | < return FALSE; |
|---|
| 161 | --- |
|---|
| 162 | > return false; |
|---|
| 163 | 109,115c133,134 |
|---|
| 164 | < $ip_port = explode(",", preg_replace("/^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*$/s", "\\1", $this->_message)); |
|---|
| 165 | < $this->_datahost=$ip_port[0].".".$ip_port[1].".".$ip_port[2].".".$ip_port[3]; |
|---|
| 166 | < $this->_dataport=(((int)$ip_port[4])<<8) + ((int)$ip_port[5]); |
|---|
| 167 | < $this->SendMSG("Connecting to ".$this->_datahost.":".$this->_dataport); |
|---|
| 168 | < $this->_ftp_data_sock=@fsockopen($this->_datahost, $this->_dataport, $errno, $errstr, $this->_timeout); |
|---|
| 169 | < if(!$this->_ftp_data_sock) { |
|---|
| 170 | < $this->PushError("_data_prepare","fsockopen fails", $errstr." (".$errno.")"); |
|---|
| 171 | --- |
|---|
| 172 | > |
|---|
| 173 | > if ( ! $this->_checkCode() ) { |
|---|
| 174 | 117c136 |
|---|
| 175 | < return FALSE; |
|---|
| 176 | --- |
|---|
| 177 | > return false; |
|---|
| 178 | 119c138,151 |
|---|
| 179 | < else $this->_ftp_data_sock; |
|---|
| 180 | --- |
|---|
| 181 | > |
|---|
| 182 | > $ip_port = explode( ",", preg_replace("/^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*$/s", "\\1", $this->_message ) ); |
|---|
| 183 | > $this->_datahost = $ip_port[0] . "." . $ip_port[1] . "." . $ip_port[2] . "." . $ip_port[3]; |
|---|
| 184 | > $this->_dataport = ( ( (int) $ip_port[4] ) << 8 ) + ( (int) $ip_port[5] ); |
|---|
| 185 | > $this->SendMSG( "Connecting to " . $this->_datahost . ":" . $this->_dataport ); |
|---|
| 186 | > $this->_ftp_data_sock = @fsockopen( $this->_datahost, $this->_dataport, $errno, $errstr, $this->_timeout ); |
|---|
| 187 | > |
|---|
| 188 | > if ( ! $this->_ftp_data_sock ) { |
|---|
| 189 | > $this->push_error( '_data_prepare', 'fsockopen fails', $errstr . ' ( ' . $errno . ' )' ); |
|---|
| 190 | > $this->_data_close(); |
|---|
| 191 | > return false; |
|---|
| 192 | > } |
|---|
| 193 | > |
|---|
| 194 | > return $this->_ftp_data_sock; |
|---|
| 195 | 121,122c153,154 |
|---|
| 196 | < $this->SendMSG("Only passive connections available!"); |
|---|
| 197 | < return FALSE; |
|---|
| 198 | --- |
|---|
| 199 | > $this->SendMSG( "Only passive connections available!" ); |
|---|
| 200 | > return false; |
|---|
| 201 | 124c156,157 |
|---|
| 202 | < return TRUE; |
|---|
| 203 | --- |
|---|
| 204 | > |
|---|
| 205 | > return true; |
|---|
| 206 | 127,138c160,182 |
|---|
| 207 | < function _data_read($mode=FTP_ASCII, $fp=NULL) { |
|---|
| 208 | < if(is_resource($fp)) $out=0; |
|---|
| 209 | < else $out=""; |
|---|
| 210 | < if(!$this->_passive) { |
|---|
| 211 | < $this->SendMSG("Only passive connections available!"); |
|---|
| 212 | < return FALSE; |
|---|
| 213 | < } |
|---|
| 214 | < while (!feof($this->_ftp_data_sock)) { |
|---|
| 215 | < $block=fread($this->_ftp_data_sock, $this->_ftp_buff_size); |
|---|
| 216 | < if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_local], $block); |
|---|
| 217 | < if(is_resource($fp)) $out+=fwrite($fp, $block, strlen($block)); |
|---|
| 218 | < else $out.=$block; |
|---|
| 219 | --- |
|---|
| 220 | > function _data_read( $mode = FTP_ASCII, $fp = NULL ) { |
|---|
| 221 | > $out = ""; |
|---|
| 222 | > if ( is_resource( $fp ) ) { |
|---|
| 223 | > $out = 0; |
|---|
| 224 | > } |
|---|
| 225 | > |
|---|
| 226 | > if ( ! $this->_passive ) { |
|---|
| 227 | > $this->SendMSG( "Only passive connections available!" ); |
|---|
| 228 | > return false; |
|---|
| 229 | > } |
|---|
| 230 | > |
|---|
| 231 | > while ( ! feof( $this->_ftp_data_sock ) ) { |
|---|
| 232 | > $block = fread( $this->_ftp_data_sock, $this->_ftp_buff_size ); |
|---|
| 233 | > |
|---|
| 234 | > if ( $mode != FTP_BINARY ) { |
|---|
| 235 | > $block = preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_local], $block ); |
|---|
| 236 | > } |
|---|
| 237 | > |
|---|
| 238 | > if( is_resource( $fp ) ) { |
|---|
| 239 | > $out += fwrite( $fp, $block, strlen( $block ) ); |
|---|
| 240 | > } else { |
|---|
| 241 | > $out .= $block; |
|---|
| 242 | > } |
|---|
| 243 | 139a184 |
|---|
| 244 | > |
|---|
| 245 | 143,153c188,206 |
|---|
| 246 | < function _data_write($mode=FTP_ASCII, $fp=NULL) { |
|---|
| 247 | < if(is_resource($fp)) $out=0; |
|---|
| 248 | < else $out=""; |
|---|
| 249 | < if(!$this->_passive) { |
|---|
| 250 | < $this->SendMSG("Only passive connections available!"); |
|---|
| 251 | < return FALSE; |
|---|
| 252 | < } |
|---|
| 253 | < if(is_resource($fp)) { |
|---|
| 254 | < while(!feof($fp)) { |
|---|
| 255 | < $block=fread($fp, $this->_ftp_buff_size); |
|---|
| 256 | < if(!$this->_data_write_block($mode, $block)) return false; |
|---|
| 257 | --- |
|---|
| 258 | > function _data_write( $mode = FTP_ASCII, $fp=NULL ) { |
|---|
| 259 | > $out = ""; |
|---|
| 260 | > if ( is_resource( $fp ) ) { |
|---|
| 261 | > $out = 0; |
|---|
| 262 | > } |
|---|
| 263 | > |
|---|
| 264 | > if ( ! $this->_passive ) { |
|---|
| 265 | > $this->SendMSG( "Only passive connections available!" ); |
|---|
| 266 | > return false; |
|---|
| 267 | > } |
|---|
| 268 | > |
|---|
| 269 | > if ( is_resource( $fp ) ) { |
|---|
| 270 | > |
|---|
| 271 | > while ( ! feof( $fp ) ) { |
|---|
| 272 | > $block = fread( $fp, $this->_ftp_buff_size ); |
|---|
| 273 | > |
|---|
| 274 | > if( ! $this->_data_write_block( $mode, $block ) ) { |
|---|
| 275 | > return false; |
|---|
| 276 | > } |
|---|
| 277 | 155,156c208,212 |
|---|
| 278 | < } elseif(!$this->_data_write_block($mode, $fp)) return false; |
|---|
| 279 | < return TRUE; |
|---|
| 280 | --- |
|---|
| 281 | > } elseif ( ! $this->_data_write_block( $mode, $fp ) ) { |
|---|
| 282 | > return false; |
|---|
| 283 | > } |
|---|
| 284 | > |
|---|
| 285 | > return true; |
|---|
| 286 | 159,160c215,220 |
|---|
| 287 | < function _data_write_block($mode, $block) { |
|---|
| 288 | < if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_remote], $block); |
|---|
| 289 | --- |
|---|
| 290 | > function _data_write_block( $mode, $block ) { |
|---|
| 291 | > |
|---|
| 292 | > if ( $mode != FTP_BINARY) { |
|---|
| 293 | > $block = preg_replace( "/\r\n|\r|\n/", $this->_eol_code[$this->OS_remote], $block ); |
|---|
| 294 | > } |
|---|
| 295 | > |
|---|
| 296 | 162,164c222,225 |
|---|
| 297 | < if(($t=@fwrite($this->_ftp_data_sock, $block))===FALSE) { |
|---|
| 298 | < $this->PushError("_data_write","Can't write to socket"); |
|---|
| 299 | < return FALSE; |
|---|
| 300 | --- |
|---|
| 301 | > $t = @fwrite( $this->_ftp_data_sock, $block ); |
|---|
| 302 | > if ( false === $t ) { |
|---|
| 303 | > $this->push_error( '_data_write', "Can't write to socket" ); |
|---|
| 304 | > return false; |
|---|
| 305 | 166,167c227,229 |
|---|
| 306 | < $block=substr($block, $t); |
|---|
| 307 | < } while(!empty($block)); |
|---|
| 308 | --- |
|---|
| 309 | > $block = substr( $block, $t ); |
|---|
| 310 | > } while ( ! empty( $block ) ); |
|---|
| 311 | > |
|---|
| 312 | 172,174c234,236 |
|---|
| 313 | < @fclose($this->_ftp_data_sock); |
|---|
| 314 | < $this->SendMSG("Disconnected data from remote host"); |
|---|
| 315 | < return TRUE; |
|---|
| 316 | --- |
|---|
| 317 | > @fclose( $this->_ftp_data_sock ); |
|---|
| 318 | > $this->SendMSG( "Disconnected data from remote host" ); |
|---|
| 319 | > return true; |
|---|
| 320 | 177,181c239,244 |
|---|
| 321 | < function _quit($force=FALSE) { |
|---|
| 322 | < if($this->_connected or $force) { |
|---|
| 323 | < @fclose($this->_ftp_control_sock); |
|---|
| 324 | < $this->_connected=false; |
|---|
| 325 | < $this->SendMSG("Socket closed"); |
|---|
| 326 | --- |
|---|
| 327 | > function _quit( $force = false ) { |
|---|
| 328 | > |
|---|
| 329 | > if ( $this->_connected || $force ) { |
|---|
| 330 | > @fclose( $this->_ftp_control_sock ); |
|---|
| 331 | > $this->_connected = false; |
|---|
| 332 | > $this->SendMSG( "Socket closed" ); |
|---|