diff --git a/wp-admin/includes/class-ftp.php b/wp-admin/includes/class-ftp.php
index 5240816144..cd1c584783 100644
--- a/wp-admin/includes/class-ftp.php
+++ b/wp-admin/includes/class-ftp.php
@@ -1,560 +1,560 @@
-_resetError();
-
- $err_no = 0;
- $err_msg = "";
- $this->controlSocket = @fsockopen($host, $port, $err_no, $err_msg, $timeout) or $this->_setError(-1,"fsockopen failed");
- if ($err_no<>0) $this->setError($err_no,$err_msg);
-
- if ($this->_isError()) return false;
-
- @socket_set_timeout($this->controlSocket,$timeout) or $this->_setError(-1,"socket_set_timeout failed");
- if ($this->_isError()) return false;
-
- $this->_waitForResult();
- if ($this->_isError()) return false;
-
- return $this->getLastResult() == FTP_SERVICE_READY;
- }
-
- function isConnected() {
- return $this->controlSocket != NULL;
- }
-
- function disconnect() {
- if (!$this->isConnected()) return;
- @fclose($this->controlSocket);
- }
-
- function close() { //Closes an FTP connection
- $this->disconnect();
- }
-
- function login($user, $pass) { //Logs in to an FTP connection
- $this->_resetError();
-
- $this->_printCommand("USER $user");
- if ($this->_isError()) return false;
-
- $this->_waitForResult();
- if ($this->_isError()) return false;
-
- if ($this->getLastResult() == FTP_PASSWORD_NEEDED){
- $this->_printCommand("PASS $pass");
- if ($this->_isError()) return FALSE;
-
- $this->_waitForResult();
- if ($this->_isError()) return FALSE;
- }
-
- $result = $this->getLastResult() == FTP_USER_LOGGED_IN;
- return $result;
- }
-
- function cdup() { //Changes to the parent directory
- $this->_resetError();
-
- $this->_printCommand("CDUP");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
- }
-
- function cwd($path) {
- $this->_resetError();
-
- $this->_printCommand("CWD $path");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
- }
-
- function cd($path) {
- return $this->cwd($path);
- }
-
- function chdir($path) { //Changes directories on a FTP server
- return $this->cwd($path);
- }
-
- function chmod($mode,$filename) { //Set permissions on a file via FTP
- return $this->site("CHMOD $mode $filename");
- }
-
- function delete($filename) { //Deletes a file on the FTP server
- $this->_resetError();
-
- $this->_printCommand("DELE $filename");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
- }
-
- function exec($cmd) { //Requests execution of a program on the FTP server
- return $this->site("EXEC $cmd");
- }
-
- function fget($fp,$remote,$mode=FTP_BINARY,$resumepos=0) { //Downloads a file from the FTP server and saves to an open file
- $this->_resetError();
-
- $type = "I";
- if ($mode==FTP_ASCII) $type = "A";
-
- $this->_printCommand("TYPE $type");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
-
- $result = $this->_download("RETR $remote");
- if ($result) {
- fwrite($fp,$result);
- }
- return $result;
- }
-
- function fput($remote,$resource,$mode=FTP_BINARY,$startpos=0) { //Uploads from an open file to the FTP server
- $this->_resetError();
-
- $type = "I";
- if ($mode==FTP_ASCII) $type = "A";
-
- $this->_printCommand("TYPE $type");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
-
- if ($startpos>0) fseek($resource,$startpos);
- $result = $this->_uploadResource("STOR $remote",$resource);
- return $result;
- }
-
- function get_option($option) { //Retrieves various runtime behaviours of the current FTP stream
- $this->_resetError();
-
- switch ($option) {
- case "FTP_TIMEOUT_SEC" : return FTP_TIMEOUT;
- case "PHP_FTP_OPT_AUTOSEEK" : return FALSE;
- }
- setError(-1,"Unknown option: $option");
- return false;
- }
-
- function get($locale,$remote,$mode=FTP_BINARY,$resumepos=0) { //Downloads a file from the FTP server
- if (!($fp = @fopen($locale,"wb"))) return FALSE;
- $result = $this->fget($fp,$remote,$mode,$resumepos);
- @fclose($fp);
- if (!$result) @unlink($locale);
- return $result;
- }
- function mdtm($name) { //Returns the last modified time of the given file
- $this->_resetError();
-
- $this->_printCommand("MDTM $name");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- if ($lr!=FTP_FILE_STATUS) return FALSE;
- $subject = trim(substr($this->lastLine,4));
- $lucifer = array();
- if (preg_match("/([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])/",$subject,$lucifer))
- return mktime($lucifer[4],$lucifer[5],$lucifer[6],$lucifer[2],$lucifer[3],$lucifer[1],0);
- return FALSE;
- }
-
- function mkdir($name) { //Creates a directory
- $this->_resetError();
-
- $this->_printCommand("MKD $name");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- return ($lr==FTP_PATHNAME || $lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
- }
-
- function nb_continue() { //Continues retrieving/sending a file (non-blocking)
- $this->_resetError();
- // todo
- }
-
- function nb_fget() { //Retrieves a file from the FTP server and writes it to an open file (non-blocking)
- $this->_resetError();
- // todo
- }
-
- function nb_fput() { //Stores a file from an open file to the FTP server (non-blocking)
- $this->_resetError();
- // todo
- }
-
- function nb_get() { //Retrieves a file from the FTP server and writes it to a local file (non-blocking)
- $this->_resetError();
- // todo
- }
-
- function nb_put() { //Stores a file on the FTP server (non-blocking)
- $this->_resetError();
- // todo
- }
-
- function nlist($remote_filespec="") { //Returns a list of files in the given directory
- $this->_resetError();
- $result = $this->_download(trim("NLST $remote_filespec"));
- return ($result !== FALSE) ? explode("\n",str_replace("\r","",trim($result))) : $result;
- }
-
- function pasv($pasv) { //Turns passive mode on or off
- if (!$pasv) {
- $this->_setError("Active (PORT) mode is not supported");
- return false;
- }
- return true;
- }
-
- function put($remote,$local,$mode=FTP_BINARY,$startpos=0) { //Uploads a file to the FTP server
- if (!($fp = @fopen($local,"rb"))) return FALSE;
- $result = $this->fput($remote,$fp,$mode,$startpos);
- @fclose($fp);
- return $result;
- }
-
- function pwd() { //Returns the current directory name
- $this->_resetError();
-
- $this->_printCommand("PWD");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- if ($lr!=FTP_PATHNAME) return FALSE;
- $subject = trim(substr($this->lastLine,4));
- $lucifer = array();
- if (preg_match("/\"(.*)\"/",$subject,$lucifer)) return $lucifer[1];
- return FALSE;
- }
-
- function quit() { //Alias of close
- $this->close();
- }
-
- function raw($cmd) { //Sends an arbitrary command to an FTP server
- $this->_resetError();
-
- $this->_printCommand($cmd);
- $this->_waitForResult();
- $this->getLastResult();
- return array($this->lastLine);
- }
-
- function rawlist($remote_filespec="") { //Returns a detailed list of files in the given directory
- $this->_resetError();
- $result = $this->_download(trim("LIST $remote_filespec"));
- return ($result !== FALSE) ? explode("\n",str_replace("\r","",trim($result))) : $result;
- }
-
- function ls($remote_filespec="") { //Returns a parsed rawlist in an assoc array
- $a = $this->rawlist($remote_filespec);
- if (!$a) return $a;
- $systype = $this->systype();
- $is_windows = stristr($systype,"WIN")!==FALSE;
- $b = array();
- while (list($i,$line) = each($a)) {
- if ($is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|
) +(.+)/",$line,$lucifer)) {
- $b[$i] = array();
- if ($lucifer[3]<70) { $lucifer[3]+=2000; } else { $lucifer[3]+=1900; } // 4digit year fix
- $b[$i]['isdir'] = ($lucifer[7]=="");
- $b[$i]['size'] = $lucifer[7];
- $b[$i]['month'] = $lucifer[1];
- $b[$i]['day'] = $lucifer[2];
- $b[$i]['year'] = $lucifer[3];
- $b[$i]['hour'] = $lucifer[4];
- $b[$i]['minute'] = $lucifer[5];
- $b[$i]['time'] = @mktime($lucifer[4]+(strcasecmp($lucifer[6],"PM")==0?12:0),$lucifer[5],0,$lucifer[1],$lucifer[2],$lucifer[3]);
- $b[$i]['am/pm'] = $lucifer[6];
- $b[$i]['name'] = $lucifer[8];
- } else if (!$is_windows && $lucifer=preg_split("/[ ]/",$line,9,PREG_SPLIT_NO_EMPTY)) {
- echo $line."\n";
- $lcount=count($lucifer);
- if ($lcount<8) continue;
- $b[$i] = array();
- $b[$i]['isdir'] = $lucifer[0]{0} === "d";
- $b[$i]['islink'] = $lucifer[0]{0} === "l";
- $b[$i]['perms'] = $lucifer[0];
- $b[$i]['number'] = $lucifer[1];
- $b[$i]['owner'] = $lucifer[2];
- $b[$i]['group'] = $lucifer[3];
- $b[$i]['size'] = $lucifer[4];
- if ($lcount==8) {
- sscanf($lucifer[5],"%d-%d-%d",$b[$i]['year'],$b[$i]['month'],$b[$i]['day']);
- sscanf($lucifer[6],"%d:%d",$b[$i]['hour'],$b[$i]['minute']);
- $b[$i]['time'] = @mktime($b[$i]['hour'],$b[$i]['minute'],0,$b[$i]['month'],$b[$i]['day'],$b[$i]['year']);
- $b[$i]['name'] = $lucifer[7];
- } else {
- $b[$i]['month'] = $lucifer[5];
- $b[$i]['day'] = $lucifer[6];
- if (preg_match("/([0-9]{2}):([0-9]{2})/",$lucifer[7],$l2)) {
- $b[$i]['year'] = date("Y");
- $b[$i]['hour'] = $l2[1];
- $b[$i]['minute'] = $l2[2];
- } else {
- $b[$i]['year'] = $lucifer[7];
- $b[$i]['hour'] = 0;
- $b[$i]['minute'] = 0;
- }
- $b[$i]['time'] = strtotime(sprintf("%d %s %d %02d:%02d",$b[$i]['day'],$b[$i]['month'],$b[$i]['year'],$b[$i]['hour'],$b[$i]['minute']));
- $b[$i]['name'] = $lucifer[8];
- }
- }
- }
- return $b;
- }
-
- function rename($from,$to) { //Renames a file on the FTP server
- $this->_resetError();
-
- $this->_printCommand("RNFR $from");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- $this->_printCommand("RNTO $to");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
- }
-
- function rmdir($name) { //Removes a directory
- $this->_resetError();
-
- $this->_printCommand("RMD $name");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
- }
-
- function set_option() { //Set miscellaneous runtime FTP options
- $this->_resetError();
- $this->_setError(-1,"set_option not supported");
- return false;
- }
-
- function site($cmd) { //Sends a SITE command to the server
- $this->_resetError();
-
- $this->_printCommand("SITE $cmd");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- return true;
- }
-
- function size($name) { //Returns the size of the given file
- $this->_resetError();
-
- $this->_printCommand("SIZE $name");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- return $lr==FTP_FILE_STATUS ? trim(substr($this->lastLine,4)) : FALSE;
- }
-
- function ssl_connect() { //Opens an Secure SSL-FTP connection
- $this->_resetError();
- $this->_setError(-1,"ssl_connect not supported");
- return false;
- }
-
- function systype() { // Returns the system type identifier of the remote FTP server
- $this->_resetError();
-
- $this->_printCommand("SYST");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- return $lr==FTP_NAME_SYSTEM_TYPE ? trim(substr($this->lastLine,4)) : FALSE;
- }
-
- function getLastResult() {
- $this->newResult = FALSE;
- return $this->lastResult;
- }
-
- /* private */
- function _hasNewResult() {
- return $this->newResult;
- }
-
- /* private */
- function _waitForResult() {
- while(!$this->_hasNewResult() && $this->_readln()!==FALSE && !$this->_isError()) { /* noop */ }
- }
-
- /* private */
- function _readln() {
- $line = fgets($this->controlSocket);
- if ($line === FALSE) {
- $this->_setError(-1,"fgets failed in _readln");
- return FALSE;
- }
- if (strlen($line)==0) return $line;
-
- $lucifer = array();
- if (preg_match("/^[0-9][0-9][0-9] /",$line,$lucifer)) {
- //its a resultline
- $this->lastResult = intval($lucifer[0]);
- $this->newResult = TRUE;
- if (substr($lucifer[0],0,1)=='5') {
- $this->_setError($this->lastResult,trim(substr($line,4)));
- }
- }
-
- $this->lastLine = trim($line);
- $this->lastLines[] = "< ".trim($line);
- return $line;
- }
-
- /* private */
- function _printCommand($line) {
- $this->lastLines[] = "> ".$line;
- fwrite($this->controlSocket,$line."\r\n");
- fflush($this->controlSocket);
- }
-
- /* private */
- function _pasv() {
- $this->_resetError();
- $this->_printCommand("PASV");
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if ($this->_isError()) return FALSE;
- if ($lr!=FTP_PASSIVE_MODE) return FALSE;
- $subject = trim(substr($this->lastLine,4));
- $lucifer = array();
- if (preg_match("/\\((\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3})\\)/",$subject,$lucifer)) {
- $this->pasvAddr=$lucifer;
-
- $host = sprintf("%d.%d.%d.%d",$lucifer[1],$lucifer[2],$lucifer[3],$lucifer[4]);
- $port = $lucifer[5]*256 + $lucifer[6];
-
- $err_no=0;
- $err_msg="";
- $passiveConnection = fsockopen($host,$port,$err_no,$err_msg, FTP_TIMEOUT);
- if ($err_no!=0) {
- $this->_setError($err_no,$err_msg);
- return FALSE;
- }
-
- return $passiveConnection;
- }
- return FALSE;
- }
-
- /* private */
- function _download($cmd) {
- if (!($passiveConnection = $this->_pasv())) return FALSE;
- $this->_printCommand($cmd);
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if (!$this->_isError()) {
- $result = "";
- while (!feof($passiveConnection)) {
- $result .= fgets($passiveConnection);
- }
- fclose($passiveConnection);
- $this->_waitForResult();
- $lr = $this->getLastResult();
- return ($lr==FTP_FILE_TRANSFER_OK) || ($lr==FTP_FILE_ACTION_OK) || ($lr==FTP_COMMAND_OK) ? $result : FALSE;
- } else {
- fclose($passiveConnection);
- return FALSE;
- }
- }
-
- /* upload */
- function _uploadResource($cmd,$resource) {
- if (!($passiveConnection = $this->_pasv())) return FALSE;
- $this->_printCommand($cmd);
- $this->_waitForResult();
- $lr = $this->getLastResult();
- if (!$this->_isError()) {
- $result = "";
- while (!feof($resource)) {
- $buf = fread($resource,1024);
- fwrite($passiveConnection,$buf);
- }
- fclose($passiveConnection);
- $this->_waitForResult();
- $lr = $this->getLastResult();
- return ($lr==FTP_FILE_TRANSFER_OK) || ($lr==FTP_FILE_ACTION_OK) || ($lr==FTP_COMMAND_OK) ? $result : FALSE;
- } else {
- fclose($passiveConnection);
- return FALSE;
- }
- }
-
- /* private */
- function _resetError() {
- $this->error_no = NULL;
- $this->error_msg = NULL;
- }
-
- /* private */
- function _setError($no,$msg) {
- if (is_array($this->error_no)) {
- $this->error_no[] = $no;
- $this->error_msg[] = $msg;
- } else if ($this->error_no!=NULL) {
- $this->error_no = array($this->error_no,$no);
- $this->error_msg = array($this->error_msg,$msg);
- } else {
- $this->error_no = $no;
- $this->error_msg = $msg;
- }
- }
-
- /* private */
- function _isError() {
- return ($this->error_no != NULL) && ($this->error_no !== 0);
- }
-
- }
+_resetError();
+
+ $err_no = 0;
+ $err_msg = "";
+ $this->controlSocket = @fsockopen($host, $port, $err_no, $err_msg, $timeout) or $this->_setError(-1,"fsockopen failed");
+ if ($err_no<>0) $this->setError($err_no,$err_msg);
+
+ if ($this->_isError()) return false;
+
+ @socket_set_timeout($this->controlSocket,$timeout) or $this->_setError(-1,"socket_set_timeout failed");
+ if ($this->_isError()) return false;
+
+ $this->_waitForResult();
+ if ($this->_isError()) return false;
+
+ return $this->getLastResult() == FTP_SERVICE_READY;
+ }
+
+ function isConnected() {
+ return $this->controlSocket != NULL;
+ }
+
+ function disconnect() {
+ if (!$this->isConnected()) return;
+ @fclose($this->controlSocket);
+ }
+
+ function close() { //Closes an FTP connection
+ $this->disconnect();
+ }
+
+ function login($user, $pass) { //Logs in to an FTP connection
+ $this->_resetError();
+
+ $this->_printCommand("USER $user");
+ if ($this->_isError()) return false;
+
+ $this->_waitForResult();
+ if ($this->_isError()) return false;
+
+ if ($this->getLastResult() == FTP_PASSWORD_NEEDED){
+ $this->_printCommand("PASS $pass");
+ if ($this->_isError()) return FALSE;
+
+ $this->_waitForResult();
+ if ($this->_isError()) return FALSE;
+ }
+
+ $result = $this->getLastResult() == FTP_USER_LOGGED_IN;
+ return $result;
+ }
+
+ function cdup() { //Changes to the parent directory
+ $this->_resetError();
+
+ $this->_printCommand("CDUP");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
+ }
+
+ function cwd($path) {
+ $this->_resetError();
+
+ $this->_printCommand("CWD $path");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
+ }
+
+ function cd($path) {
+ return $this->cwd($path);
+ }
+
+ function chdir($path) { //Changes directories on a FTP server
+ return $this->cwd($path);
+ }
+
+ function chmod($mode,$filename) { //Set permissions on a file via FTP
+ return $this->site("CHMOD $mode $filename");
+ }
+
+ function delete($filename) { //Deletes a file on the FTP server
+ $this->_resetError();
+
+ $this->_printCommand("DELE $filename");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
+ }
+
+ function exec($cmd) { //Requests execution of a program on the FTP server
+ return $this->site("EXEC $cmd");
+ }
+
+ function fget($fp,$remote,$mode=FTP_BINARY,$resumepos=0) { //Downloads a file from the FTP server and saves to an open file
+ $this->_resetError();
+
+ $type = "I";
+ if ($mode==FTP_ASCII) $type = "A";
+
+ $this->_printCommand("TYPE $type");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+
+ $result = $this->_download("RETR $remote");
+ if ($result) {
+ fwrite($fp,$result);
+ }
+ return $result;
+ }
+
+ function fput($remote,$resource,$mode=FTP_BINARY,$startpos=0) { //Uploads from an open file to the FTP server
+ $this->_resetError();
+
+ $type = "I";
+ if ($mode==FTP_ASCII) $type = "A";
+
+ $this->_printCommand("TYPE $type");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+
+ if ($startpos>0) fseek($resource,$startpos);
+ $result = $this->_uploadResource("STOR $remote",$resource);
+ return $result;
+ }
+
+ function get_option($option) { //Retrieves various runtime behaviours of the current FTP stream
+ $this->_resetError();
+
+ switch ($option) {
+ case "FTP_TIMEOUT_SEC" : return FTP_TIMEOUT;
+ case "PHP_FTP_OPT_AUTOSEEK" : return FALSE;
+ }
+ setError(-1,"Unknown option: $option");
+ return false;
+ }
+
+ function get($locale,$remote,$mode=FTP_BINARY,$resumepos=0) { //Downloads a file from the FTP server
+ if (!($fp = @fopen($locale,"wb"))) return FALSE;
+ $result = $this->fget($fp,$remote,$mode,$resumepos);
+ @fclose($fp);
+ if (!$result) @unlink($locale);
+ return $result;
+ }
+ function mdtm($name) { //Returns the last modified time of the given file
+ $this->_resetError();
+
+ $this->_printCommand("MDTM $name");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ if ($lr!=FTP_FILE_STATUS) return FALSE;
+ $subject = trim(substr($this->lastLine,4));
+ $lucifer = array();
+ if (preg_match("/([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])/",$subject,$lucifer))
+ return mktime($lucifer[4],$lucifer[5],$lucifer[6],$lucifer[2],$lucifer[3],$lucifer[1],0);
+ return FALSE;
+ }
+
+ function mkdir($name) { //Creates a directory
+ $this->_resetError();
+
+ $this->_printCommand("MKD $name");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ return ($lr==FTP_PATHNAME || $lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
+ }
+
+ function nb_continue() { //Continues retrieving/sending a file (non-blocking)
+ $this->_resetError();
+ // todo
+ }
+
+ function nb_fget() { //Retrieves a file from the FTP server and writes it to an open file (non-blocking)
+ $this->_resetError();
+ // todo
+ }
+
+ function nb_fput() { //Stores a file from an open file to the FTP server (non-blocking)
+ $this->_resetError();
+ // todo
+ }
+
+ function nb_get() { //Retrieves a file from the FTP server and writes it to a local file (non-blocking)
+ $this->_resetError();
+ // todo
+ }
+
+ function nb_put() { //Stores a file on the FTP server (non-blocking)
+ $this->_resetError();
+ // todo
+ }
+
+ function nlist($remote_filespec="") { //Returns a list of files in the given directory
+ $this->_resetError();
+ $result = $this->_download(trim("NLST $remote_filespec"));
+ return ($result !== FALSE) ? explode("\n",str_replace("\r","",trim($result))) : $result;
+ }
+
+ function pasv($pasv) { //Turns passive mode on or off
+ if (!$pasv) {
+ $this->_setError("Active (PORT) mode is not supported");
+ return false;
+ }
+ return true;
+ }
+
+ function put($remote,$local,$mode=FTP_BINARY,$startpos=0) { //Uploads a file to the FTP server
+ if (!($fp = @fopen($local,"rb"))) return FALSE;
+ $result = $this->fput($remote,$fp,$mode,$startpos);
+ @fclose($fp);
+ return $result;
+ }
+
+ function pwd() { //Returns the current directory name
+ $this->_resetError();
+
+ $this->_printCommand("PWD");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ if ($lr!=FTP_PATHNAME) return FALSE;
+ $subject = trim(substr($this->lastLine,4));
+ $lucifer = array();
+ if (preg_match("/\"(.*)\"/",$subject,$lucifer)) return $lucifer[1];
+ return FALSE;
+ }
+
+ function quit() { //Alias of close
+ $this->close();
+ }
+
+ function raw($cmd) { //Sends an arbitrary command to an FTP server
+ $this->_resetError();
+
+ $this->_printCommand($cmd);
+ $this->_waitForResult();
+ $this->getLastResult();
+ return array($this->lastLine);
+ }
+
+ function rawlist($remote_filespec="") { //Returns a detailed list of files in the given directory
+ $this->_resetError();
+ $result = $this->_download(trim("LIST $remote_filespec"));
+ return ($result !== FALSE) ? explode("\n",str_replace("\r","",trim($result))) : $result;
+ }
+
+ function ls($remote_filespec="") { //Returns a parsed rawlist in an assoc array
+ $a = $this->rawlist($remote_filespec);
+ if (!$a) return $a;
+ $systype = $this->systype();
+ $is_windows = stristr($systype,"WIN")!==FALSE;
+ $b = array();
+ while (list($i,$line) = each($a)) {
+ if ($is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|) +(.+)/",$line,$lucifer)) {
+ $b[$i] = array();
+ if ($lucifer[3]<70) { $lucifer[3]+=2000; } else { $lucifer[3]+=1900; } // 4digit year fix
+ $b[$i]['isdir'] = ($lucifer[7]=="");
+ $b[$i]['size'] = $lucifer[7];
+ $b[$i]['month'] = $lucifer[1];
+ $b[$i]['day'] = $lucifer[2];
+ $b[$i]['year'] = $lucifer[3];
+ $b[$i]['hour'] = $lucifer[4];
+ $b[$i]['minute'] = $lucifer[5];
+ $b[$i]['time'] = @mktime($lucifer[4]+(strcasecmp($lucifer[6],"PM")==0?12:0),$lucifer[5],0,$lucifer[1],$lucifer[2],$lucifer[3]);
+ $b[$i]['am/pm'] = $lucifer[6];
+ $b[$i]['name'] = $lucifer[8];
+ } else if (!$is_windows && $lucifer=preg_split("/[ ]/",$line,9,PREG_SPLIT_NO_EMPTY)) {
+ echo $line."\n";
+ $lcount=count($lucifer);
+ if ($lcount<8) continue;
+ $b[$i] = array();
+ $b[$i]['isdir'] = $lucifer[0]{0} === "d";
+ $b[$i]['islink'] = $lucifer[0]{0} === "l";
+ $b[$i]['perms'] = $lucifer[0];
+ $b[$i]['number'] = $lucifer[1];
+ $b[$i]['owner'] = $lucifer[2];
+ $b[$i]['group'] = $lucifer[3];
+ $b[$i]['size'] = $lucifer[4];
+ if ($lcount==8) {
+ sscanf($lucifer[5],"%d-%d-%d",$b[$i]['year'],$b[$i]['month'],$b[$i]['day']);
+ sscanf($lucifer[6],"%d:%d",$b[$i]['hour'],$b[$i]['minute']);
+ $b[$i]['time'] = @mktime($b[$i]['hour'],$b[$i]['minute'],0,$b[$i]['month'],$b[$i]['day'],$b[$i]['year']);
+ $b[$i]['name'] = $lucifer[7];
+ } else {
+ $b[$i]['month'] = $lucifer[5];
+ $b[$i]['day'] = $lucifer[6];
+ if (preg_match("/([0-9]{2}):([0-9]{2})/",$lucifer[7],$l2)) {
+ $b[$i]['year'] = date("Y");
+ $b[$i]['hour'] = $l2[1];
+ $b[$i]['minute'] = $l2[2];
+ } else {
+ $b[$i]['year'] = $lucifer[7];
+ $b[$i]['hour'] = 0;
+ $b[$i]['minute'] = 0;
+ }
+ $b[$i]['time'] = strtotime(sprintf("%d %s %d %02d:%02d",$b[$i]['day'],$b[$i]['month'],$b[$i]['year'],$b[$i]['hour'],$b[$i]['minute']));
+ $b[$i]['name'] = $lucifer[8];
+ }
+ }
+ }
+ return $b;
+ }
+
+ function rename($from,$to) { //Renames a file on the FTP server
+ $this->_resetError();
+
+ $this->_printCommand("RNFR $from");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ $this->_printCommand("RNTO $to");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
+ }
+
+ function rmdir($name) { //Removes a directory
+ $this->_resetError();
+
+ $this->_printCommand("RMD $name");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ return ($lr==FTP_FILE_ACTION_OK || $lr==FTP_COMMAND_OK);
+ }
+
+ function set_option() { //Set miscellaneous runtime FTP options
+ $this->_resetError();
+ $this->_setError(-1,"set_option not supported");
+ return false;
+ }
+
+ function site($cmd) { //Sends a SITE command to the server
+ $this->_resetError();
+
+ $this->_printCommand("SITE $cmd");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ return true;
+ }
+
+ function size($name) { //Returns the size of the given file
+ $this->_resetError();
+
+ $this->_printCommand("SIZE $name");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ return $lr==FTP_FILE_STATUS ? trim(substr($this->lastLine,4)) : FALSE;
+ }
+
+ function ssl_connect() { //Opens an Secure SSL-FTP connection
+ $this->_resetError();
+ $this->_setError(-1,"ssl_connect not supported");
+ return false;
+ }
+
+ function systype() { // Returns the system type identifier of the remote FTP server
+ $this->_resetError();
+
+ $this->_printCommand("SYST");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ return $lr==FTP_NAME_SYSTEM_TYPE ? trim(substr($this->lastLine,4)) : FALSE;
+ }
+
+ function getLastResult() {
+ $this->newResult = FALSE;
+ return $this->lastResult;
+ }
+
+ /* private */
+ function _hasNewResult() {
+ return $this->newResult;
+ }
+
+ /* private */
+ function _waitForResult() {
+ while(!$this->_hasNewResult() && $this->_readln()!==FALSE && !$this->_isError()) { /* noop */ }
+ }
+
+ /* private */
+ function _readln() {
+ $line = fgets($this->controlSocket);
+ if ($line === FALSE) {
+ $this->_setError(-1,"fgets failed in _readln");
+ return FALSE;
+ }
+ if (strlen($line)==0) return $line;
+
+ $lucifer = array();
+ if (preg_match("/^[0-9][0-9][0-9] /",$line,$lucifer)) {
+ //its a resultline
+ $this->lastResult = intval($lucifer[0]);
+ $this->newResult = TRUE;
+ if (substr($lucifer[0],0,1)=='5') {
+ $this->_setError($this->lastResult,trim(substr($line,4)));
+ }
+ }
+
+ $this->lastLine = trim($line);
+ $this->lastLines[] = "< ".trim($line);
+ return $line;
+ }
+
+ /* private */
+ function _printCommand($line) {
+ $this->lastLines[] = "> ".$line;
+ fwrite($this->controlSocket,$line."\r\n");
+ fflush($this->controlSocket);
+ }
+
+ /* private */
+ function _pasv() {
+ $this->_resetError();
+ $this->_printCommand("PASV");
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if ($this->_isError()) return FALSE;
+ if ($lr!=FTP_PASSIVE_MODE) return FALSE;
+ $subject = trim(substr($this->lastLine,4));
+ $lucifer = array();
+ if (preg_match("/\\((\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3})\\)/",$subject,$lucifer)) {
+ $this->pasvAddr=$lucifer;
+
+ $host = sprintf("%d.%d.%d.%d",$lucifer[1],$lucifer[2],$lucifer[3],$lucifer[4]);
+ $port = $lucifer[5]*256 + $lucifer[6];
+
+ $err_no=0;
+ $err_msg="";
+ $passiveConnection = fsockopen($host,$port,$err_no,$err_msg, FTP_TIMEOUT);
+ if ($err_no!=0) {
+ $this->_setError($err_no,$err_msg);
+ return FALSE;
+ }
+
+ return $passiveConnection;
+ }
+ return FALSE;
+ }
+
+ /* private */
+ function _download($cmd) {
+ if (!($passiveConnection = $this->_pasv())) return FALSE;
+ $this->_printCommand($cmd);
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if (!$this->_isError()) {
+ $result = "";
+ while (!feof($passiveConnection)) {
+ $result .= fgets($passiveConnection);
+ }
+ fclose($passiveConnection);
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ return ($lr==FTP_FILE_TRANSFER_OK) || ($lr==FTP_FILE_ACTION_OK) || ($lr==FTP_COMMAND_OK) ? $result : FALSE;
+ } else {
+ fclose($passiveConnection);
+ return FALSE;
+ }
+ }
+
+ /* upload */
+ function _uploadResource($cmd,$resource) {
+ if (!($passiveConnection = $this->_pasv())) return FALSE;
+ $this->_printCommand($cmd);
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ if (!$this->_isError()) {
+ $result = "";
+ while (!feof($resource)) {
+ $buf = fread($resource,1024);
+ fwrite($passiveConnection,$buf);
+ }
+ fclose($passiveConnection);
+ $this->_waitForResult();
+ $lr = $this->getLastResult();
+ return ($lr==FTP_FILE_TRANSFER_OK) || ($lr==FTP_FILE_ACTION_OK) || ($lr==FTP_COMMAND_OK) ? $result : FALSE;
+ } else {
+ fclose($passiveConnection);
+ return FALSE;
+ }
+ }
+
+ /* private */
+ function _resetError() {
+ $this->error_no = NULL;
+ $this->error_msg = NULL;
+ }
+
+ /* private */
+ function _setError($no,$msg) {
+ if (is_array($this->error_no)) {
+ $this->error_no[] = $no;
+ $this->error_msg[] = $msg;
+ } else if ($this->error_no!=NULL) {
+ $this->error_no = array($this->error_no,$no);
+ $this->error_msg = array($this->error_msg,$msg);
+ } else {
+ $this->error_no = $no;
+ $this->error_msg = $msg;
+ }
+ }
+
+ /* private */
+ function _isError() {
+ return ($this->error_no != NULL) && ($this->error_no !== 0);
+ }
+
+ }
?>
\ No newline at end of file
diff --git a/wp-admin/includes/class-wp-filesystem-direct.php b/wp-admin/includes/class-wp-filesystem-direct.php
index 34ec770690..24ed2a8519 100644
--- a/wp-admin/includes/class-wp-filesystem-direct.php
+++ b/wp-admin/includes/class-wp-filesystem-direct.php
@@ -1,329 +1,329 @@
-permission = umask();
- }
- function connect(){
- return;
- }
- function setDefaultPermissions($perm){
- $this->permission = $perm;
- }
- function find_base_dir($base = '.'){
- return str_replace('\\','/',ABSPATH);
- }
- function get_base_dir($base = '.'){
- return str_replace('\\','/',ABSPATH);
- }
- function get_contents($file){
- return @file_get_contents($file);
- }
- function get_contents_array($file){
- return @file($file);
- }
- function put_contents($file,$contents,$mode=false,$type=''){
- $fp=@fopen($file,'w'.$type);
- if (!$fp)
- return false;
- @fwrite($fp,$contents);
- @fclose($fp);
- $this->chmod($file,$mode);
- return true;
- }
- function cwd(){
- return @getcwd();
- }
- function chgrp($file,$group,$recursive=false){
- if( ! $this->exists($file) )
- return false;
- if( ! $recursive )
- return @chgrp($file,$group);
- if( ! $this->is_dir($file) )
- return @chgrp($file,$group);
- //Is a directory, and we want recursive
- $filelist = $this->dirlist($file);
- foreach($filelist as $filename){
- $this->chgrp($file.'/'.$filename,$group,$recursive);
- }
- return true;
- }
- function chmod($file,$mode=false,$recursive=false){
- if( ! $mode )
- $mode = $this->permission;
- if( ! $this->exists($file) )
- return false;
- if( ! $recursive )
- return @chmod($file,$mode);
- if( ! $this->is_dir($file) )
- return @chmod($file,$mode);
- //Is a directory, and we want recursive
- $filelist = $this->dirlist($file);
- foreach($filelist as $filename){
- $this->chmod($file.'/'.$filename,$mode,$recursive);
- }
- return true;
- }
- function chown($file,$owner,$recursive=false){
- if( ! $this->exists($file) )
- return false;
- if( ! $recursive )
- return @chown($file,$owner);
- if( ! $this->is_dir($file) )
- return @chown($file,$owner);
- //Is a directory, and we want recursive
- $filelist = $this->dirlist($file);
- foreach($filelist as $filename){
- $this->chown($file.'/'.$filename,$owner,$recursive);
- }
- return true;
- }
- function owner($file){
- $owneruid=@fileowner($file);
- if( ! $owneruid )
- return false;
- if( !function_exists('posix_getpwuid') )
- return $owneruid;
- $ownerarray=posix_getpwuid($owneruid);
- return $ownerarray['name'];
- }
- function getchmod($file){
- return @fileperms($file);
- }
- function gethchmod($file){
- //From the PHP.net page for ...?
- $perms = $this->getchmod($file);
- if (($perms & 0xC000) == 0xC000) {
- // Socket
- $info = 's';
- } elseif (($perms & 0xA000) == 0xA000) {
- // Symbolic Link
- $info = 'l';
- } elseif (($perms & 0x8000) == 0x8000) {
- // Regular
- $info = '-';
- } elseif (($perms & 0x6000) == 0x6000) {
- // Block special
- $info = 'b';
- } elseif (($perms & 0x4000) == 0x4000) {
- // Directory
- $info = 'd';
- } elseif (($perms & 0x2000) == 0x2000) {
- // Character special
- $info = 'c';
- } elseif (($perms & 0x1000) == 0x1000) {
- // FIFO pipe
- $info = 'p';
- } else {
- // Unknown
- $info = 'u';
- }
-
- // Owner
- $info .= (($perms & 0x0100) ? 'r' : '-');
- $info .= (($perms & 0x0080) ? 'w' : '-');
- $info .= (($perms & 0x0040) ?
- (($perms & 0x0800) ? 's' : 'x' ) :
- (($perms & 0x0800) ? 'S' : '-'));
-
- // Group
- $info .= (($perms & 0x0020) ? 'r' : '-');
- $info .= (($perms & 0x0010) ? 'w' : '-');
- $info .= (($perms & 0x0008) ?
- (($perms & 0x0400) ? 's' : 'x' ) :
- (($perms & 0x0400) ? 'S' : '-'));
-
- // World
- $info .= (($perms & 0x0004) ? 'r' : '-');
- $info .= (($perms & 0x0002) ? 'w' : '-');
- $info .= (($perms & 0x0001) ?
- (($perms & 0x0200) ? 't' : 'x' ) :
- (($perms & 0x0200) ? 'T' : '-'));
- return $info;
- }
- function getnumchmodfromh($mode) {
- $realmode = "";
- $legal = array("","w","r","x","-");
- $attarray = preg_split("//",$mode);
- for($i=0;$i'0','r'=>'4','w'=>'2','x'=>'1');
- $mode = strtr($mode,$trans);
- $newmode = '';
- $newmode .= $mode[0]+$mode[1]+$mode[2];
- $newmode .= $mode[3]+$mode[4]+$mode[5];
- $newmode .= $mode[6]+$mode[7]+$mode[8];
- return $newmode;
- }
- function group($file){
- $gid=@filegroup($file);
- if( ! $gid )
- return false;
- if( !function_exists('posix_getgrgid') )
- return $gid;
- $grouparray=posix_getgrgid($gid);
- return $grouparray['name'];
- }
-
- function copy($source,$destination,$overwrite=false){
- if( $overwrite && $this->exists($destination) )
- return false;
- return copy($source,$destination);
+permission = umask();
}
-
- function move($source,$destination,$overwrite=false){
- //Possible to use rename()
- if( $this->copy($source,$destination,$overwrite) && $this->exists($destination) ){
- $this->delete($source);
- return true;
- } else {
- return false;
- }
+ function connect(){
+ return;
}
-
- function delete($file,$recursive=false){
- $file = str_replace('\\','/',$file); //for win32, occasional problems deleteing files otherwise
- if( $this->is_file($file) )
- return @unlink($file);
- if( !$recursive )
- return @rmdir($file);
- $filelist = $this->dirlist($file);
-
- $retval = true;
- foreach($filelist as $filename=>$fileinfo){
- if( ! $this->delete($file.'/'.$filename,$recursive) )
- $retval = false;
- }
- if( ! @rmdir($file) )
- return false;
- return $retval;
- }
-
- function exists($file){
- return @file_exists($file);
+ function setDefaultPermissions($perm){
+ $this->permission = $perm;
}
-
- function is_file($file){
- return @is_file($file);
+ function find_base_dir($base = '.'){
+ return str_replace('\\','/',ABSPATH);
}
-
- function is_dir($path){
- return @is_dir($path);
+ function get_base_dir($base = '.'){
+ return str_replace('\\','/',ABSPATH);
}
-
- function is_readable($file){
- return @is_readable($file);
+ function get_contents($file){
+ return @file_get_contents($file);
}
-
- function is_writable($file){
- return @is_writable($file);
- }
-
- function atime($file){
- return @fileatime($file);
+ function get_contents_array($file){
+ return @file($file);
}
-
- function mtime($file){
- return @filemtime($file);
- }
- function size($file){
- return @filesize($file);
+ function put_contents($file,$contents,$mode=false,$type=''){
+ $fp=@fopen($file,'w'.$type);
+ if (!$fp)
+ return false;
+ @fwrite($fp,$contents);
+ @fclose($fp);
+ $this->chmod($file,$mode);
+ return true;
}
-
- function touch($file,$time=0,$atime=0){
- if($time==0)
- $time = time();
- if($atime==0)
- $atime = time();
- return @touch($file,$time,$atime);
- }
-
- function mkdir($path,$chmod=false,$chown=false,$chgrp=false){
- if( ! $chmod)
- $chmod = $this->permission;
-
- if( !@mkdir($path,$chmod) )
- return false;
- if( $chown )
- $this->chown($path,$chown);
- if( $chgrp )
- $this->chgrp($path,$chgrp);
- return true;
+ function cwd(){
+ return @getcwd();
}
-
- function rmdir($path,$recursive=false){
- if( ! $recursive )
- return @rmdir($path);
- //recursive:
- $filelist = $this->dirlist($path);
- foreach($filelist as $filename=>$det){
- if ( '/' == substr($filename,-1,1) )
- $this->rmdir($path.'/'.$filename,$recursive);
- @rmdir($entry);
- }
- return @rmdir($path);
- }
-
- function dirlist($path,$incdot=false,$recursive=false){
- if( $this->is_file($path) ){
- $limitFile = basename($path);
- $path = dirname($path);
- } else {
- $limitFile = false;
- }
- if( ! $this->is_dir($path) )
- return false;
-
- $ret = array();
- $dir = dir($path);
- while (false !== ($entry = $dir->read())) {
- $struc = array();
- $struc['name'] = $entry;
-
- if( '.' == $struc['name'][0] && !$incdot)
- continue;
- if( $limitFile && $struc['name'] != $limitFile)
- continue;
-
- $struc['perms'] = $this->gethchmod($path.'/'.$entry);
- $struc['permsn'] = $this->getnumchmodfromh($struc['perms']);
- $struc['number'] = false;
- $struc['owner'] = $this->owner($path.'/'.$entry);
- $struc['group'] = $this->group($path.'/'.$entry);
- $struc['size'] = $this->size($path.'/'.$entry);
- $struc['lastmodunix']= $this->mtime($path.'/'.$entry);
- $struc['lastmod'] = date('M j',$struc['lastmodunix']);
- $struc['time'] = date('h:i:s',$struc['lastmodunix']);
- $struc['type'] = $this->is_dir($path.'/'.$entry) ? 'folder' : 'file';
- if('folder' == $struc['type'] ){
- $struc['files'] = array();
-
- if( $incdot ){
- //We're including the doted starts
- if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder
- if ($recursive)
- $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
- }
- } else { //No dots
- if ($recursive)
- $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
- }
- }
- //File
- $ret[$struc['name']] = $struc;
- }
- $dir->close();
- unset($dir);
- return $ret;
+ function chgrp($file,$group,$recursive=false){
+ if( ! $this->exists($file) )
+ return false;
+ if( ! $recursive )
+ return @chgrp($file,$group);
+ if( ! $this->is_dir($file) )
+ return @chgrp($file,$group);
+ //Is a directory, and we want recursive
+ $filelist = $this->dirlist($file);
+ foreach($filelist as $filename){
+ $this->chgrp($file.'/'.$filename,$group,$recursive);
+ }
+ return true;
}
-
- function __destruct(){
- return;
- }
-}
+ function chmod($file,$mode=false,$recursive=false){
+ if( ! $mode )
+ $mode = $this->permission;
+ if( ! $this->exists($file) )
+ return false;
+ if( ! $recursive )
+ return @chmod($file,$mode);
+ if( ! $this->is_dir($file) )
+ return @chmod($file,$mode);
+ //Is a directory, and we want recursive
+ $filelist = $this->dirlist($file);
+ foreach($filelist as $filename){
+ $this->chmod($file.'/'.$filename,$mode,$recursive);
+ }
+ return true;
+ }
+ function chown($file,$owner,$recursive=false){
+ if( ! $this->exists($file) )
+ return false;
+ if( ! $recursive )
+ return @chown($file,$owner);
+ if( ! $this->is_dir($file) )
+ return @chown($file,$owner);
+ //Is a directory, and we want recursive
+ $filelist = $this->dirlist($file);
+ foreach($filelist as $filename){
+ $this->chown($file.'/'.$filename,$owner,$recursive);
+ }
+ return true;
+ }
+ function owner($file){
+ $owneruid=@fileowner($file);
+ if( ! $owneruid )
+ return false;
+ if( !function_exists('posix_getpwuid') )
+ return $owneruid;
+ $ownerarray=posix_getpwuid($owneruid);
+ return $ownerarray['name'];
+ }
+ function getchmod($file){
+ return @fileperms($file);
+ }
+ function gethchmod($file){
+ //From the PHP.net page for ...?
+ $perms = $this->getchmod($file);
+ if (($perms & 0xC000) == 0xC000) {
+ // Socket
+ $info = 's';
+ } elseif (($perms & 0xA000) == 0xA000) {
+ // Symbolic Link
+ $info = 'l';
+ } elseif (($perms & 0x8000) == 0x8000) {
+ // Regular
+ $info = '-';
+ } elseif (($perms & 0x6000) == 0x6000) {
+ // Block special
+ $info = 'b';
+ } elseif (($perms & 0x4000) == 0x4000) {
+ // Directory
+ $info = 'd';
+ } elseif (($perms & 0x2000) == 0x2000) {
+ // Character special
+ $info = 'c';
+ } elseif (($perms & 0x1000) == 0x1000) {
+ // FIFO pipe
+ $info = 'p';
+ } else {
+ // Unknown
+ $info = 'u';
+ }
+
+ // Owner
+ $info .= (($perms & 0x0100) ? 'r' : '-');
+ $info .= (($perms & 0x0080) ? 'w' : '-');
+ $info .= (($perms & 0x0040) ?
+ (($perms & 0x0800) ? 's' : 'x' ) :
+ (($perms & 0x0800) ? 'S' : '-'));
+
+ // Group
+ $info .= (($perms & 0x0020) ? 'r' : '-');
+ $info .= (($perms & 0x0010) ? 'w' : '-');
+ $info .= (($perms & 0x0008) ?
+ (($perms & 0x0400) ? 's' : 'x' ) :
+ (($perms & 0x0400) ? 'S' : '-'));
+
+ // World
+ $info .= (($perms & 0x0004) ? 'r' : '-');
+ $info .= (($perms & 0x0002) ? 'w' : '-');
+ $info .= (($perms & 0x0001) ?
+ (($perms & 0x0200) ? 't' : 'x' ) :
+ (($perms & 0x0200) ? 'T' : '-'));
+ return $info;
+ }
+ function getnumchmodfromh($mode) {
+ $realmode = "";
+ $legal = array("","w","r","x","-");
+ $attarray = preg_split("//",$mode);
+ for($i=0;$i'0','r'=>'4','w'=>'2','x'=>'1');
+ $mode = strtr($mode,$trans);
+ $newmode = '';
+ $newmode .= $mode[0]+$mode[1]+$mode[2];
+ $newmode .= $mode[3]+$mode[4]+$mode[5];
+ $newmode .= $mode[6]+$mode[7]+$mode[8];
+ return $newmode;
+ }
+ function group($file){
+ $gid=@filegroup($file);
+ if( ! $gid )
+ return false;
+ if( !function_exists('posix_getgrgid') )
+ return $gid;
+ $grouparray=posix_getgrgid($gid);
+ return $grouparray['name'];
+ }
+
+ function copy($source,$destination,$overwrite=false){
+ if( $overwrite && $this->exists($destination) )
+ return false;
+ return copy($source,$destination);
+ }
+
+ function move($source,$destination,$overwrite=false){
+ //Possible to use rename()
+ if( $this->copy($source,$destination,$overwrite) && $this->exists($destination) ){
+ $this->delete($source);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function delete($file,$recursive=false){
+ $file = str_replace('\\','/',$file); //for win32, occasional problems deleteing files otherwise
+ if( $this->is_file($file) )
+ return @unlink($file);
+ if( !$recursive )
+ return @rmdir($file);
+ $filelist = $this->dirlist($file);
+
+ $retval = true;
+ foreach($filelist as $filename=>$fileinfo){
+ if( ! $this->delete($file.'/'.$filename,$recursive) )
+ $retval = false;
+ }
+ if( ! @rmdir($file) )
+ return false;
+ return $retval;
+ }
+
+ function exists($file){
+ return @file_exists($file);
+ }
+
+ function is_file($file){
+ return @is_file($file);
+ }
+
+ function is_dir($path){
+ return @is_dir($path);
+ }
+
+ function is_readable($file){
+ return @is_readable($file);
+ }
+
+ function is_writable($file){
+ return @is_writable($file);
+ }
+
+ function atime($file){
+ return @fileatime($file);
+ }
+
+ function mtime($file){
+ return @filemtime($file);
+ }
+ function size($file){
+ return @filesize($file);
+ }
+
+ function touch($file,$time=0,$atime=0){
+ if($time==0)
+ $time = time();
+ if($atime==0)
+ $atime = time();
+ return @touch($file,$time,$atime);
+ }
+
+ function mkdir($path,$chmod=false,$chown=false,$chgrp=false){
+ if( ! $chmod)
+ $chmod = $this->permission;
+
+ if( !@mkdir($path,$chmod) )
+ return false;
+ if( $chown )
+ $this->chown($path,$chown);
+ if( $chgrp )
+ $this->chgrp($path,$chgrp);
+ return true;
+ }
+
+ function rmdir($path,$recursive=false){
+ if( ! $recursive )
+ return @rmdir($path);
+ //recursive:
+ $filelist = $this->dirlist($path);
+ foreach($filelist as $filename=>$det){
+ if ( '/' == substr($filename,-1,1) )
+ $this->rmdir($path.'/'.$filename,$recursive);
+ @rmdir($entry);
+ }
+ return @rmdir($path);
+ }
+
+ function dirlist($path,$incdot=false,$recursive=false){
+ if( $this->is_file($path) ){
+ $limitFile = basename($path);
+ $path = dirname($path);
+ } else {
+ $limitFile = false;
+ }
+ if( ! $this->is_dir($path) )
+ return false;
+
+ $ret = array();
+ $dir = dir($path);
+ while (false !== ($entry = $dir->read())) {
+ $struc = array();
+ $struc['name'] = $entry;
+
+ if( '.' == $struc['name'][0] && !$incdot)
+ continue;
+ if( $limitFile && $struc['name'] != $limitFile)
+ continue;
+
+ $struc['perms'] = $this->gethchmod($path.'/'.$entry);
+ $struc['permsn'] = $this->getnumchmodfromh($struc['perms']);
+ $struc['number'] = false;
+ $struc['owner'] = $this->owner($path.'/'.$entry);
+ $struc['group'] = $this->group($path.'/'.$entry);
+ $struc['size'] = $this->size($path.'/'.$entry);
+ $struc['lastmodunix']= $this->mtime($path.'/'.$entry);
+ $struc['lastmod'] = date('M j',$struc['lastmodunix']);
+ $struc['time'] = date('h:i:s',$struc['lastmodunix']);
+ $struc['type'] = $this->is_dir($path.'/'.$entry) ? 'folder' : 'file';
+ if('folder' == $struc['type'] ){
+ $struc['files'] = array();
+
+ if( $incdot ){
+ //We're including the doted starts
+ if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder
+ if ($recursive)
+ $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
+ }
+ } else { //No dots
+ if ($recursive)
+ $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
+ }
+ }
+ //File
+ $ret[$struc['name']] = $struc;
+ }
+ $dir->close();
+ unset($dir);
+ return $ret;
+ }
+
+ function __destruct(){
+ return;
+ }
+}
?>
\ No newline at end of file
diff --git a/wp-admin/includes/class-wp-filesystem-ftpext.php b/wp-admin/includes/class-wp-filesystem-ftpext.php
index b0cfbf7e7f..cf40a76eed 100644
--- a/wp-admin/includes/class-wp-filesystem-ftpext.php
+++ b/wp-admin/includes/class-wp-filesystem-ftpext.php
@@ -1,410 +1,410 @@
-FTP_ASCII,
- 'css'=>FTP_ASCII,
- 'txt'=>FTP_ASCII,
- 'js'=>FTP_ASCII,
- 'html'=>FTP_ASCII,
- 'htm'=>FTP_ASCII,
- 'xml'=>FTP_ASCII,
-
- 'jpg'=>FTP_BINARY,
- 'png'=>FTP_BINARY,
- 'gif'=>FTP_BINARY,
- 'bmp'=>FTP_BINARY
- );
-
+FTP_ASCII,
+ 'css'=>FTP_ASCII,
+ 'txt'=>FTP_ASCII,
+ 'js'=>FTP_ASCII,
+ 'html'=>FTP_ASCII,
+ 'htm'=>FTP_ASCII,
+ 'xml'=>FTP_ASCII,
+
+ 'jpg'=>FTP_BINARY,
+ 'png'=>FTP_BINARY,
+ 'gif'=>FTP_BINARY,
+ 'bmp'=>FTP_BINARY
+ );
+
function WP_Filesystem_FTPext($opt='') {
$this->errors = new WP_Error();
-
- //Check if possible to use ftp functions.
+
+ //Check if possible to use ftp functions.
if ( ! extension_loaded('ftp') ) {
- $this->errors->add('no_ftp_ext', __('The ftp PHP extension is not available'));
- return false;
+ $this->errors->add('no_ftp_ext', __('The ftp PHP extension is not available'));
+ return false;
}
- // Set defaults:
- if ( empty($opt['port']) )
- $this->options['port'] = 21;
- else
- $this->options['port'] = $opt['port'];
-
+ // Set defaults:
+ if ( empty($opt['port']) )
+ $this->options['port'] = 21;
+ else
+ $this->options['port'] = $opt['port'];
+
if ( empty($opt['hostname']) )
- $this->errors->add('empty_hostname', __('FTP hostname is required'));
- else
- $this->options['hostname'] = $opt['hostname'];
-
- if ( isset($opt['base']) && ! empty($opt['base']) )
- $this->wp_base = $opt['base'];
-
- // Check if the options provided are OK.
+ $this->errors->add('empty_hostname', __('FTP hostname is required'));
+ else
+ $this->options['hostname'] = $opt['hostname'];
+
+ if ( isset($opt['base']) && ! empty($opt['base']) )
+ $this->wp_base = $opt['base'];
+
+ // Check if the options provided are OK.
if ( empty ($opt['username']) )
- $this->errors->add('empty_username', __('FTP username is required'));
- else
- $this->options['username'] = $opt['username'];
-
- if ( empty ($opt['password']) )
- $this->errors->add('empty_password', __('FTP password is required'));
- else
- $this->options['password'] = $opt['password'];
-
- $this->options['ssl'] = ( !empty($opt['ssl']) );
+ $this->errors->add('empty_username', __('FTP username is required'));
+ else
+ $this->options['username'] = $opt['username'];
+
+ if ( empty ($opt['password']) )
+ $this->errors->add('empty_password', __('FTP password is required'));
+ else
+ $this->options['password'] = $opt['password'];
+
+ $this->options['ssl'] = ( !empty($opt['ssl']) );
}
-
- function connect(){
- if ( $this->options['ssl'] && function_exists('ftp_ssl_connect') ) {
- $this->link = ftp_ssl_connect($this->options['hostname'], $this->options['port'],$this->timeout);
- } else {
- $this->link = ftp_connect($this->options['hostname'], $this->options['port'],$this->timeout);
+
+ function connect(){
+ if ( $this->options['ssl'] && function_exists('ftp_ssl_connect') ) {
+ $this->link = ftp_ssl_connect($this->options['hostname'], $this->options['port'],$this->timeout);
+ } else {
+ $this->link = ftp_connect($this->options['hostname'], $this->options['port'],$this->timeout);
}
-
+
if ( ! $this->link ) {
- $this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %1$s:%2$s'), $this->options['hostname'], $this->options['port']));
- return false;
+ $this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %1$s:%2$s'), $this->options['hostname'], $this->options['port']));
+ return false;
}
-
+
if ( ! ftp_login($this->link,$this->options['username'], $this->options['password']) ) {
$this->errors->add('auth', sprintf(__('Username/Password incorrect for %s'), $this->options['username']));
- return false;
+ return false;
}
- return true;
+ return true;
}
-
- function setDefaultPermissions($perm){
- $this->permission = $perm;
+
+ function setDefaultPermissions($perm){
+ $this->permission = $perm;
}
-
- function find_base_dir($base = '.',$echo = false){
- if( empty( $base ) || '.' == $base ) $base = $this->cwd();
- if( empty( $base ) ) $base = '/';
- if( '/' != substr($base, -1) ) $base .= '/';
-
- if($echo) echo __('Changing to ') . $base .'
';
- if( false === ftp_chdir($this->link, $base) )
- return false;
-
- if( $this->exists($base . 'wp-settings.php') ){
- if($echo) echo __('Found ') . $base . 'wp-settings.php
';
- $this->wp_base = $base;
- return $this->wp_base;
- }
-
- if( strpos(ABSPATH, $base) > 0)
- $arrPath = split('/',substr(ABSPATH,strpos(ABSPATH, $base)));
- else
- $arrPath = split('/',ABSPATH);
-
- for($i = 0; $i <= count($arrPath); $i++)
- if( $arrPath[ $i ] == '' ) unset( $arrPath[ $i ] );
-
- foreach($arrPath as $key=>$folder){
- if( $this->is_dir($base . $folder) ){
- if($echo) echo __('Found ') . $folder . ' ' . __('Changing to') . ' ' . $base . $folder . '/
';
- return $this->find_base_dir($base . $folder . '/',$echo);
- }
- }
-
- if( $base == '/' )
- return false;
- //If we get this far, somethings gone wrong, change to / and restart the process.
- return $this->find_base_dir('/',$echo);
- }
- function get_base_dir($base = '.'){
- if( empty($this->wp_base) )
- $this->wp_base = $this->find_base_dir($base);
- return $this->wp_base;
- }
- function get_contents($file,$type='',$resumepos=0){
- if( empty($type) ){
- $extension = substr(strrchr($filename, "."), 1);
- $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII;
- }
- $temp = tmpfile();
- if( ! @ftp_fget($this->link,$temp,$file,$type,$resumepos) )
- return false;
- fseek($temp, 0); //Skip back to the start of the file being written to
- $contents = '';
- while (!feof($temp)) {
- $contents .= fread($temp, 8192);
- }
- fclose($temp);
- return $contents;
- }
- function get_contents_array($file){
- return explode("\n",$this->get_contents($file));
- }
- function put_contents($file,$contents,$type=''){
- if( empty($type) ){
- $extension = substr(strrchr($filename, "."), 1);
- $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII;
- }
- $temp = tmpfile();
- fwrite($temp,$contents);
- fseek($temp, 0); //Skip back to the start of the file being written to
- $ret = @ftp_fput($this->link,$file,$temp,$type);
- fclose($temp);
- return $ret;
- }
- function cwd(){
- return ftp_pwd($this->link);
- }
- function chgrp($file,$group,$recursive=false){
- return false;
- }
- function chmod($file,$mode=false,$recursive=false){
- if( ! $mode )
- $mode = $this->permission;
- if( ! $mode )
- return false;
- if( ! $this->exists($file) )
- return false;
- if( ! $recursive || ! $this->is_dir($file) ){
- if (!function_exists('ftp_chmod'))
- return ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file));
- return ftp_chmod($this->link,$mode,$file);
- }
- //Is a directory, and we want recursive
- $filelist = $this->dirlist($file);
- foreach($filelist as $filename){
- $this->chmod($file.'/'.$filename,$mode,$recursive);
- }
- return true;
- }
- function chown($file,$owner,$recursive=false){
- return false;
- }
- function owner($file){
- $dir = $this->dirlist($file);
- return $dir[$file]['owner'];
- }
- function getchmod($file){
- $dir = $this->dirlist($file);
- return $dir[$file]['permsn'];
- }
- function gethchmod($file){
- //From the PHP.net page for ...?
- $perms = $this->getchmod($file);
- if (($perms & 0xC000) == 0xC000) {
- // Socket
- $info = 's';
- } elseif (($perms & 0xA000) == 0xA000) {
- // Symbolic Link
- $info = 'l';
- } elseif (($perms & 0x8000) == 0x8000) {
- // Regular
- $info = '-';
- } elseif (($perms & 0x6000) == 0x6000) {
- // Block special
- $info = 'b';
- } elseif (($perms & 0x4000) == 0x4000) {
- // Directory
- $info = 'd';
- } elseif (($perms & 0x2000) == 0x2000) {
- // Character special
- $info = 'c';
- } elseif (($perms & 0x1000) == 0x1000) {
- // FIFO pipe
- $info = 'p';
- } else {
- // Unknown
- $info = 'u';
- }
-
- // Owner
- $info .= (($perms & 0x0100) ? 'r' : '-');
- $info .= (($perms & 0x0080) ? 'w' : '-');
- $info .= (($perms & 0x0040) ?
- (($perms & 0x0800) ? 's' : 'x' ) :
- (($perms & 0x0800) ? 'S' : '-'));
-
- // Group
- $info .= (($perms & 0x0020) ? 'r' : '-');
- $info .= (($perms & 0x0010) ? 'w' : '-');
- $info .= (($perms & 0x0008) ?
- (($perms & 0x0400) ? 's' : 'x' ) :
- (($perms & 0x0400) ? 'S' : '-'));
-
- // World
- $info .= (($perms & 0x0004) ? 'r' : '-');
- $info .= (($perms & 0x0002) ? 'w' : '-');
- $info .= (($perms & 0x0001) ?
- (($perms & 0x0200) ? 't' : 'x' ) :
- (($perms & 0x0200) ? 'T' : '-'));
- return $info;
- }
- function getnumchmodfromh($mode) {
- $realmode = "";
- $legal = array("","w","r","x","-");
- $attarray = preg_split("//",$mode);
- for($i=0;$i'0','r'=>'4','w'=>'2','x'=>'1');
- $mode = strtr($mode,$trans);
- $newmode = '';
- $newmode .= $mode[0]+$mode[1]+$mode[2];
- $newmode .= $mode[3]+$mode[4]+$mode[5];
- $newmode .= $mode[6]+$mode[7]+$mode[8];
- return $newmode;
- }
- function group($file){
- $dir = $this->dirlist($file);
- return $dir[$file]['group'];
- }
- function copy($source,$destination,$overwrite=false){
- if( ! $overwrite && $this->exists($destination) )
- return false;
- $content = $this->get_contents($source);
- $this->put_contents($destination,$content);
- }
- function move($source,$destination,$overwrite=false){
- return ftp_rename($this->link,$source,$destination);
- }
-
- function delete($file,$recursive=false) {
- if ( $this->is_file($file) )
- return ftp_delete($this->link,$file);
- if ( !$recursive )
- return ftp_rmdir($this->link,$file);
- $filelist = $this->dirlist($file);
- foreach ($filelist as $filename => $fileinfo) {
- $this->delete($file.'/'.$filename,$recursive);
+
+ function find_base_dir($base = '.',$echo = false){
+ if( empty( $base ) || '.' == $base ) $base = $this->cwd();
+ if( empty( $base ) ) $base = '/';
+ if( '/' != substr($base, -1) ) $base .= '/';
+
+ if($echo) echo __('Changing to ') . $base .'
';
+ if( false === ftp_chdir($this->link, $base) )
+ return false;
+
+ if( $this->exists($base . 'wp-settings.php') ){
+ if($echo) echo __('Found ') . $base . 'wp-settings.php
';
+ $this->wp_base = $base;
+ return $this->wp_base;
}
- return ftp_rmdir($this->link,$file);
+
+ if( strpos(ABSPATH, $base) > 0)
+ $arrPath = split('/',substr(ABSPATH,strpos(ABSPATH, $base)));
+ else
+ $arrPath = split('/',ABSPATH);
+
+ for($i = 0; $i <= count($arrPath); $i++)
+ if( $arrPath[ $i ] == '' ) unset( $arrPath[ $i ] );
+
+ foreach($arrPath as $key=>$folder){
+ if( $this->is_dir($base . $folder) ){
+ if($echo) echo __('Found ') . $folder . ' ' . __('Changing to') . ' ' . $base . $folder . '/
';
+ return $this->find_base_dir($base . $folder . '/',$echo);
+ }
+ }
+
+ if( $base == '/' )
+ return false;
+ //If we get this far, somethings gone wrong, change to / and restart the process.
+ return $this->find_base_dir('/',$echo);
}
-
- function exists($file){
+ function get_base_dir($base = '.'){
+ if( empty($this->wp_base) )
+ $this->wp_base = $this->find_base_dir($base);
+ return $this->wp_base;
+ }
+ function get_contents($file,$type='',$resumepos=0){
+ if( empty($type) ){
+ $extension = substr(strrchr($filename, "."), 1);
+ $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII;
+ }
+ $temp = tmpfile();
+ if( ! @ftp_fget($this->link,$temp,$file,$type,$resumepos) )
+ return false;
+ fseek($temp, 0); //Skip back to the start of the file being written to
+ $contents = '';
+ while (!feof($temp)) {
+ $contents .= fread($temp, 8192);
+ }
+ fclose($temp);
+ return $contents;
+ }
+ function get_contents_array($file){
+ return explode("\n",$this->get_contents($file));
+ }
+ function put_contents($file,$contents,$type=''){
+ if( empty($type) ){
+ $extension = substr(strrchr($filename, "."), 1);
+ $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII;
+ }
+ $temp = tmpfile();
+ fwrite($temp,$contents);
+ fseek($temp, 0); //Skip back to the start of the file being written to
+ $ret = @ftp_fput($this->link,$file,$temp,$type);
+ fclose($temp);
+ return $ret;
+ }
+ function cwd(){
+ return ftp_pwd($this->link);
+ }
+ function chgrp($file,$group,$recursive=false){
+ return false;
+ }
+ function chmod($file,$mode=false,$recursive=false){
+ if( ! $mode )
+ $mode = $this->permission;
+ if( ! $mode )
+ return false;
+ if( ! $this->exists($file) )
+ return false;
+ if( ! $recursive || ! $this->is_dir($file) ){
+ if (!function_exists('ftp_chmod'))
+ return ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file));
+ return ftp_chmod($this->link,$mode,$file);
+ }
+ //Is a directory, and we want recursive
+ $filelist = $this->dirlist($file);
+ foreach($filelist as $filename){
+ $this->chmod($file.'/'.$filename,$mode,$recursive);
+ }
+ return true;
+ }
+ function chown($file,$owner,$recursive=false){
+ return false;
+ }
+ function owner($file){
+ $dir = $this->dirlist($file);
+ return $dir[$file]['owner'];
+ }
+ function getchmod($file){
+ $dir = $this->dirlist($file);
+ return $dir[$file]['permsn'];
+ }
+ function gethchmod($file){
+ //From the PHP.net page for ...?
+ $perms = $this->getchmod($file);
+ if (($perms & 0xC000) == 0xC000) {
+ // Socket
+ $info = 's';
+ } elseif (($perms & 0xA000) == 0xA000) {
+ // Symbolic Link
+ $info = 'l';
+ } elseif (($perms & 0x8000) == 0x8000) {
+ // Regular
+ $info = '-';
+ } elseif (($perms & 0x6000) == 0x6000) {
+ // Block special
+ $info = 'b';
+ } elseif (($perms & 0x4000) == 0x4000) {
+ // Directory
+ $info = 'd';
+ } elseif (($perms & 0x2000) == 0x2000) {
+ // Character special
+ $info = 'c';
+ } elseif (($perms & 0x1000) == 0x1000) {
+ // FIFO pipe
+ $info = 'p';
+ } else {
+ // Unknown
+ $info = 'u';
+ }
+
+ // Owner
+ $info .= (($perms & 0x0100) ? 'r' : '-');
+ $info .= (($perms & 0x0080) ? 'w' : '-');
+ $info .= (($perms & 0x0040) ?
+ (($perms & 0x0800) ? 's' : 'x' ) :
+ (($perms & 0x0800) ? 'S' : '-'));
+
+ // Group
+ $info .= (($perms & 0x0020) ? 'r' : '-');
+ $info .= (($perms & 0x0010) ? 'w' : '-');
+ $info .= (($perms & 0x0008) ?
+ (($perms & 0x0400) ? 's' : 'x' ) :
+ (($perms & 0x0400) ? 'S' : '-'));
+
+ // World
+ $info .= (($perms & 0x0004) ? 'r' : '-');
+ $info .= (($perms & 0x0002) ? 'w' : '-');
+ $info .= (($perms & 0x0001) ?
+ (($perms & 0x0200) ? 't' : 'x' ) :
+ (($perms & 0x0200) ? 'T' : '-'));
+ return $info;
+ }
+ function getnumchmodfromh($mode) {
+ $realmode = "";
+ $legal = array("","w","r","x","-");
+ $attarray = preg_split("//",$mode);
+ for($i=0;$i'0','r'=>'4','w'=>'2','x'=>'1');
+ $mode = strtr($mode,$trans);
+ $newmode = '';
+ $newmode .= $mode[0]+$mode[1]+$mode[2];
+ $newmode .= $mode[3]+$mode[4]+$mode[5];
+ $newmode .= $mode[6]+$mode[7]+$mode[8];
+ return $newmode;
+ }
+ function group($file){
+ $dir = $this->dirlist($file);
+ return $dir[$file]['group'];
+ }
+ function copy($source,$destination,$overwrite=false){
+ if( ! $overwrite && $this->exists($destination) )
+ return false;
+ $content = $this->get_contents($source);
+ $this->put_contents($destination,$content);
+ }
+ function move($source,$destination,$overwrite=false){
+ return ftp_rename($this->link,$source,$destination);
+ }
+
+ function delete($file,$recursive=false) {
+ if ( $this->is_file($file) )
+ return ftp_delete($this->link,$file);
+ if ( !$recursive )
+ return ftp_rmdir($this->link,$file);
+ $filelist = $this->dirlist($file);
+ foreach ($filelist as $filename => $fileinfo) {
+ $this->delete($file.'/'.$filename,$recursive);
+ }
+ return ftp_rmdir($this->link,$file);
+ }
+
+ function exists($file){
$list = ftp_rawlist($this->link,$file,false);
- if( ! $list )
- return false;
- return count($list) == 1 ? true : false;
- }
- function is_file($file){
- return $this->is_dir($file) ? false : true;
- }
+ if( ! $list )
+ return false;
+ return count($list) == 1 ? true : false;
+ }
+ function is_file($file){
+ return $this->is_dir($file) ? false : true;
+ }
function is_dir($path){
$cwd = $this->cwd();
if ( ftp_chdir($this->link, $path) ) {
ftp_chdir($this->link, $cwd);
return true;
}
- return false;
- }
- function is_readable($file){
- //Get dir list, Check if the file is writable by the current user??
- return true;
- }
- function is_writable($file){
- //Get dir list, Check if the file is writable by the current user??
- return true;
- }
- function atime($file){
- return false;
- }
- function mtime($file){
- return ftp_mdtm($this->link, $file);
- }
- function size($file){
- return ftp_size($this->link, $file);
- }
- function touch($file,$time=0,$atime=0){
- return false;
- }
- function mkdir($path,$chmod=false,$chown=false,$chgrp=false){
- if( !ftp_mkdir($this->link, $path) )
- return false;
- if( $chmod )
- $this->chmod($chmod);
- if( $chown )
- $this->chown($chown);
- if( $chgrp )
- $this->chgrp($chgrp);
- return true;
- }
- function rmdir($path,$recursive=false){
- if( ! $recursive )
- return ftp_rmdir($this->link, $file);
-
- //TODO: Recursive Directory delete, Have to delete files from the folder first.
- //$dir = $this->dirlist($path);
- //foreach($dir as $file)
-
- }
- function dirlist($path='.',$incdot=false,$recursive=false){
- if( $this->is_file($path) ){
- $limitFile = basename($path);
- $path = dirname($path) . '/';
- } else {
- $limitFile = false;
- }
- //if( ! $this->is_dir($path) )
- // return false;
- $list = ftp_rawlist($this->link,$path,false); //We'll do the recursive part ourseves...
- //var_dump($list);
- if( ! $list )
- return false;
- if( empty($list) )
- return array();
-
- $ret = array();
+ return false;
+ }
+ function is_readable($file){
+ //Get dir list, Check if the file is writable by the current user??
+ return true;
+ }
+ function is_writable($file){
+ //Get dir list, Check if the file is writable by the current user??
+ return true;
+ }
+ function atime($file){
+ return false;
+ }
+ function mtime($file){
+ return ftp_mdtm($this->link, $file);
+ }
+ function size($file){
+ return ftp_size($this->link, $file);
+ }
+ function touch($file,$time=0,$atime=0){
+ return false;
+ }
+ function mkdir($path,$chmod=false,$chown=false,$chgrp=false){
+ if( !ftp_mkdir($this->link, $path) )
+ return false;
+ if( $chmod )
+ $this->chmod($chmod);
+ if( $chown )
+ $this->chown($chown);
+ if( $chgrp )
+ $this->chgrp($chgrp);
+ return true;
+ }
+ function rmdir($path,$recursive=false){
+ if( ! $recursive )
+ return ftp_rmdir($this->link, $file);
+
+ //TODO: Recursive Directory delete, Have to delete files from the folder first.
+ //$dir = $this->dirlist($path);
+ //foreach($dir as $file)
+
+ }
+ function dirlist($path='.',$incdot=false,$recursive=false){
+ if( $this->is_file($path) ){
+ $limitFile = basename($path);
+ $path = dirname($path) . '/';
+ } else {
+ $limitFile = false;
+ }
+ //if( ! $this->is_dir($path) )
+ // return false;
+ $list = ftp_rawlist($this->link,$path,false); //We'll do the recursive part ourseves...
+ //var_dump($list);
+ if( ! $list )
+ return false;
+ if( empty($list) )
+ return array();
+
+ $ret = array();
foreach($list as $line){
- if (substr(strtolower($line), 0, 5) == 'total') continue;
- $struc = array();
+ if (substr(strtolower($line), 0, 5) == 'total') continue;
+ $struc = array();
$current = preg_split("/[\s]+/",$line,9);
- $name_num = count($current) - 1;
- $struc['name'] = str_replace('//','',$current[$name_num]);
-
- if( '.' == $struc['name'][0] && !$incdot)
- continue;
- if( $limitFile && $struc['name'] != $limitFile)
- continue;
-
- $struc['perms'] = $current[0];
- $struc['permsn'] = $this->getnumchmodfromh($current[0]);
- $struc['number'] = $current[1];
- $struc['owner'] = $current[2];
- $struc['group'] = $current[3];
- $struc['size'] = $current[4];
- $struc['lastmod'] = $current[5].' '.$current[6];
- $struc['time'] = $current[7];
-
- $struc['type'] = ('d' == $struc['perms'][0] || 'l' == $struc['perms'][0] ) ? 'folder' : 'file';
- if('folder' == $struc['type'] ){
- $struc['files'] = array();
-
- if( $incdot ){
- //We're including the doted starts
- if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder
- if ($recursive)
- $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
- }
- } else { //No dots
- if ($recursive)
- $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
- }
- }
- //File
- $ret[$struc['name']] = $struc;
+ $name_num = count($current) - 1;
+ $struc['name'] = str_replace('//','',$current[$name_num]);
+
+ if( '.' == $struc['name'][0] && !$incdot)
+ continue;
+ if( $limitFile && $struc['name'] != $limitFile)
+ continue;
+
+ $struc['perms'] = $current[0];
+ $struc['permsn'] = $this->getnumchmodfromh($current[0]);
+ $struc['number'] = $current[1];
+ $struc['owner'] = $current[2];
+ $struc['group'] = $current[3];
+ $struc['size'] = $current[4];
+ $struc['lastmod'] = $current[5].' '.$current[6];
+ $struc['time'] = $current[7];
+
+ $struc['type'] = ('d' == $struc['perms'][0] || 'l' == $struc['perms'][0] ) ? 'folder' : 'file';
+ if('folder' == $struc['type'] ){
+ $struc['files'] = array();
+
+ if( $incdot ){
+ //We're including the doted starts
+ if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder
+ if ($recursive)
+ $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
+ }
+ } else { //No dots
+ if ($recursive)
+ $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
+ }
+ }
+ //File
+ $ret[$struc['name']] = $struc;
}
return $ret;
- }
- function __destruct(){
- if( $this->link )
- ftp_close($this->link);
- }
+ }
+ function __destruct(){
+ if( $this->link )
+ ftp_close($this->link);
+ }
}
-
-?>
+
+?>
diff --git a/wp-admin/includes/class-wp-filesystem-ftpsockets.php b/wp-admin/includes/class-wp-filesystem-ftpsockets.php
index 3a06d574c6..338eda9f7b 100644
--- a/wp-admin/includes/class-wp-filesystem-ftpsockets.php
+++ b/wp-admin/includes/class-wp-filesystem-ftpsockets.php
@@ -1,35 +1,35 @@
-FTP_ASCII,
- 'css'=>FTP_ASCII,
- 'txt'=>FTP_ASCII,
- 'js'=>FTP_ASCII,
- 'html'=>FTP_ASCII,
- 'htm'=>FTP_ASCII,
- 'xml'=>FTP_ASCII,
-
- 'jpg'=>FTP_BINARY,
- 'png'=>FTP_BINARY,
- 'gif'=>FTP_BINARY,
- 'bmp'=>FTP_BINARY
- );
-
- function WP_Filesystem_ftpsockets($opt='') {
- //Check if possible to use ftp functions.
- if( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' )
- return false;
- $this->ftp = new FTP();
+FTP_ASCII,
+ 'css'=>FTP_ASCII,
+ 'txt'=>FTP_ASCII,
+ 'js'=>FTP_ASCII,
+ 'html'=>FTP_ASCII,
+ 'htm'=>FTP_ASCII,
+ 'xml'=>FTP_ASCII,
+
+ 'jpg'=>FTP_BINARY,
+ 'png'=>FTP_BINARY,
+ 'gif'=>FTP_BINARY,
+ 'bmp'=>FTP_BINARY
+ );
+
+ function WP_Filesystem_ftpsockets($opt='') {
+ //Check if possible to use ftp functions.
+ if( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' )
+ return false;
+ $this->ftp = new FTP();
- //Set defaults:
+ //Set defaults:
if ( empty($opt['port']) )
$this->options['port'] = 21;
else
@@ -53,338 +53,338 @@ class WP_Filesystem_ftpsockets{
$this->errors->add('empty_password', __('FTP password is required'));
else
$this->options['password'] = $opt['password'];
- }
+ }
- function connect() {
- if ( ! $this->ftp )
- return false;
-
+ function connect() {
+ if ( ! $this->ftp )
+ return false;
+
if ( ! $this->ftp->connect($this->options['hostname'], $this->options['port'], $this->timeout) ) {
$this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %1$s:%2$s'), $this->options['hostname'], $this->options['port']));
- return false;
+ return false;
}
-
+
if ( ! $this->ftp->login($this->options['username'], $this->options['password']) ) {
$this->errors->add('auth', sprintf(__('Username/Password incorrect for %s'), $this->options['username']));
- return false;
+ return false;
}
-
- return true;
- }
-
- function setDefaultPermissions($perm) {
- $this->permission = $perm;
- }
- function find_base_dir($base = '.',$echo = false) {
- if( empty( $base ) || '.' == $base ) $base = $this->cwd();
- if( empty( $base ) ) $base = '/';
- if( '/' != substr($base, -1) ) $base .= '/';
-
- if($echo) echo __('Changing to ') . $base .'
';
- if( false === $this->ftp->chdir($base) )
- return false;
-
- if( $this->exists($base . 'wp-settings.php') ){
- if($echo) echo __('Found ') . $base . 'wp-settings.php
';
- $this->wp_base = $base;
- return $this->wp_base;
- }
-
- if( strpos(ABSPATH, $base) > 0)
- $arrPath = split('/',substr(ABSPATH,strpos(ABSPATH, $base)));
- else
- $arrPath = split('/',ABSPATH);
-
- for($i = 0; $i <= count($arrPath); $i++)
- if( $arrPath[ $i ] == '' ) unset( $arrPath[ $i ] );
-
- foreach($arrPath as $key=>$folder){
- if( $this->is_dir($base . $folder) ){
- if($echo) echo __('Found ') . $folder . ' ' . __('Changing to') . ' ' . $base . $folder . '/
';
- return $this->find_base_dir($base . $folder . '/',$echo);
- }
- }
-
- if( $base == '/' )
- return false;
- //If we get this far, somethings gone wrong, change to / and restart the process.
- return $this->find_base_dir('/',$echo);
- }
- function get_base_dir($base = '.'){
- if( empty($this->wp_base) )
- $this->wp_base = $this->find_base_dir($base);
- return $this->wp_base;
- }
- function get_contents($file,$type='',$resumepos=0){
- if( empty($type) ){
- $extension = substr(strrchr($filename, "."), 1);
- $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_AUTOASCII;
- }
- $this->ftp->SetType($type);
-
- return $this->ftp->get($file);
- }
- function get_contents_array($file){
- return explode("\n",$this->get_contents($file));
- }
- function put_contents($file,$contents,$type=''){
- if( empty($type) ){
- $extension = substr(strrchr($filename, "."), 1);
- $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII;
- }
- $this->ftp->SetType($type);
-
- $temp = tmpfile();
- fwrite($temp,$contents);
- fseek($temp, 0); //Skip back to the start of the file being written to
- $ret = $this->ftp->put($temp, $file);
- fclose($temp);
- return $ret;
- }
- function cwd(){
- return $this->ftp->pwd();
- }
- function chgrp($file,$group,$recursive=false){
- return false;
- }
- function chmod($file,$mode=false,$recursive=false){
- if( ! $mode )
- $mode = $this->permission;
- if( ! $mode )
- return false;
- //if( ! $this->exists($file) )
- // return false;
- if( ! $recursive || ! $this->is_dir($file) ){
- return $this->ftp->chmod($file,$mode);
- }
- //Is a directory, and we want recursive
- $filelist = $this->dirlist($file);
- foreach($filelist as $filename){
- $this->chmod($file.'/'.$filename,$mode,$recursive);
- }
- return true;
- }
- function chown($file,$owner,$recursive=false){
- return false;
- }
- function owner($file){
- $dir = $this->dirlist($file);
- return $dir[$file]['owner'];
- }
- function getchmod($file){
- $dir = $this->dirlist($file);
- return $dir[$file]['permsn'];
- }
- function gethchmod($file){
- //From the PHP.net page for ...?
- $perms = $this->getchmod($file);
- if (($perms & 0xC000) == 0xC000) {
- // Socket
- $info = 's';
- } elseif (($perms & 0xA000) == 0xA000) {
- // Symbolic Link
- $info = 'l';
- } elseif (($perms & 0x8000) == 0x8000) {
- // Regular
- $info = '-';
- } elseif (($perms & 0x6000) == 0x6000) {
- // Block special
- $info = 'b';
- } elseif (($perms & 0x4000) == 0x4000) {
- // Directory
- $info = 'd';
- } elseif (($perms & 0x2000) == 0x2000) {
- // Character special
- $info = 'c';
- } elseif (($perms & 0x1000) == 0x1000) {
- // FIFO pipe
- $info = 'p';
- } else {
- // Unknown
- $info = 'u';
- }
-
- // Owner
- $info .= (($perms & 0x0100) ? 'r' : '-');
- $info .= (($perms & 0x0080) ? 'w' : '-');
- $info .= (($perms & 0x0040) ?
- (($perms & 0x0800) ? 's' : 'x' ) :
- (($perms & 0x0800) ? 'S' : '-'));
-
- // Group
- $info .= (($perms & 0x0020) ? 'r' : '-');
- $info .= (($perms & 0x0010) ? 'w' : '-');
- $info .= (($perms & 0x0008) ?
- (($perms & 0x0400) ? 's' : 'x' ) :
- (($perms & 0x0400) ? 'S' : '-'));
-
- // World
- $info .= (($perms & 0x0004) ? 'r' : '-');
- $info .= (($perms & 0x0002) ? 'w' : '-');
- $info .= (($perms & 0x0001) ?
- (($perms & 0x0200) ? 't' : 'x' ) :
- (($perms & 0x0200) ? 'T' : '-'));
- return $info;
- }
- function getnumchmodfromh($mode) {
- $realmode = "";
- $legal = array("","w","r","x","-");
- $attarray = preg_split("//",$mode);
- for($i=0;$i'0','r'=>'4','w'=>'2','x'=>'1');
- $mode = strtr($mode,$trans);
- $newmode = '';
- $newmode .= $mode[0]+$mode[1]+$mode[2];
- $newmode .= $mode[3]+$mode[4]+$mode[5];
- $newmode .= $mode[6]+$mode[7]+$mode[8];
- return $newmode;
- }
- function group($file){
- $dir = $this->dirlist($file);
- return $dir[$file]['group'];
- }
- function copy($source,$destination,$overwrite=false){
- if( ! $overwrite && $this->exists($destination) )
- return false;
- $content = $this->get_contents($source);
- $this->put_contents($destination,$content);
- }
- function move($source,$destination,$overwrite=false){
- return $this->ftp->rename($source,$destination);
+ return true;
}
-
- function delete($file,$recursive=false) {
- if ( $this->is_file($file) )
- return $this->ftp->delete($file);
- if ( !$recursive )
- return $this->ftp->rmdir($file);
- $filelist = $this->dirlist($file);
- foreach ($filelist as $filename) {
- $this->delete($file.'/'.$filename,$recursive);
+
+ function setDefaultPermissions($perm) {
+ $this->permission = $perm;
+ }
+
+ function find_base_dir($base = '.',$echo = false) {
+ if( empty( $base ) || '.' == $base ) $base = $this->cwd();
+ if( empty( $base ) ) $base = '/';
+ if( '/' != substr($base, -1) ) $base .= '/';
+
+ if($echo) echo __('Changing to ') . $base .'
';
+ if( false === $this->ftp->chdir($base) )
+ return false;
+
+ if( $this->exists($base . 'wp-settings.php') ){
+ if($echo) echo __('Found ') . $base . 'wp-settings.php
';
+ $this->wp_base = $base;
+ return $this->wp_base;
}
- return $this->ftp->rmdir($file);
+
+ if( strpos(ABSPATH, $base) > 0)
+ $arrPath = split('/',substr(ABSPATH,strpos(ABSPATH, $base)));
+ else
+ $arrPath = split('/',ABSPATH);
+
+ for($i = 0; $i <= count($arrPath); $i++)
+ if( $arrPath[ $i ] == '' ) unset( $arrPath[ $i ] );
+
+ foreach($arrPath as $key=>$folder){
+ if( $this->is_dir($base . $folder) ){
+ if($echo) echo __('Found ') . $folder . ' ' . __('Changing to') . ' ' . $base . $folder . '/
';
+ return $this->find_base_dir($base . $folder . '/',$echo);
+ }
+ }
+
+ if( $base == '/' )
+ return false;
+ //If we get this far, somethings gone wrong, change to / and restart the process.
+ return $this->find_base_dir('/',$echo);
}
-
- function exists($file){
- return $this->ftp->is_exists($file);
- }
- function is_file($file){
- //return $this->ftp->file_exists($file);
- $list = $this->ftp->rawlist($file,'-a');
- if( ! $list )
- return false;
- return ($list[0] == '-');
- }
- function is_dir($path){
- $list = $this->ftp->rawlist($file,'-a');
- if( ! $list )
- return false;
- return true;
- }
- function is_readable($file){
- //Get dir list, Check if the file is writable by the current user??
- return true;
- }
- function is_writable($file){
- //Get dir list, Check if the file is writable by the current user??
- return true;
- }
- function atime($file){
- return false;
- }
- function mtime($file){
- return $this->ftp->mdtm($file);
- }
- function size($file){
- return $this->ftp->filesize($file);
- }
- function touch($file,$time=0,$atime=0){
- return false;
- }
- function mkdir($path,$chmod=false,$chown=false,$chgrp=false){
- if( ! $this->ftp->mkdir($path) )
- return false;
- if( $chmod )
- $this->chmod($chmod);
- if( $chown )
- $this->chown($chown);
- if( $chgrp )
- $this->chgrp($chgrp);
- return true;
- }
- function rmdir($path,$recursive=false){
- if( ! $recursive )
- return $this->ftp->rmdir($file);
- return false;
- //TODO: Recursive Directory delete, Have to delete files from the folder first.
- //$dir = $this->dirlist($path);
- //foreach($dir as $file)
-
- }
- function dirlist($path='.',$incdot=false,$recursive=false){
- if( $this->is_file($path) ){
- $limitFile = basename($path);
- $path = dirname($path) . '/';
- } else {
- $limitFile = false;
- }
- //if( ! $this->is_dir($path) )
- // return false;
- $list = $this->ftp->rawlist($path,'-a');
- //var_dump($list);
- if( ! $list )
- return false;
- if( empty($list) )
- return array();
-
- $ret = array();
- foreach($list as $line){
- $struc = array();
- $current = preg_split("/[\s]+/",$line,9);
- $struc['name'] = str_replace('//','',$current[8]);
-
- if( '.' == $struc['name'][0] && !$incdot)
- continue;
- if( $limitFile && $struc['name'] != $limitFile)
- continue;
-
- $struc['perms'] = $current[0];
- $struc['permsn'] = $this->getnumchmodfromh($current[0]);
- $struc['number'] = $current[1];
- $struc['owner'] = $current[2];
- $struc['group'] = $current[3];
- $struc['size'] = $current[4];
- $struc['lastmod'] = $current[5].' '.$current[6];
- $struc['time'] = $current[7];
-
- $struc['type'] = ('d' == $struc['perms'][0] || 'l' == $struc['perms'][0] ) ? 'folder' : 'file';
- if('folder' == $struc['type'] ){
- $struc['files'] = array();
-
- if( $incdot ){
- //We're including the doted starts
- if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder
- if ($recursive)
- $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
- }
- } else { //No dots
- if ($recursive)
- $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
- }
- }
- //File
- $ret[$struc['name']] = $struc;
- }
- return $ret;
- }
- function __destruct(){
- $this->ftp->quit();
- }
-}
-?>
+ function get_base_dir($base = '.'){
+ if( empty($this->wp_base) )
+ $this->wp_base = $this->find_base_dir($base);
+ return $this->wp_base;
+ }
+ function get_contents($file,$type='',$resumepos=0){
+ if( empty($type) ){
+ $extension = substr(strrchr($filename, "."), 1);
+ $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_AUTOASCII;
+ }
+ $this->ftp->SetType($type);
+
+ return $this->ftp->get($file);
+ }
+ function get_contents_array($file){
+ return explode("\n",$this->get_contents($file));
+ }
+ function put_contents($file,$contents,$type=''){
+ if( empty($type) ){
+ $extension = substr(strrchr($filename, "."), 1);
+ $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII;
+ }
+ $this->ftp->SetType($type);
+
+ $temp = tmpfile();
+ fwrite($temp,$contents);
+ fseek($temp, 0); //Skip back to the start of the file being written to
+ $ret = $this->ftp->put($temp, $file);
+ fclose($temp);
+ return $ret;
+ }
+ function cwd(){
+ return $this->ftp->pwd();
+ }
+ function chgrp($file,$group,$recursive=false){
+ return false;
+ }
+ function chmod($file,$mode=false,$recursive=false){
+ if( ! $mode )
+ $mode = $this->permission;
+ if( ! $mode )
+ return false;
+ //if( ! $this->exists($file) )
+ // return false;
+ if( ! $recursive || ! $this->is_dir($file) ){
+ return $this->ftp->chmod($file,$mode);
+ }
+ //Is a directory, and we want recursive
+ $filelist = $this->dirlist($file);
+ foreach($filelist as $filename){
+ $this->chmod($file.'/'.$filename,$mode,$recursive);
+ }
+ return true;
+ }
+ function chown($file,$owner,$recursive=false){
+ return false;
+ }
+ function owner($file){
+ $dir = $this->dirlist($file);
+ return $dir[$file]['owner'];
+ }
+ function getchmod($file){
+ $dir = $this->dirlist($file);
+ return $dir[$file]['permsn'];
+ }
+ function gethchmod($file){
+ //From the PHP.net page for ...?
+ $perms = $this->getchmod($file);
+ if (($perms & 0xC000) == 0xC000) {
+ // Socket
+ $info = 's';
+ } elseif (($perms & 0xA000) == 0xA000) {
+ // Symbolic Link
+ $info = 'l';
+ } elseif (($perms & 0x8000) == 0x8000) {
+ // Regular
+ $info = '-';
+ } elseif (($perms & 0x6000) == 0x6000) {
+ // Block special
+ $info = 'b';
+ } elseif (($perms & 0x4000) == 0x4000) {
+ // Directory
+ $info = 'd';
+ } elseif (($perms & 0x2000) == 0x2000) {
+ // Character special
+ $info = 'c';
+ } elseif (($perms & 0x1000) == 0x1000) {
+ // FIFO pipe
+ $info = 'p';
+ } else {
+ // Unknown
+ $info = 'u';
+ }
+
+ // Owner
+ $info .= (($perms & 0x0100) ? 'r' : '-');
+ $info .= (($perms & 0x0080) ? 'w' : '-');
+ $info .= (($perms & 0x0040) ?
+ (($perms & 0x0800) ? 's' : 'x' ) :
+ (($perms & 0x0800) ? 'S' : '-'));
+
+ // Group
+ $info .= (($perms & 0x0020) ? 'r' : '-');
+ $info .= (($perms & 0x0010) ? 'w' : '-');
+ $info .= (($perms & 0x0008) ?
+ (($perms & 0x0400) ? 's' : 'x' ) :
+ (($perms & 0x0400) ? 'S' : '-'));
+
+ // World
+ $info .= (($perms & 0x0004) ? 'r' : '-');
+ $info .= (($perms & 0x0002) ? 'w' : '-');
+ $info .= (($perms & 0x0001) ?
+ (($perms & 0x0200) ? 't' : 'x' ) :
+ (($perms & 0x0200) ? 'T' : '-'));
+ return $info;
+ }
+ function getnumchmodfromh($mode) {
+ $realmode = "";
+ $legal = array("","w","r","x","-");
+ $attarray = preg_split("//",$mode);
+ for($i=0;$i'0','r'=>'4','w'=>'2','x'=>'1');
+ $mode = strtr($mode,$trans);
+ $newmode = '';
+ $newmode .= $mode[0]+$mode[1]+$mode[2];
+ $newmode .= $mode[3]+$mode[4]+$mode[5];
+ $newmode .= $mode[6]+$mode[7]+$mode[8];
+ return $newmode;
+ }
+ function group($file){
+ $dir = $this->dirlist($file);
+ return $dir[$file]['group'];
+ }
+ function copy($source,$destination,$overwrite=false){
+ if( ! $overwrite && $this->exists($destination) )
+ return false;
+ $content = $this->get_contents($source);
+ $this->put_contents($destination,$content);
+ }
+ function move($source,$destination,$overwrite=false){
+ return $this->ftp->rename($source,$destination);
+ }
+
+ function delete($file,$recursive=false) {
+ if ( $this->is_file($file) )
+ return $this->ftp->delete($file);
+ if ( !$recursive )
+ return $this->ftp->rmdir($file);
+ $filelist = $this->dirlist($file);
+ foreach ($filelist as $filename) {
+ $this->delete($file.'/'.$filename,$recursive);
+ }
+ return $this->ftp->rmdir($file);
+ }
+
+ function exists($file){
+ return $this->ftp->is_exists($file);
+ }
+ function is_file($file){
+ //return $this->ftp->file_exists($file);
+ $list = $this->ftp->rawlist($file,'-a');
+ if( ! $list )
+ return false;
+ return ($list[0] == '-');
+ }
+ function is_dir($path){
+ $list = $this->ftp->rawlist($file,'-a');
+ if( ! $list )
+ return false;
+ return true;
+ }
+ function is_readable($file){
+ //Get dir list, Check if the file is writable by the current user??
+ return true;
+ }
+ function is_writable($file){
+ //Get dir list, Check if the file is writable by the current user??
+ return true;
+ }
+ function atime($file){
+ return false;
+ }
+ function mtime($file){
+ return $this->ftp->mdtm($file);
+ }
+ function size($file){
+ return $this->ftp->filesize($file);
+ }
+ function touch($file,$time=0,$atime=0){
+ return false;
+ }
+ function mkdir($path,$chmod=false,$chown=false,$chgrp=false){
+ if( ! $this->ftp->mkdir($path) )
+ return false;
+ if( $chmod )
+ $this->chmod($chmod);
+ if( $chown )
+ $this->chown($chown);
+ if( $chgrp )
+ $this->chgrp($chgrp);
+ return true;
+ }
+ function rmdir($path,$recursive=false){
+ if( ! $recursive )
+ return $this->ftp->rmdir($file);
+ return false;
+ //TODO: Recursive Directory delete, Have to delete files from the folder first.
+ //$dir = $this->dirlist($path);
+ //foreach($dir as $file)
+
+ }
+ function dirlist($path='.',$incdot=false,$recursive=false){
+ if( $this->is_file($path) ){
+ $limitFile = basename($path);
+ $path = dirname($path) . '/';
+ } else {
+ $limitFile = false;
+ }
+ //if( ! $this->is_dir($path) )
+ // return false;
+ $list = $this->ftp->rawlist($path,'-a');
+ //var_dump($list);
+ if( ! $list )
+ return false;
+ if( empty($list) )
+ return array();
+
+ $ret = array();
+ foreach($list as $line){
+ $struc = array();
+ $current = preg_split("/[\s]+/",$line,9);
+ $struc['name'] = str_replace('//','',$current[8]);
+
+ if( '.' == $struc['name'][0] && !$incdot)
+ continue;
+ if( $limitFile && $struc['name'] != $limitFile)
+ continue;
+
+ $struc['perms'] = $current[0];
+ $struc['permsn'] = $this->getnumchmodfromh($current[0]);
+ $struc['number'] = $current[1];
+ $struc['owner'] = $current[2];
+ $struc['group'] = $current[3];
+ $struc['size'] = $current[4];
+ $struc['lastmod'] = $current[5].' '.$current[6];
+ $struc['time'] = $current[7];
+
+ $struc['type'] = ('d' == $struc['perms'][0] || 'l' == $struc['perms'][0] ) ? 'folder' : 'file';
+ if('folder' == $struc['type'] ){
+ $struc['files'] = array();
+
+ if( $incdot ){
+ //We're including the doted starts
+ if( '.' != $struc['name'] && '..' != $struc['name'] ){ //Ok, It isnt a special folder
+ if ($recursive)
+ $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
+ }
+ } else { //No dots
+ if ($recursive)
+ $struc['files'] = $this->dirlist($path.'/'.$struc['name'],$incdot,$recursive);
+ }
+ }
+ //File
+ $ret[$struc['name']] = $struc;
+ }
+ return $ret;
+ }
+ function __destruct(){
+ $this->ftp->quit();
+ }
+}
+?>