File "class-wp-filesystem-ftpsockets.php"
Full path: /home/kosmetik/public_html/wp-includes/wp-admin/includes/class-wp-filesystem-ftpsockets.php
File
size: 9.02 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
class WP_Filesystem_ftpsockets extends WP_Filesystem_Base
{
public $ftp;
public function __construct($opt = '')
{
$this->method = 'ftpsockets';
$this->errors = new WP_Error();
if (!(include_once ABSPATH . 'wp-admin/includes/class-ftp.php')) {
return;
}
$this->ftp = new ftp();
if (empty($opt['port'])) {
$this->options['port'] = 21;
} else {
$this->options['port'] = (int) $opt['port'];
}
if (empty($opt['hostname'])) {
$this->errors->add('empty_hostname', __('FTP hostname is required'));
} else {
$this->options['hostname'] = $opt['hostname'];
}
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'];
}
}
public function connect()
{
if (!$this->ftp) {
return false;
}
$this->ftp->setTimeout(FS_CONNECT_TIMEOUT);
if (!$this->ftp->SetServer($this->options['hostname'], $this->options['port'])) {
$this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %s'), $this->options['hostname'] . ':' . $this->options['port']));
return false;
}
if (!$this->ftp->connect()) {
$this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %s'), $this->options['hostname'] . ':' . $this->options['port']));
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;
}
$this->ftp->SetType(FTP_BINARY);
$this->ftp->Passive(true);
$this->ftp->setTimeout(FS_TIMEOUT);
return true;
}
public function get_contents($file)
{
if (!$this->exists($file)) {
return false;
}
$tempfile = wp_tempnam($file);
$temphandle = fopen($tempfile, 'w+');
if (!$temphandle) {
unlink($tempfile);
return false;
}
mbstring_binary_safe_encoding();
if (!$this->ftp->fget($temphandle, $file)) {
fclose($temphandle);
unlink($tempfile);
reset_mbstring_encoding();
return '';
}
reset_mbstring_encoding();
fseek($temphandle, 0);
$contents = '';
while (!feof($temphandle)) {
$contents .= fread($temphandle, 8 * KB_IN_BYTES);
}
fclose($temphandle);
unlink($tempfile);
return $contents;
}
public function get_contents_array($file)
{
return explode("\n", $this->get_contents($file));
}
public function put_contents($file, $contents, $mode = false)
{
$tempfile = wp_tempnam($file);
$temphandle = @fopen($tempfile, 'w+');
if (!$temphandle) {
unlink($tempfile);
return false;
}
mbstring_binary_safe_encoding();
$bytes_written = fwrite($temphandle, $contents);
if (false === $bytes_written || strlen($contents) != $bytes_written) {
fclose($temphandle);
unlink($tempfile);
reset_mbstring_encoding();
return false;
}
fseek($temphandle, 0);
$ret = $this->ftp->fput($file, $temphandle);
reset_mbstring_encoding();
fclose($temphandle);
unlink($tempfile);
$this->chmod($file, $mode);
return $ret;
}
public function cwd()
{
$cwd = $this->ftp->pwd();
if ($cwd) {
$cwd = trailingslashit($cwd);
}
return $cwd;
}
public function chdir($dir)
{
return $this->ftp->chdir($dir);
}
public function chmod($file, $mode = false, $recursive = false)
{
if (!$mode) {
if ($this->is_file($file)) {
$mode = FS_CHMOD_FILE;
} elseif ($this->is_dir($file)) {
$mode = FS_CHMOD_DIR;
} else {
return false;
}
}
if ($recursive && $this->is_dir($file)) {
$filelist = $this->dirlist($file);
foreach ((array) $filelist as $filename => $filemeta) {
$this->chmod($file . '/' . $filename, $mode, $recursive);
}
}
return $this->ftp->chmod($file, $mode);
}
public function owner($file)
{
$dir = $this->dirlist($file);
return $dir[$file]['owner'];
}
public function getchmod($file)
{
$dir = $this->dirlist($file);
return $dir[$file]['permsn'];
}
public function group($file)
{
$dir = $this->dirlist($file);
return $dir[$file]['group'];
}
public function copy($source, $destination, $overwrite = false, $mode = false)
{
if (!$overwrite && $this->exists($destination)) {
return false;
}
$content = $this->get_contents($source);
if (false === $content) {
return false;
}
return $this->put_contents($destination, $content, $mode);
}
public function move($source, $destination, $overwrite = false)
{
return $this->ftp->rename($source, $destination);
}
public function delete($file, $recursive = false, $type = false)
{
if (empty($file)) {
return false;
}
if ('f' === $type || $this->is_file($file)) {
return $this->ftp->delete($file);
}
if (!$recursive) {
return $this->ftp->rmdir($file);
}
return $this->ftp->mdel($file);
}
public function exists($file)
{
$list = $this->ftp->nlist($file);
if (empty($list) && $this->is_dir($file)) {
return true;
}
return !empty($list);
}
public function is_file($file)
{
if ($this->is_dir($file)) {
return false;
}
if ($this->exists($file)) {
return true;
}
return false;
}
public function is_dir($path)
{
$cwd = $this->cwd();
if ($this->chdir($path)) {
$this->chdir($cwd);
return true;
}
return false;
}
public function is_readable($file)
{
return true;
}
public function is_writable($file)
{
return true;
}
public function atime($file)
{
return false;
}
public function mtime($file)
{
return $this->ftp->mdtm($file);
}
public function size($file)
{
return $this->ftp->filesize($file);
}
public function touch($file, $time = 0, $atime = 0)
{
return false;
}
public function mkdir($path, $chmod = false, $chown = false, $chgrp = false)
{
$path = untrailingslashit($path);
if (empty($path)) {
return false;
}
if (!$this->ftp->mkdir($path)) {
return false;
}
if (!$chmod) {
$chmod = FS_CHMOD_DIR;
}
$this->chmod($path, $chmod);
return true;
}
public function rmdir($path, $recursive = false)
{
return $this->delete($path, $recursive);
}
public function dirlist($path = '.', $include_hidden = true, $recursive = false)
{
if ($this->is_file($path)) {
$limit_file = basename($path);
$path = dirname($path) . '/';
} else {
$limit_file = false;
}
mbstring_binary_safe_encoding();
$list = $this->ftp->dirlist($path);
if (empty($list) && !$this->exists($path)) {
reset_mbstring_encoding();
return false;
}
$ret = array();
foreach ($list as $struc) {
if ('.' === $struc['name'] || '..' === $struc['name']) {
continue;
}
if (!$include_hidden && '.' === $struc['name'][0]) {
continue;
}
if ($limit_file && $struc['name'] != $limit_file) {
continue;
}
if ('d' === $struc['type']) {
if ($recursive) {
$struc['files'] = $this->dirlist($path . '/' . $struc['name'], $include_hidden, $recursive);
} else {
$struc['files'] = array();
}
}
if ($struc['islink']) {
$struc['name'] = preg_replace('/(\\s*->\\s*.*)$/', '', $struc['name']);
}
$struc['permsn'] = $this->getnumchmodfromh($struc['perms']);
$ret[$struc['name']] = $struc;
}
reset_mbstring_encoding();
return $ret;
}
public function __destruct()
{
$this->ftp->quit();
}
}