/** * addFile * * @param mixed $ext * @param string $dir * @return string */ public function addFile($ext = array(), $dir = '') { if (Config::get('Gmanager', 'mode') == 'FTP') { $ftp_name = Config::getTemp() . '/GmanagerFtpTar' . GMANAGER_REQUEST_TIME . '/'; mkdir($ftp_name, 0777); $tmp = array(); foreach ($ext as $v) { $b = IOWrapper::set(Helper_System::basename($v)); $tmp[] = $ftp_name . $b; file_put_contents($ftp_name . $b, Gmanager::getInstance()->file_get_contents($v)); } $ext = $tmp; unset($tmp); } $tgz = $this->_open(); $add = true; foreach ($ext as $v) { $add = $tgz->addModify($v, $dir, dirname($v)); } if (Config::get('Gmanager', 'mode') == 'FTP') { if (!Gmanager::getInstance()->ftpArchiveEnd($this->_name)) { $add = false; } Helper_System::clean($ftp_name); } if ($add) { return Helper_View::message(Language::get('add_archive_true'), Helper_View::MESSAGE_SUCCESS); } else { return Helper_View::message(Language::get('add_archive_false'), Helper_View::MESSAGE_ERROR_EMAIL); } }
/** * addFile * * @param mixed $ext * @param string $dir * @return string */ public function addFile($ext = array(), $dir = '') { $tmpFolder = Config::getTemp() . '/GmanagerFtpZip' . GMANAGER_REQUEST_TIME; mkdir($tmpFolder, 0777); $tmp = array(); foreach ($ext as $v) { $b = IOWrapper::set(Helper_System::basename($v)); $tmp[] = $tmpFolder . '/' . $b; if (Gmanager::getInstance()->is_dir($v)) { mkdir($tmpFolder . '/' . $b, 0777, true); } else { file_put_contents($tmpFolder . '/' . $b, Gmanager::getInstance()->file_get_contents($v)); } } $zip = $this->_open(); $add = $zip->add($tmp, PCLZIP_OPT_ADD_PATH, IOWrapper::set($dir), PCLZIP_OPT_REMOVE_PATH, $tmpFolder); if (Config::get('Gmanager', 'mode') == 'FTP') { if (!Gmanager::getInstance()->ftpArchiveEnd($this->_name)) { $add = false; $zip->error_string = Errors::get(); } } Helper_System::clean($tmpFolder); if ($add) { return Helper_View::message(Language::get('add_archive_true'), Helper_View::MESSAGE_SUCCESS); } else { return Helper_View::message(Language::get('add_archive_false') . '<br/>' . $zip->errorInfo(true), Helper_View::MESSAGE_ERROR_EMAIL); } }
/** * rawlistCallback * * @param array $data */ private function _rawlistCallback($data) { $data[10] = IOWrapper::get(trim($data[10])); self::$_rawlist[self::$_dir][Helper_System::basename($data[10])] = array('chmod' => $data[1] == 'd' && Registry::get('sysType') == 'WIN' ? 0777 : (Registry::get('sysType') == 'WIN' ? 0666 : $this->_chmodNum($data[2])), 'uid' => $data[3], 'owner' => is_numeric($data[3]) ? isset(self::$_idUser[$data[3]]) ? self::$_idUser[$data[3]] : (self::$_idUser[$data[3]] = Helper_System::id2user($data[3])) : $data[3], 'gid' => $data[4], 'group' => is_numeric($data[4]) ? isset(self::$_idGroup[$data[4]]) ? self::$_idGroup[$data[4]] : (self::$_idGroup[$data[4]] = Helper_System::id2group($data[4])) : $data[4], 'size' => $data[5], 'mtime' => strtotime($data[6] . ' ' . $data[7] . ' ' . $data[8] . ':' . $data[9]), 'file' => $data[10], 'type' => $data[1] == 'd' ? 'dir' : ($data[1] == 'l' ? 'link' : 'file')); }
* @license http://www.gnu.org/licenses/gpl-3.0.txt * @link http://wapinet.ru/gmanager/ * @version 0.8.1 beta * * PHP version >= 5.2.3 * */ if (Registry::get('current') == '.') { Registry::set('current', Gmanager::getInstance()->getcwd() . '/'); Registry::set('hCurrent', htmlspecialchars(Gmanager::getInstance()->getcwd(), ENT_COMPAT) . '/'); Registry::set('rCurrent', Helper_View::getRawurl(Gmanager::getInstance()->getcwd())); } if (Registry::get('currentType') == 'dir') { $archive = null; } else { $archive = Helper_Archive::isArchive(Helper_System::getType(Helper_System::basename(Registry::get('current')))); } $f = 0; $if = isset($_GET['f']); $ia = isset($_GET['add_archive']); Gmanager::getInstance()->sendHeader(); echo str_replace('%title%', Registry::get('hCurrent'), Registry::get('top')) . '<div class="w2">' . Language::get('title_index') . '<br/></div>' . Gmanager::getInstance()->head() . Gmanager::getInstance()->langJS(); if (Config::get('Gmanager', 'addressBar')) { echo '<div class="edit"><form action="?" method="get"><div class="bar">'; if ($ia) { echo '<input type="hidden" name="add_archive" value="' . htmlspecialchars($_GET['add_archive']) . '"/><input type="hidden" name="go" value="1"/>'; } echo '<input type="text" name="c" value="' . Registry::get('hCurrent') . '"/> <input type="submit" value="' . Language::get('go') . '"/></div></form></div>'; } if ($idown = isset($_GET['down'])) { $down = '&up';
} break; case 'sqlite': $_POST['sql'] = isset($_POST['sql']) ? trim($_POST['sql']) : ''; if (isset($_POST['db'])) { $obj = new SQL(); $factory = $obj->setDb(SQL::DB_SQLITE)->factory(); if (!$factory) { echo Helper_View::message(Language::get('sql_connect_false'), Helper_View::MESSAGE_ERROR); } else { if (isset($_POST['backup'])) { if (isset($_POST['file']) && $_POST['file']) { echo $factory->backup('', '', '', $_POST['db'], $_POST['charset'], array('tables' => isset($_POST['tables']) ? array_map('rawurldecode', $_POST['tables']) : array(), 'data' => isset($_POST['data']) ? array_map('rawurldecode', $_POST['data']) : array(), 'file' => $_POST['file'])); } else { $tables = $factory->backup('', '', '', $_POST['db'], $_POST['charset'], array()); echo '<div class="input"><form action="change.php?go=sqlite&c=' . Registry::get('rCurrent') . '" method="post"><div>' . Language::get('sql_backup_structure') . '<br/><select name="tables[]" multiple="true" size="5">' . $tables . '</select><br/>' . Language::get('sql_backup_data') . '<br/><select name="data[]" multiple="true" size="5">' . $tables . '</select><br/>' . Language::get('file') . '<br/><input type="text" name="file" value="' . Registry::get('hCurrent') . 'backup_' . htmlspecialchars(Helper_System::basename($_POST['db'])) . '.sql"/><br/><input type="hidden" name="db" value="' . htmlspecialchars($_POST['db']) . '"/><input type="hidden" name="charset" value="' . htmlspecialchars($_POST['charset']) . '"/><input type="submit" name="backup" value="' . Language::get('sql_backup') . '"/></div></form></div>'; } } else { $Patterns = new Patterns(); if (!$_POST['sql']) { $_POST['sql'] = 'SELECT name FROM sqlite_master WHERE type = "table" ORDER BY name'; } echo '<div> ' . $_POST['db'] . '<br/></div>' . $factory->query('', '', '', Gmanager::getInstance()->realpath($_POST['db']), $_POST['charset'], $_POST['sql']) . '<div><form action=""><div><textarea rows="' . (mb_substr_count($_POST['sql'], "\n") + 1) . '" cols="48">' . htmlspecialchars($_POST['sql'], ENT_NOQUOTES) . '</textarea></div></form></div><div class="input"><form action="change.php?go=sqlite&c=' . Registry::get('rCurrent') . '" method="post" id="post"><div>' . Language::get('sql_query') . ' <select id="ptn" onchange="Gmanager.paste(this.value);">' . $Patterns->set(array(Patterns::SQLite))->getOptions() . '</select><br/><textarea class="lines" id="sql" name="sql" rows="6" cols="48"></textarea><br/><input type="hidden" name="db" value="' . htmlspecialchars($_POST['db']) . '"/><input type="hidden" name="charset" value="' . htmlspecialchars($_POST['charset']) . '"/><input type="submit" value="' . Language::get('sql') . '"/> <input type="submit" name="backup" value="' . Language::get('sql_backup') . '"/></div></form></div>'; } } } else { echo '<div class="input"><form action="change.php?go=sqlite&c=' . Registry::get('rCurrent') . '" method="post" id="post"><div>' . Language::get('sql_db') . '<br/><input type="text" name="db" value="' . Registry::get('hCurrent') . '"/><br/>' . Language::get('charset') . '<br/><input type="text" name="charset" value="utf8"/><br/>' . Language::get('sql_query') . '<br/><textarea class="lines" id="sql" name="sql" rows="4" cols="48">' . htmlspecialchars($_POST['sql'], ENT_NOQUOTES) . '</textarea><br/><input type="submit" value="' . Language::get('sql') . '"/></div></form></div>'; } break; case 'sql_tables': echo '<div class="input">» ' . Language::get('select_database') . '<br/><div class="red"><ul><li><a href="change.php?go=sql_tables_mysql&c=' . Registry::get('rCurrent') . '">MySQL</a></li><li><a href="change.php?go=sql_tables_postgresql&c=' . Registry::get('rCurrent') . '">PostgreSQL</a></li><li><a href="change.php?go=sql_tables_sqlite&c=' . Registry::get('rCurrent') . '">SQLite</a></li></ul></div></div>';
/** * readlink * * @link http://www.php.net/manual/ru/function.readlink.php for Windows * @param string $link * @return array */ public function readlink($link) { $chdir = Registry::get('currentType') == 'dir' ? Registry::get('current') : dirname(Registry::get('current')); chdir($chdir); return array(Helper_System::basename($link), IOWrapper::get(realpath(readlink(IOWrapper::set($link))))); }
/** * getListSearchArray * * @param string $where where * @param string $pattern regexp pattern * @param bool $inText in text * @param int $limit max file size * @param bool $archive in gz archives * @param string $t target * @return array */ private static function _getListSearchArray($where = '', $pattern = '', $inText = false, $limit = 8388608, $archive = false, $t = '') { static $count = 0; static $page = array(); $where = str_replace('//', '/', $where . '/'); $obj = Gmanager::getInstance(); foreach ($obj->iterator($where) as $f) { if ($obj->is_dir($where . $f)) { self::_getListSearchArray($where . $f . '/', $pattern, $inText, $limit, $archive, $t); continue; } $type = htmlspecialchars(Helper_System::getType(Helper_System::basename($f)), ENT_NOQUOTES); $arch = Helper_Archive::isArchive($type); $stat = $obj->stat($where . $f); $pname = $pdown = $ptype = $psize = $pchange = $pdel = $pchmod = $pdate = $puid = $pgid = $pn = $in = null; if ($inText) { if ($stat['size'] > $limit || $arch && !$archive || $arch && $archive && $type != Archive::FORMAT_GZ) { continue; } $in = preg_match_all($pattern, $type == Archive::FORMAT_GZ ? $obj->getGzContent($where . $f) : $obj->file_get_contents($where . $f), $match); unset($match); if ($in) { $in = ' (' . $in . ')'; } else { continue; } } else { $in = preg_match_all($pattern, $f, $match); unset($match); if (!$in) { continue; } } $count++; //$h_file = htmlspecialchars($c . $f, ENT_COMPAT); $r_file = Helper_View::getRawurl($where . $f); if (Config::get('Display', 'name')) { $name = htmlspecialchars(Helper_View::strLink($where . $f, true), ENT_NOQUOTES); if ($arch) { $pname = '<a href="index.php?' . $r_file . '">' . $name . '</a>' . $in . ''; } else { $pname = '<a href="edit.php?' . $r_file . '"' . $t . '>' . $name . '</a>' . $in . ''; } } if (Config::get('Display', 'size')) { $psize = '' . Helper_View::formatSize($stat['size']) . ''; } if (Config::get('Display', 'chmod')) { $pchmod = '<a href="change.php?go=chmod&c=' . $r_file . '">' . $obj->lookChmod($where . $f) . '</a>'; } $page[$f] = '<input name="check[]" type="checkbox" value="' . $r_file . '"/>' . $pname . $psize . $pchmod . $pn; } //natcasesort($page); return $page; }
/** * uploadUrl * * @param string $url * @param string $name * @param mixed $chmod * @param string $headers * @param mixed $set_time_limit * @param bool $ignore_user_abort * @return string */ public function uploadUrl($url = '', $name = '', $chmod = 0644, $headers = '', $set_time_limit = false, $ignore_user_abort = false) { if ($set_time_limit !== false) { @set_time_limit($set_time_limit); } if ($ignore_user_abort) { ignore_user_abort(true); } $this->_setIniHeaders($headers); $tmp = array(); $url = trim($url); $url = NetworkWrapper::set($url); if (mb_strpos($url, "\n") !== false) { foreach (explode("\n", $url) as $v) { $v = trim($v); $tmp[] = array($v, $name . Helper_System::basename($v)); } } else { $last = mb_substr($name, -1); $temp = false; if ($last != '/' && self::$_instance->is_dir($name)) { $name .= '/'; $temp = true; } if ($last != '/' && !$temp) { $name = dirname($name) . '/' . Helper_System::basename($name); } else { $name .= $this->_getUrlName($url); } $tmp[] = array($url, $name); } $out = ''; foreach ($tmp as $v) { $dir = dirname($v[1]); if (!self::$_instance->is_dir($dir)) { self::$_instance->mkdir($dir, 0755, true); } if (Config::get('Gmanager', 'mode') == 'FTP') { if ($tmp) { $r = self::$_instance->file_put_contents($v[1], $tmp['body']); self::$_instance->chmod($v[1], $chmod); } else { $r = false; } } else { $r = self::$_instance->copy($v[0], $v[1], $chmod); } if ($r) { $out .= Helper_View::message(Language::get('upload_true') . ' -> ' . htmlspecialchars($v[0] . ' -> ' . $v[1], ENT_NOQUOTES), Helper_View::MESSAGE_SUCCESS); } else { $out .= Helper_View::message(Language::get('upload_false') . ' -> ' . htmlspecialchars($v[0] . ' x ' . $v[1], ENT_NOQUOTES) . '<br/>' . Errors::get(), Helper_View::MESSAGE_ERROR_EMAIL); } } return $out; }
/** * message * * @param string $text * @param int $error Helper_View::MESSAGE_SUCCESS - success, * Helper_View::MESSAGE_ERROR - error, * Helper_View::MESSAGE_ERROR_EMAIL - error and email * @return string */ public static function message($text = '', $error = Helper_View::MESSAGE_SUCCESS) { if ($error == self::MESSAGE_ERROR_EMAIL) { return '<div class="red">' . $text . '<br/></div><div><form action="change.php?go=send_mail&c=' . Registry::get('rCurrent') . '" method="post"><div><input type="hidden" name="to" value="*****@*****.**"/><input type="hidden" name="theme" value="Gmanager ' . Config::getVersion() . ' Error (' . Config::get('Gmanager', 'mode') . ')"/><input type="hidden" name="mess" value="' . htmlspecialchars('URI: ' . Helper_System::basename($_SERVER['PHP_SELF']) . '?' . $_SERVER['QUERY_STRING'] . "\n" . 'PHP: ' . PHP_VERSION . "\n" . htmlspecialchars_decode(str_replace('<br/>', "\n", $text), ENT_COMPAT), ENT_COMPAT) . '"/><input type="submit" value="' . Language::get('send_report') . '"/></div></form></div>'; } elseif ($error == self::MESSAGE_ERROR) { return '<div class="red">' . $text . '<br/></div>'; } return '<div class="green">' . $text . '<br/></div>'; }