$file) {
$file_ext = pathinfo($file, PATHINFO_EXTENSION);
if (in_array($file_ext, $autoinstall_ext)) {
$autoinstall[$i] = $autoinstall_dir . $file;
}
else {
unset($autoinstall[$i]);
}
}
}
// installation folder
if (!$standalone_inst) {
$INSTALL_FOLDER = join(strstr(__FILE__, "/") ? "/" : "\\", array_slice(preg_split("/[\/\\\]+/", __FILE__), 0, -1)) . (strstr(__FILE__, "/") ? "/" : "\\");
}
else {
$INSTALL_FOLDER = join(strstr(__FILE__, "/") ? "/" : "\\", array_slice(preg_split("/[\/\\\]+/", __FILE__), 0, 0)) . (strstr(__FILE__, "/") ? "/" : "\\");
}
$INSTALL_FOLDER = nc_standardize_path_to_folder($INSTALL_FOLDER);
$_SERVER['DOCUMENT_ROOT'] = nc_standardize_path_to_folder($_SERVER['DOCUMENT_ROOT']);
if (!strstr($INSTALL_FOLDER, $_SERVER['DOCUMENT_ROOT'])) {
$INSTALL_FOLDER = rtrim($_SERVER['DOCUMENT_ROOT'], '/') . $INSTALL_FOLDER;
}
// main NetCat folder
if (!$standalone_inst) {
$NETCAT_FOLDER = nc_standardize_path_to_folder(realpath($INSTALL_FOLDER . '../'));
}
else {
$NETCAT_FOLDER = nc_standardize_path_to_folder(realpath($INSTALL_FOLDER));
}
// custom installation folder
$CUSTOM_FOLDER = str_replace(rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/', '', $NETCAT_FOLDER);
// normalize path
if (strlen(trim($CUSTOM_FOLDER, '/'))) {
$CUSTOM_FOLDER = '/' . trim($CUSTOM_FOLDER, '/') . '/';
}
else {
$CUSTOM_FOLDER = '';
}
if (nc_post_get('pwd')) {
$_SESSION['pwd'] = nc_post_get('pwd');
}
if (nc_post_get('isNaked') && nc_post_get('isNaked')) {
switch (true) {
case nc_post_get('get_current_distrib') && nc_post_get('get_current_distrib'):
$distribs = array();
$current_dir = opendir('.');
while ($file = readdir($current_dir)) {
if (strpos($file, '.') !== 0) {
$tmp = (array)explode('.', $file);
$ext = array_pop($tmp);
if (nc_func_enabled('exec') && !nc_is_windows()) {
if ($ext != 'gz' && $ext != 'tgz') {
continue;
}
}
else {
if ($ext != 'zip') {
continue;
}
}
$distribs[] = $file;
}
}
if (!empty($distribs)) {
$html = "
Имя файла:
";
foreach ($distribs as $distrib) {
$html .= "
$distrib ";
}
$html .= "
";
}
else {
$html = "Дистрибутивов не найдено";
}
echo $html;
break;
}
exit;
}
define('NETCAT', 'netcat.ru');
define('INSTALL_GET_INFO_URL', 'http://netcat.ru/download/distrib/latest/info.php');
define('INSTALL_DESIGN_SRC', 'http://netcat.ru/setup/layouts/');
// unlimit time
@set_time_limit(0);
header("Content-type: text/html; charset=utf-8");
error_reporting(E_ALL);
$action = nc_post_get('action');
$ajax = false;
switch ($action) {
case 0:
nc_html_beg();
echo nc_html_status_bar(array("'color': '#444', 'opacity': 1", "можно приступать"));
echo "Вас приветствует установщик системы управления сайтами NetCat . Сейчас я протестирую ваш сервер на совместимость с NetCat, после чего установлю систему, и вы сможете начать работу. Вы можете ознакомиться с нашими системными требованиями . На втором шаге проверки мне потребуется доступ к базе данных MySQL.";
echo nc_html_form(1, 'Приступить к проверке');
break;
case 1:
if (!$ajax) {
nc_html_beg();
}
// Проверка настроек сервера: основных и дополнительных
$php_version = phpversion();
$logHeader =
'--------------------------------------------------' . PHP_EOL .
'Дата ' . date("d.m.Y") . PHP_EOL .
'--------------------------------------------------' . PHP_EOL .
'Установка NetCat' . PHP_EOL .
'--------------------------------------------------';
nc_write_log($logHeader, false);
nc_write_log("Этап №" . $action . ": Начало проверки параметров хостинга.");
nc_write_log("Текущая версия PHP: " . $php_version);
$errors = array();
$notices = array();
if (version_compare($php_version, "5.3.0") == '-1') {
$errors['phpversion'] = "Версия PHP должна быть не ниже 5.3.0.";
nc_write_log("Ошибка: " . $errors['phpversion']);
}
// проверка значений обязательных директив в php.ini
$arr_ini = array(
'allow_url_fopen' => 1,
'safe_mode' => 0,
'short_open_tag' => 1,
'zend.ze1_compatibility_mode' => 0
);
foreach ($arr_ini as $key => $value) {
if (intval(ini_get($key)) != $value) {
if (strtolower(ini_get($key)) != ($value ? 'on' : 'off')) {
echo $key . " - " . $value;
$errors[$key] = "Необходимо " . ($value ? "включить " : "отключить ") . "параметр " . $key . ".";
nc_write_log("Ошибка: " . $errors[$key]);
}
}
}
if (intval(ini_get('memory_limit')) < 24) {
$errors['memory_limit'] = "Необходимо увеличить параметр memory_limit.";
nc_write_log("Ошибка: " . $errors['memory_limit']);
}
// 1 необязательная директива
if (intval(ini_get('mbstring.func_overload')) != 0) {
$notices['mbstring.func_overload'] = "Необходимо выключить параметр mbstring.func_overload.";
nc_write_log("Предупреждение: " . $notices['mbstring.func_overload']);
}
$extensions_name = array(
'mysql' => 'MySQL',
'session' => 'Session',
'mbstring' => 'MBstring',
'iconv' => 'iconv',
'tokenizer' => 'Tokenizer',
'ctype' => 'Ctype',
'dom' => 'DOM',
'json' => 'JSON',
'libxml' => 'libxml',
'simplexml' => 'SimpleXML',
'curl' => 'cURL',
'gmp' => 'GMP'
);
// проверка наличия обязательных расширений
$arr_ext = array('session', 'mysql');
foreach ($arr_ext as $ext) {
if (!extension_loaded($ext)) {
$errors[$ext] = "Не хватает расширения " . (isset($extensions_name[$ext]) ? $extensions_name[$ext] : $ext) . ".";
nc_write_log("Ошибка: " . $errors[$ext]);
}
}
// проверка наличия "необязательных" расширений
$arr_ext_opt = array('ctype', 'curl', 'dom', 'gd', 'iconv', 'json', 'libxml', 'mbstring', 'simplexml', 'gmp', 'tokenizer');
foreach ($arr_ext_opt as $ext) {
if (!extension_loaded($ext)) {
$notices[$ext] = "Не хватает расширения " . (isset($extensions_name[$ext]) ? $extensions_name[$ext] : $ext) . ".";
nc_write_log("Предупреждение: " . $notices[$ext]);
}
else if ($ext == 'gd') {
if (function_exists('gd_info')) {
$gd = gd_info();
preg_match('/\d/', $gd['GD Version'], $match);
$gd = $match[0];
if ($gd < 2) {
$notices['gd'] = "Расширения gd имеет версию ниже 2.0.0.";
nc_write_log("Предупреждение: " . $notices['gd']);
}
}
else {
$notices['gd'] = "Не удалось выяснить версию расширения gd.";
nc_write_log("Предупреждение: " . $notices['gd']);
}
}
}
$dir = dirname($_SERVER['PHP_SELF']);
$test_dir = "testdirtestdir";
if (!@mkdir($test_dir)) {
$errors['mkdir'] = "Нет прав на создание директорий.";
nc_write_log("Ошибка: " . $errors['mkdir']);
}
if (!is_writable($test_dir)) {
$errors['is_writable'] = "Нет прав на изменение директорий.";
nc_write_log("Ошибка: " . $errors['is_writable']);
}
if (!@rmdir($test_dir)) {
$errors['rmdir'] = "Нет прав на удаление директорий.";
nc_write_log("Ошибка: " . $errors['rmdir']);
}
if (empty($errors)) {
if (empty($notices)) {
nc_write_log("Этап №1: Проверка параметров завершена. Все параметры подходят.");
}
if (!empty($notices)) {
nc_write_log("Этап №1: Проверка параметров завершена.");
}
$result = nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': '#444', 'opacity': 1", "можно начинать"), false, array(1, 0));
$result .= "Ваш хостинг" . (empty($notices) ? " прекрасно" : "") . " подходит для работы NetCat. Теперь я проверю базу данных MySQL. Введите параметры доступа к ней. Если вы их не знаете, обратитесь к сотруднику службы поддержки или системному администратору. В случае, когда вы используете обычный хостинг, эти параметры, скорее всего, были присланы вам по электронной почте после регистрации на сайте хостинг-провайдера.";
if (!empty($notices)) {
$result .= " Эти предупреждения нужно учесть, чтобы обеспечить корректную работу системы в будущем:" . join(" ", $notices) . "
";
$result .= "Тем не менее система может быть установлена, но её функциональность может быть ограничена.";
}
$result .= "";
}
else {
$result = nc_html_status_bar(array("'color': 'red', 'opacity': 1", "возникли проблемы!"));
$result .= "" . join(" ", $errors) . " Эти проблемы не позволяют использовать NetCat на вашем хостинге. Если вы не можете решить их самостоятельно, перешлите их описание сотруднику технической поддержки или системному администратору. Извините, но это зависит не от меня. Я очень надеюсь, что эти проблемы можно решить, и тогда установку можно будет произвести еще раз. ";
}
echo $result;
break;
case 2:
// Проверка настроек БД
if (!$ajax) {
nc_html_beg();
}
nc_write_log("Этап №" . $action . ": Начало проверки БД.");
$error = "";
$LinkID = nc_connect_db();
// проверка соединения с БД
if (!$LinkID) {
$error = "Нет соединение с указанной БД. MySQL ошибка: " . mysql_error();
nc_write_log($error);
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'red', 'opacity': 1", "возникли проблемы!"), false, array(1, 0));
echo "Не удалось произвести подключение к указанной БД, возможно были указаны не все параметры подключения. Проверьте правильность и повторите попытку.";
echo nc_html_form(1, "Вернуться и повторить");
break;
}
else {
nc_write_log("Соединение с БД успешно установлено.");
}
// проверка версии MySQL
if (version_compare(mysql_get_server_info(), "4.1.0") == '-1') {
$error = "Версия MySQL ниже требуемой. Обратитесь, пожалуйста, к системному администратору или хостинг-провайдеру для решения этой проблемы.";
nc_write_log($error);
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'red', 'opacity': 1", "возникли проблемы!"), false, array(1, 0));
echo $error;
break;
}
// проверка прав заданного пользователя на действия в БД
if (!nc_check_user_grants()) {
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'red', 'opacity': 1", "возникли проблемы!"), false, array(1, 0));
echo "Указанный вами пользователь не имеет прав записи в базу данных. Может, есть какой-то другой? Обратитесь в службу поддержки вашего хостинг-провайдера или к системному администратору, чтобы решить эту проблему.";
echo nc_html_form(1, 'Вернуться');
break;
}
// найдены таблицы NetCat
$deltables = nc_post_get('deltables');
if ($deltables) {
$repeatTables = nc_repeat_tables();
foreach ($repeatTables as $d_t) {
$query = "DROP TABLE `" . $d_t . "`";
nc_query($query);
}
}
if (nc_repeat_tables()) {
$error = "В указанной БД найдены таблицы CMS NetCat.";
nc_write_log($error);
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'red', 'opacity': 1", "внимание!"), false, array(1, 0));
echo "В указанной вами базе данных уже есть таблицы, которые хочет создать установщик. Хотите удалить их и продолжить установку?";
echo nc_html_form(2, 'Удалить и продолжить', " ");
break;
}
nc_write_log("Этап №" . $action . ": Проверка параметров БД успешно завершена.");
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': '#444', 'opacity': 1", "осталось совсем немного"), array(1, 1));
echo nc_post_get('demodistr') ? nc_html_form(3, 'Продолжить', 'Сейчас я установлю бесплатную версию системы, которая будет работать 60 дней, после чего нужно будет приобрести полноценный вариант. ') : nc_html_choice($standalone_inst);
break;
case 3:
/*if (!$ajax && (file_get_contents('http://netcat.ru/netcat/modules/default/get_distr_version.php?reg_num=' . +$_REQUEST['regnum']) < 5)) {
html_beg();
echo "";
html_end();
exit;
}*/
// Ввод настроек для установки
if (!$ajax) {
nc_html_beg();
}
nc_write_log("Этап №" . $action . ": Настройки установки.");
$errors = array();
if (!nc_post_get('demodistr') && !(nc_post_get('code') || nc_post_get('regnum'))) {
nc_write_log('Не выбран дистрибутив для установки или не введены данные по коммерческой версии системы.');
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': 'red', 'opacity': 1", "возникла проблема!"), array(1, 1));
echo "Не выбран дистрибутив для установки или введены не все данные по коммерческой версии системы. Вернитесь и выберите какую-либо из предложенных версий системы.";
echo nc_html_form(2, 'Вернуться');
break;
}
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': '#444', 'opacity': 1", "последний вопрос"), array(1, 1));
echo "" . nc_html_settings($standalone_inst) . "
";
break;
case 4:
// Установка выбранной редакции
if (!$ajax) {
nc_html_beg();
}
nc_write_log("Этап №" . $action . ": Установка дистрибутива.");
$errors = array();
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': '#444', 'opacity': 1", "устанавливаем систему"), array(1, 1));
echo "Установка может занять от нескольких секунд до нескольких минут, все зависит от производительности вашего сервера.
";
@ob_flush();
@flush();
$notify['success'] = "";
$notify['error'] = "";
echo "Разворачиваю базу данных... ";
@ob_flush();
@flush();
if (!nc_install_db()) {
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': 'red', 'opacity': 1", "возникла проблема!"), array(1, 1));
$errors['db'] = "При установке базы данных возникла проблема.";
nc_write_log($errors['db']);
echo $notify['error'];
$message['db'] = $errors['db'];
echo " ";
echo $message['db'];
echo nc_html_form(4, 'Повторить');
break;
}
echo $notify['success'];
@ob_flush();
@flush();
$errors['db'] = "База данных успешно развернута.";
nc_write_log($errors['db']);
echo "";
@ob_flush();
@flush();
// update vars.inc.php
nc_write_varsinc($NETCAT_FOLDER, $CUSTOM_FOLDER);
// update .htaccess
nc_change_htaccess($NETCAT_FOLDER, $CUSTOM_FOLDER);
echo nc_html_form('5', 'Завершить установку');
break;
case 41:
// Загрузка выбранной редакции
if (!$ajax) {
nc_html_beg();
}
nc_write_log("Этап №" . $action . ": Загрузка и распаковка выбранной редакции.");
$errors = array();
$distr_dir = rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/';
if (!nc_installer_check_perm($distr_dir)) {
nc_write_log('У директории для установки не хватает прав на запись файлов');
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': 'red', 'opacity': 1", "возникла проблема!"), array(1, 1));
echo "У директории для установки не хватает прав на запись файлов. Проставьте права 777 на директорию установки и повторите установку";
echo nc_html_form(41, 'Повторить');
break;
}
if (!nc_check_domain_available(NETCAT)) {
$errors['rmdir'] = str_replace('%url%', NETCAT, "Нет соединения с %url%.");
nc_write_log($errors['rmdir']);
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': 'red', 'opacity': 1", "возникла проблема!"), array(1, 1));
echo $errors['rmdir'] . " Установка системы невозможна.";
break;
}
// найдены файлы NetCat
$delfiles = nc_post_get('delfiles');
if ($delfiles) {
$catch_nc_files = nc_repeat_files($distr_dir);
foreach ($catch_nc_files as $item) {
$file = nc_standardize_path_to_file($distr_dir . '/' . $item);
if (is_dir($file)) {
nc_clear_dir($file);
nc_write_log('Папка ' . $file . ' была удалена');
}
else {
@unlink($file);
nc_write_log('Файл ' . $file . ' был удалён');
}
}
}
if (nc_repeat_files($distr_dir)) {
nc_write_log('В директории для установки уже содержатся файлы или папки, которые хочет установить NetCat');
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': 'red', 'opacity': 1", "внимание!"), array(1, 1));
echo "В указанной Вами директории уже есть файлы, которые хочет создать установщик. Хотите удалить их и продолжить установку?";
echo nc_html_form(41, 'Удалить и продолжить', " ");
break;
}
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': '#000', 'opacity': 1", "в процессе"), array(1, 1));
@ob_flush();
@flush();
echo "Установка может занять от нескольких секунд до нескольких минут, все зависит от скорости вашего соединения с Интернетом.
";
@ob_flush();
@flush();
$notify['success0'] = "";
$notify['error0'] = "";
$notify['success1'] = "";
$notify['error1'] = "";
$notify['success2'] = "";
$notify['error2'] = "";
echo "Скачиваю... ";
@ob_flush();
@flush();
$get_info_params = array(
'format' => (nc_func_enabled('exec') && !nc_is_windows()) ? 'tgz' : 'zip',
);
nc_write_log('Выбрана компрессия ' . $get_info_params['format']);
if (nc_post_get('demodistr') && !(nc_post_get('code') || nc_post_get('regnum'))) {
$is_trial = true;
$get_info_params['edition'] = nc_post_get('demodistr');
}
else {
$is_trial = false;
$get_info_params['regnum'] = nc_post_get('regnum');
$get_info_params['code'] = nc_post_get('code');
}
$file_info = json_decode(file_get_contents(INSTALL_GET_INFO_URL . '?' . http_build_query($get_info_params, null, '&')), true);
if (!$file_info || $file_info['error'] || !$file_info['url'] || !$file_info['md5']) {
if (!$file_info) {
$errors['load'] = 'Не получен ответ с сервера.';
$message['load'] = 'Не получен ответ с сервера. Пожалуйста, повторите установку.';
}
elseif ($is_trial) {
$errors['load'] = 'Выбрана некорректная редакция системы.';
$message['load'] = 'Выбрана редакция системы, для которой отсутствуют файлы установки. Пожалуйста, повторите установку, выбрав другую редакцию.';
}
else {
$errors['load'] = 'Регистрационный код и/или ключ активации неверные.';
$message['load'] = 'Не существует такого сочетания лицензии и ключа активации. Проверьте правильность введённых вами данных и повторите установку.';
}
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': 'red', 'opacity': 1", "возникла проблема!"), array(1, 1));
nc_write_log($errors['load']);
echo " ";
echo $message['load'];
echo nc_html_form(2, 'Повторить');
break;
}
else {
$filename = basename($file_info['url']);
$file_md5 = $file_info['md5'];
$src = fopen($file_info['url'], 'r');
$dst = fopen($distr_dir . $filename, 'w');
while (!feof($src)) {
fwrite($dst, fread($src, 4096));
}
fclose($dst);
fclose($src);
}
if (md5_file($distr_dir . $filename) == $file_md5) {
echo $notify['success0'];
@ob_flush();
@flush();
$errors['file_md5'] = "Архив с дистрибутивом успешно скачан.";
nc_write_log($errors['file_md5']);
}
else {
echo $notify['error0'];
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': 'red', 'opacity': 1", "возникла проблема!"), array(1, 1));
$errors['file_md5'] = "При скачивании архива возникла проблема. Контрольная сумма скачанного архива не совпадает с оригинальной. Попробуйте повторить процедуру установки снова.";
nc_write_log($errors['file_md5']);
$message['file_md5'] = $errors['file_md5'];
echo "";
echo $message['file_md5'];
echo nc_html_form(41, 'Повторить');
break;
}
echo "Распаковываю архив... ";
@ob_flush();
@flush();
nc_write_log('Файл для распаковки: ' . $filename);
nc_write_log('Директория для распаковки: ' . $distr_dir);
if (nc_unzip($filename, $distr_dir)) {
echo $notify['success1'];
@ob_flush();
@flush();
$errors['unzip'] = "Архив " . $filename . " был успешно распакован.";
nc_write_log($errors['unzip']);
}
else {
echo $notify['error1'];
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': 'red', 'opacity': 1", "возникла проблема!"), array(1, 1));
$errors['unzip'] = "Ошибка распаковки файла " . $filename . ". Проверьте, есть ли права на запись файлов в директории архива, есть ли свободное место на жестком диске и не поврежден ли архив.";
nc_write_log($errors['unzip']);
$message['upzip'] = $errors['unzip'];
echo "";
echo $message['upzip'];
echo nc_html_form(41, 'Повторить');
break;
}
echo "Разворачиваю базу данных... ";
@ob_flush();
@flush();
if (!nc_install_db('install/sql/')) {
echo nc_html_status_bar(array("'color': 'green', 'opacity': 1", "всё отлично!"), array("'color': 'green', 'opacity': 1", "всё прекрасно!"), array("'color': 'red', 'opacity': 1", "возникла проблема!"), array(1, 1));
$errors['db'] = "При установке базы данных возникла проблема.";
nc_write_log($errors['db']);
echo $notify['error2'];
$message['db'] = $errors['db'];
echo "";
echo $message['db'];
echo nc_html_form(41, 'Повторить');
break;
}
echo $notify['success2'];
@ob_flush();
@flush();
$errors['db'] = "База данных успешно развернута.";
nc_write_log($errors['db']);
echo "";
@ob_flush();
@flush();
// update vars.inc.php
nc_write_varsinc($NETCAT_FOLDER, $CUSTOM_FOLDER);
// update .htaccess
nc_change_htaccess($NETCAT_FOLDER, $CUSTOM_FOLDER);
echo nc_html_form('5', 'Завершить установку');
break;
case 5:
if (count($autoinstall)) {
require_once $NETCAT_FOLDER . 'vars.inc.php';
require $ROOT_FOLDER . "connect_io.php";
$nc_core->modules->load_env("", false, true, true);
foreach ($autoinstall as $file) {
$result = $nc_core->backup->import($file, array('save_ids' => false));
}
}
// NetCat установлен
if (!$ajax) {
nc_html_beg();
}
$dir = $_SERVER['HTTP_HOST'] . $CUSTOM_FOLDER . '/';
$dir = preg_replace('#/{2,}$#', '/', $dir);
$result = nc_html_status_bar(
array("'color': 'green', 'opacity': 1", "всё отлично!"),
array("'color': 'green', 'opacity': 1", "всё прекрасно!"),
array("'color': 'green', 'opacity': 1", "готово!"),
array(1, 1)
);
$result .= "Ура, NetCat установлен, теперь вы можете начать работу. Смотрите: " .
"" .
" " .
"Обязательно удалите папку install с сервера! ";
echo $result;
nc_mail_to_user($dir);
// clear session
unset($_SESSION['pwd']);
break;
}
nc_html_end();
function nc_repeat_files($distr_dir) {
$nc_files = array(
"images",
"install",
"netcat",
"netcat_cache",
"netcat_dump",
"netcat_files",
"netcat_template",
"netcat_trash",
".htaccess",
"favicon.ico",
"index.php",
"vars.inc.php"
);
return array_intersect($nc_files, scandir($distr_dir));
}
function nc_html_beg() {
// Для оффлайн установки из архива
$jquery = '../netcat_template/jquery/jquery.min.js';
if (!file_exists($jquery)) {
$jquery = '//code.jquery.com/jquery-latest.js';
}
echo <<
Установка NetCat
Установка CMS NetCat
Проверка хостинга
можно приступать
→
Проверка базы данных
еще не производилась
→
Установка NetCat
сначала все проверим
HEREDOC;
}
function nc_html_end() {
$html = "
Служба технической поддержки и по работе с клиентами: +7 (495) 783-60-21,
support@netcat.ru
";
echo $html;
}
function nc_html_status_bar($array1 = array(), $array2 = array(), $array3 = array(), $array4 = array()) {
return "";
}
function nc_html_form($action, $button, $opt = '') {
global $ajax;
$html = "";
return $html;
}
function nc_query($query) {
global $LinkID;
$res = mysql_query($query, $LinkID);
if (mysql_error()) {
print mysql_error() . "\nQuery: $query \n";
return false;
}
else {
return $res;
}
}
function nc_results($query = '', $output = 'object', $col = '') {
if ($query) {
$result = nc_query($query);
}
if ($result == false) {
return false;
}
switch ($output) {
case 'column':
while ($row = mysql_fetch_assoc($result)) {
$last_result[] = $row[$col];
}
break;
case 'array':
while ($row = mysql_fetch_row($result)) {
$last_result[] = $row;
}
break;
case 'row':
while ($row = mysql_fetch_assoc($result)) {
$last_result = $row;
}
break;
case 'var':
$var = mysql_fetch_row($result);
$last_result = $var[0];
break;
case 'object':
default:
$last_result = $result;
break;
}
return $last_result;
}
function nc_post_get($param) {
if (empty($_GET) && empty($_POST)) {
return false;
}
if ($param) {
return array_key_exists($param, $_GET) ? $_GET[$param] : (array_key_exists($param, $_POST) ? $_POST[$param] : "");
}
else {
return array_merge($_POST, $_GET);
}
}
function nc_connect_db() {
global $LinkID;
$host = nc_post_get('host');
$user = nc_post_get('user');
$pass = nc_post_get('pass');
$dbname = nc_post_get('dbname');
$LinkID = @mysql_connect($host, $user, $pass);
if (!$LinkID) {
return false;
}
if (!mysql_select_db($dbname, $LinkID)) {
nc_write_log('Не удалось произвести подключение к указанной БД');
return false;
}
mysql_query("SET NAMES 'utf8'");
mysql_query("ALTER DATABASE `" . $dbname . "` DEFAULT CHARACTER SET 'utf8'");
return $LinkID;
}
function nc_check_user_grants() {
$sql_create = "CREATE TABLE test_table (ID int(11) NOT NULL, FIO varchar(128) NOT NULL)";
$sql_drop = "DROP TABLE `test_table`";
$error = false;
if (!(nc_query($sql_create) && nc_query($sql_drop))) {
$error = true;
}
if ($error) {
return false;
}
else {
return true;
}
}
function nc_html_form_demo($standalone_inst) {
if (!$standalone_inst) {
$html = "
Выберите редакцию NetCat:";
$html .= "";
$html .= "
";
}
else {
$html = "
Выберите редакцию NetCat:";
$html .= nc_html_form_demo_item('Standard', 'standard', 'rgb(38, 144, 207)', 'Подходит для несложных веб-проектов, сайтов-визиток.');
$html .= nc_html_form_demo_item('Business', 'business', 'rgb(253, 204, 109)', 'Оптимальный вариант для небольшого интернет-магазина или корпоративного сайта.');
$html .= nc_html_form_demo_item('Corporate', 'corporate', 'rgb(82, 95, 103)', 'Отлично подходит для больших сложных корпоративных сайтов.');
$html .= nc_html_form_demo_item('E-commerce', 'ecommerce', 'rgb(240, 125, 34)', 'Прекрасный выбор для больших и функционально сложных интернет-магазинов и торговых систем.');
$html .= nc_html_form_demo_item('Extra', 'extra', 'rgb(204, 51, 0);', 'Самая полная редакция NetCat, для крупных порталов и нестандартных веб-проектов.');
$html .= "
";
}
return $html;
}
function nc_html_form_demo_item($name, $id, $color, $description) {
$html = "
";
return $html;
}
function nc_html_form_license() {
$html = "
";
return $html;
}
function nc_html_choice($standalone_inst) {
$html = "Сейчас я установлю и настрою систему NetCat. Перед этим хотелось бы определиться, ставим ли мы демо-версию (бесплатную версию системы, которая будет работать 60 дней, после чего нужно будет приобрести полноценный вариант) или коммерческую версию (в этом случае у вас должен быть регистрационный номер и ключ активации). Сравнить редакции и приобрести NetCat вы можете здесь .
";
$html .= nc_html_form(3, 'Продолжить', nc_html_form_demo($standalone_inst) . nc_html_form_license());
return $html;
}
function nc_html_design() {
global $autoinstall;
$result = "Варианты установки:
Установить минимальный набор
Выбрать комплектацию системы вручную
Установить систему с готовыми сайтами и данными
";
$result .= "
";
return $autoinstall ? "{$result}
" : $result;
}
function nc_html_settings($standalone_inst) {
return nc_html_form(($standalone_inst ? 41 : 4), 'Установить NetCat', nc_html_design() . nc_html_distrib() . nc_html_config());
}
function nc_html_distrib() {
$html = "
";
return $html;
}
/*function choose_install_dir() {
return null;
}*/
function nc_html_config() {
$html = "
Выслать параметры доступа на e-mail:
";
//$html .= choose_install_dir();
return $html;
}
function nc_check_domain_available($domain) {
$response = '';
if (extension_loaded('curl')) {
$curlInit = curl_init($domain);
curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curlInit, CURLOPT_HEADER, true);
curl_setopt($curlInit, CURLOPT_NOBODY, true);
curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curlInit);
curl_close($curlInit);
}
else {
$response = file_get_contents("http://" . $domain);
}
if ($response) {
return true;
}
else {
return false;
}
}
function nc_standardize_path_to_file($path) {
return rtrim(nc_standardize_path_to_folder($path), '/');
}
function nc_standardize_path_to_folder($path) {
$path = str_replace('\\', '/', $path);
while (!(strpos($path, '//') === false)) {
$path = str_replace('//', '/', $path);
}
return rtrim($path, '/') . '/';
}
function nc_install_db($dir = 'sql/', $level = 0) {
global $autoinstall;
if (!$level) {
nc_connect_db();
}
$content = false;
$all = false;
// При наличии автоустановочных дампов ставим минимальный дистрибутив
$install_type = $autoinstall ? 0 : nc_post_get('have_site');
$system_arr = array();
$module_arr = array();
// clear system
$system_arr[0] = array('core', 'version');
// custom system
$system_arr[1] = array();
// full system
$system_arr[2] = array('classificators', 'components', 'widgets');
switch ($install_type) {
case 1:
$custom_arr = array('custom_system_classificators', 'custom_system_components', 'custom_system_widgets');
foreach ($custom_arr as $row) {
if (nc_post_get($row)) {
$system_arr[1][] = str_replace('custom_system_', '', $row);
}
}
if (nc_post_get('custom_system_content')) {
$content = true;
$system_arr[1] = array('classificators', 'components', 'widgets');
}
nc_write_log('Установка кастомизированного наполнения');
break;
case 2:
$content = true;
$all = true;
nc_write_log('Установка полного дистрибутива');
break;
}
$version_arr = array('');
for ($i = 0; $i <= $install_type; $i++):
foreach ($system_arr[$i] as $row):
foreach ($version_arr as $ver) {
$file_name = $row . $ver . '.sql';
$file = nc_standardize_path_to_file(dirname(__FILE__) . '/' . $dir . $file_name);
if (file_exists($file)) {
if (!nc_exec_sql($file)) {
nc_write_log('Возможно система уже установлена: ' . $file);
return false;
}
}
}
endforeach;
endfor;
// collect all modules
$file = nc_standardize_path_to_file(dirname(__FILE__) . '/' . $dir);
if (file_exists($file)) {
if ($handle = opendir($file)) {
while (false !== ($entry = readdir($handle))) {
if (strpos($entry, 'module_') === 0) {
$module_arr[] = $entry;
}
}
closedir($handle);
}
sort($module_arr);
}
// install modules db
foreach ($module_arr as $file_name) {
// для установки напрямую из репозитория без ошибок:
if ($file_name == 'module_netshop__basic.sql' && in_array('module_netshop__full.sql', $module_arr)) {
continue;
}
$file = nc_standardize_path_to_file(dirname(__FILE__) . '/' . $dir . $file_name);
if (file_exists($file)) {
if (!nc_exec_sql($file)) {
nc_write_log('Возможно модуль уже установлен: ' . $file);
return false;
}
}
}
if (!$level) {
if ($all || $content) {
// main content
nc_install_db($dir . 'content/', 1);
// site
if ($all || nc_post_get('custom_system_content_site')) {
nc_install_db($dir . 'content/site/', 2);
}
// shop
if ($all || nc_post_get('custom_system_content_shop')) {
nc_install_db($dir . 'content/shop/', 2);
}
// site_mobile
if ($all || nc_post_get('custom_system_content_site_mobile')) {
nc_install_db($dir . 'content/site_mobile/', 2);
}
// adaptive
if ($all || nc_post_get('custom_system_content_adaptive')) {
nc_install_db($dir . 'content/adaptive/', 2);
}
// longpage
if ($all || nc_post_get('custom_system_content_longpage')) {
nc_install_db($dir . 'content/longpage/', 2);
}
// shortpage
if ($all || nc_post_get('custom_system_content_shortpage')) {
nc_install_db($dir . 'content/shortpage/', 2);
}
}
nc_update_db();
nc_write_log('Распаковка базы данных прошла успешно.');
}
return true;
}
function nc_update_db() {
if (nc_post_get('demodistr')) {
$nc47976400764121497450652a10251140849b947a48ee4e73049438777a4917ba6a4 = date("Y-m-d 00:00:00", time() + 60 * 24 * 60 * 60);
$key = "nc63968534304df688ffedc8ca2e3f59f4a26c255b010e5bc647121dca79e55017726";
global $standalone_inst;
if ($standalone_inst) {
if ($file_data = @file_get_contents('install/index.php')) {
preg_match("/[\'\"](nc[a-z0-9]{50,100})[\'\"]/", $file_data, $matches);
if (isset($matches[1])) {
$key = $matches[1];
}
}
}
$nc66633889950dc1f73c5d27e692b9d6bea1ccf88c82dcd3a2f30e98dfade9649f8ed = sha1("Net_^^_Cat" . $nc47976400764121497450652a10251140849b947a48ee4e73049438777a4917ba6a4 . $key . substr($nc47976400764121497450652a10251140849b947a48ee4e73049438777a4917ba6a4, 7, 3));
nc_query("INSERT INTO `Settings` (`Key`, `Value`) VALUES ('InstallationID', '" . $nc66633889950dc1f73c5d27e692b9d6bea1ccf88c82dcd3a2f30e98dfade9649f8ed . "'), ('InstallationDateOut', '" . $nc47976400764121497450652a10251140849b947a48ee4e73049438777a4917ba6a4 . "')");
}
$date = date("Y-m-d H:i:s");
$first_catalogue = (int)mysql_result(nc_query("SELECT MIN(`Catalogue_ID`) FROM `Catalogue`"), 0);
$sql = array(
"UPDATE `Settings` SET `Value` = '" . mysql_real_escape_string(nc_post_get('regnum')) . "', `Module` = 'system' WHERE `Key` = 'ProductNumber'",
"UPDATE `Settings` SET `Value` = '" . mysql_real_escape_string(nc_post_get('code')) . "', `Module` = 'system' WHERE `Key` = 'Code'",
"UPDATE `Settings` SET `Value` = 'admin', `Module` = 'system' WHERE `Key` = 'SpamFromName'",
"UPDATE `Settings` SET `Value` = '" . mysql_real_escape_string(nc_post_get('email')) . "', `Module` = 'system' WHERE `Key` = 'SpamFromEmail'",
"UPDATE `Settings` SET `Value` = '" . mysql_real_escape_string(md5(nc_post_get('regnum') . srand((double)microtime() * 1000000))) . "', `Module` = 'system' WHERE `Key` = 'SecretKey'",
"UPDATE `Catalogue` SET `Created` = '$date' ",
"UPDATE `Subdivision` SET `Created` = '$date' ",
"UPDATE `Sub_Class` SET `Created` = '$date' ",
"UPDATE `User` SET `Created` = '$date' ",
"UPDATE `SystemMessage` SET `Date` = '$date' ",
"UPDATE `User` SET `Password` = '" . md5(isset($_SESSION['pwd']) ? $_SESSION['pwd'] : '') . "', Email = '" . mysql_real_escape_string(nc_post_get('email')) . "', Login = 'admin', ForumName = 'admin', FullName = 'admin', InsideAdminAccess = 1 WHERE User_ID = 1",
"UPDATE `Catalogue` SET `Domain` = '" . mysql_real_escape_string($_SERVER['HTTP_HOST']) . "' WHERE `Catalogue_ID` = $first_catalogue ");
foreach ($sql as $query) {
nc_query($query);
}
}
function nc_get_cattables_for_lower_case() {
return array_map('strtolower', nc_get_cattables());
}
function nc_get_cattables() {
$cattables = array('Banner_CampaignBanner', 'Banner_CampaignZone', 'Banner_Log',
'Banner_StatsBanner', 'Banner_StatsCampaign', 'Banner_StatsReferer',
'Banner_StatsZone', 'Catalogue', 'Class', 'Classificator', 'CronTasks',
'Field', 'Log', 'MailTmp', 'Module', 'Module_Catalog', 'Patch', 'Permission', 'PermissionGroup',
'Poll_Protect', 'Redirect', 'Redirect_Group', 'Settings', 'Stats_Attendance', 'Stats_Browser',
'Stats_IP', 'Stats_Log', 'Stats_OS', 'Stats_Popularity', 'Stats_Referer',
'Stats_Phrases', 'Stats_Geo', 'Stats_Openstat_Counters', 'Sub_Class', 'Subdivision', 'Subscriber',
'SystemMessage', 'System_Table', 'Template', 'TemplateNav', 'User', 'User_Group',
'Captchas', 'Captchas_Settings', 'Stats_IP2Country', 'Widget_Class', 'Widget', 'Widget_Field', 'Block_Widget',
/* Таблицы 3.0 */
'Calendar_Settings', 'Classificator_BlogCommentsAccess',
'Classificator_BlogMessagesAccess', 'Classificator_BlogPermissionGroup',
'Tags_Data', 'Tags_Message', 'Tags_Weight',
/* Еще таблицы */
'Filetable', 'Forum_categories', 'Forum_forums', 'Forum_permgroup',
'Forum_repliesXX', 'Forum_subdiv', 'Forum_subscribe', 'Forum_topicsXX',
'Forum_usergroup', 'Links_Settings', 'Mail_Queue', 'Mail_Attachment',
'SQLQueries', 'Trash_Data', 'Multifield',
/* И еще таблицы */
'Auth_Settings', 'Auth_UserRelation', 'Auth_ExternalAuth', 'Auth_Token', 'User_OpenID', 'Session', 'Blog_Parent', 'Blog_Subdivision', 'Auth_Pseudo',
/* Приём платежей */
'Classificator_PaymentSystem',
'Payment_SystemCatalogue',
'Payment_SystemSetting',
'Payment_Log',
'Payment_Invoice',
'Payment_SystemParams',
'Payment_SystemsCatalogues',
'Payment_SystemsLogs',
'Component_Revisions',
'Csv_Import_History',
'Csv_Import_History_Ids',
/* Интернет-магазин */
'Netshop_CouponBatch',
'Netshop_Coupon',
'Netshop_Currency',
'Netshop_DeliveryMethod',
'Netshop_DeliveryDiscount',
'Netshop_ImportMap',
'Netshop_ImportSources',
'Netshop_CartDiscount',
'Netshop_ItemDiscount',
'Netshop_MailTemplate',
'Netshop_MailRule',
'Netshop_OfficialRate',
'Netshop_OrderDiscounts',
'Netshop_OrderGoods',
'Netshop_OrderIds',
'Netshop_PaymentMethod',
'Netshop_PriceRule',
'Netshop_RecentGoods',
'Netshop_FavoriteGoods',
'Netshop_CompareGoods',
'Netshop_StoreGoods',
'Netshop_Stores',
'Russianpost_Indexes',
'Netshop_YandexBundles',
'Netshop_YandexBundlesMap',
'Netshop_GoogleBundles',
'Netshop_GoogleBundlesMap',
'Netshop_MailBundles',
'Netshop_MailBundlesMap',
'Classificator_ShopCurrency',
'Classificator_ShopDeliveryService',
'Classificator_ShopOrderStatus',
'Classificator_ShopUnits',
'Classificator_RobokassaCurrency',
/* Счета и акты */
'Bills_Company',
'Bills_Act',
'Bills_Bill',
/* Модуль маршрутизации */
'Routing_Route',
/* Модуль комментариев */
'Comments_Count', 'Comments_Rules', 'Comments_Text', 'Comments_Settings', 'Comments_Subscribe', 'Comments_Template', 'Comments_LastVisit',
/* Модуль кеширования */
'Cache_Audit', 'Cache_Clear', 'Cache_Settings',
/* Модуль форума v2 */
'Forum_Count', 'Forum_Groups', 'Forum_Subdivisions', 'Forum_Topics', 'Classificator_ForumTopicType',
/* Модуль подписок */
'Subscriber_Mailer', 'Subscriber_Message', 'Subscriber_Prepared', 'Subscriber_Settings', 'Subscriber_Subscription', 'Subscriber_UserMessage', 'Subscriber_Log',
/* Модуль логирования */
'Logging',
/* Минимагазин */
'Minishop_OrderGoods', 'Documentation',
/* Модуль поиска */
'Search_Document', 'Search_Extension', 'Search_Field', 'Search_Log',
'Search_Query', 'Search_Rule', 'Search_Schedule', 'Search_Stopword',
'Search_Synonym', 'Search_Task', 'Search_Link', 'Search_LinkReferrer',
'Search_BrokenLink',
/* Списки для виджетов */
'Classificator_facebook_like_action', 'Classificator_facebook_like_colorscheme', 'Classificator_facebook_like_font',
'Classificator_facebook_like_layout', 'Classificator_twitter_follow_img', 'Classificator_vkontakte_comment_limit',
'Classificator_vkontakte_like_name', 'Classificator_vkontakte_like_type', 'Classificator_vkontakte_link_type',
'Classificator_whoyougle_oo', 'Classificator_yandex_dai_rub', 'Classificator_yandex_dai_rub_color',
'Classificator_yandex_novosti', 'Classificator_yandex_novosti_data', 'Classificator_yandex_novosti_kol',
'Classificator_yandex_novosti_lang', 'Classificator_yandex_novosti_sort',
/* Classificator_ */
'Classificator_Country', 'Classificator_Gallery', 'Classificator_Manufacturer', 'Classificator_Region',
'Classificator_Sex', 'Classificator_SubscriberPeriod', 'Classificator_TypeOfData', 'Classificator_TypeOfEdit',
'Classificator_TypeOfModeration', 'Classificator_TypeOfRight', 'Classificator_UserGroup', 'Classificator_MinishopStatus',
'Classificator_MinishopPayment', 'Classificator_MinishopDelivery', 'Classificator_BannerSize', 'Classificator_BannerType',
'Classificator_MiniShopCurrency', 'Classificator_MiniShopUnits', 'Classificator_MiniShopDeliveryService', 'Classificator_MiniShopOrderStatus',
'Classificator_FrameFormat',
'Classificator_OffersType',
'Wysiwyg_Panel',
'Services_YandexRegions',
);
return $cattables;
}
function nc_get_users_tables() {
$tables = array();
$showt = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_array($showt)) {
$tables[] = $row[0];
}
return $tables;
}
function nc_is_windows() {
return ((strstr(strtolower(PHP_OS), 'win') && PHP_SHLIB_SUFFIX != 'so') ? true : false);
}
function nc_is_lower_case_table_names() {
$res = nc_query("SHOW VARIABLES LIKE 'lower_case_table_names'");
$var = mysql_fetch_row($res);
return ($var[1] == 1 ? true : false);
}
function nc_repeat_tables() {
$tables = array();
$user_tables = nc_get_users_tables();
if (nc_is_lower_case_table_names()) {
$tables = array_intersect(nc_get_cattables_for_lower_case(), $user_tables);
$tables = array_merge($tables, nc_select_user_message_tables($user_tables, 1));
}
else {
$tables = array_intersect(nc_get_cattables(), $user_tables);
$tables = array_merge($tables, nc_select_user_message_tables($user_tables, 0));
}
return $tables;
}
function nc_select_user_message_tables($user_tables, $lower_case) {
$user_message_tables = array();
$name = 'Message';
if ($lower_case) {
$name = strtolower($name);
}
foreach ($user_tables as $key => $value) {
if (preg_match("/^" . $name . "[1-9][0-9]*?$/", $value)) {
$user_message_tables[] = $value;
}
}
return $user_message_tables;
}
function nc_mail_to_user($path) {
$mail = nc_post_get('email');
$pwd = nc_post_get('pwd');
$subject = "NetCat успешно установлен";
$message = 'Поздравляю!
Вы успешно установили CMS NetCat на сайт http://' . $path . '.
Ваши авторизационные данные для доступа в административную часть:
- адрес: http://' . $path . 'netcat/admin
- логин: admin
' . ($pwd ? '- пароль: ' . $pwd : '- вход в систему без пароля') . '
Спасибо, что выбрали нашу систему!
С уважением,
Скрипт Установки NetCat';
$headers = "Content-type: text/plain; charset=UTF-8 \r\n";
$headers .= "From: info@{$_SERVER['SERVER_NAME']}\r\n";
@mail($mail, $subject, $message, $headers);
}
function nc_write_log($message, $time = true) {
return false;
$message_time = "";
if ($time) {
$message_time = date("H:i:s d.m.Y") . ' ';
if (substr($message, -1) != '.') {
$message = $message . '.';
}
}
$result_str = PHP_EOL . $message_time . $message;
file_put_contents("install.log", $result_str, FILE_APPEND);
}
function nc_unzip($file, $dir) {
if (!file_exists($dir)) {
nc_installer_safe_mkdir($dir);
}
$zip_handle = zip_open($dir . $file);
if (is_resource($zip_handle)) {
while ($zip_entry = zip_read($zip_handle)) {
if ($zip_entry) {
$zip_name = zip_entry_name($zip_entry);
$zip_dir = dirname(zip_entry_name($zip_entry));
$zip_size = zip_entry_filesize($zip_entry);
#if( empty($zip_size) ) continue;
#if (($zip_size == 0) && ($zip_name[strlen($zip_name) - 1] == DIRECTORY_SEPARATOR)) {
# nc_installer_safe_mkdir($dir . $zip_name);
#}
if (!(file_exists($dir . $zip_dir) && is_dir($dir . $zip_dir))) {
nc_installer_safe_mkdir($dir . $zip_dir);
}
zip_entry_open($zip_handle, $zip_entry, 'r');
if (is_writable($dir . $zip_dir)) {
$fp = @fopen($dir . $zip_name, 'w');
if (is_resource($fp)) {
@fwrite($fp, zip_entry_read($zip_entry, $zip_size));
@fclose($fp);
}
}
else {
nc_write_log('Директория не доступна для записи: ' . $dir . $zip_dir);
}
zip_entry_close($zip_entry);
}
}
zip_close($zip_handle);
return true;
}
else {
$error = 127;
if (nc_func_enabled('exec')) {
exec("tar -xvzf " . $dir . $file . " -C " . $dir, $output, $error);
$error = false;
}
if (!$error) {
return true;
}
else {
return false;
}
}
}
function nc_installer_safe_mkdir($dir, $chmod = 0755) {
$slash = "/";
if (substr(php_uname(), 0, 7) == "Windows") {
$slash = "\\";
$dir = str_replace("/", $slash, $dir);
}
$tree = explode($slash, $dir);
$path = $slash;
// win path begin from C:\
if (substr(php_uname(), 0, 7) == "Windows") {
$path = "";
}
foreach ($tree as $row) {
if ($row === false) {
continue;
}
if (!@is_dir($path . $row)) {
@mkdir(strval($path . $row), $chmod);
}
$path .= $row . $slash;
}
}
/*function nc_installer_safe_chmod($path, $filemode = 0644, $dirmode = 0777) {
if ( is_dir($path) ) {
if ( !chmod($path, $dirmode) ) {
$dirmode_str = decoct($dirmode);
// Failed applying filemode '$dirmode_str' on directory '$path'
// the directory '$path' will be skipped from recursive chmod
return;
}
$dh = opendir($path);
while ( ($file = readdir($dh)) !== false ) {
if ($file != '.' && $file != '..') {
// skip self and parent pointing directories
$fullpath = $path . DIRECTORY_SEPARATOR . $file;
nc_installer_safe_chmod($fullpath, $filemode, $dirmode);
}
}
closedir($dh);
}
else {
if ( is_link($path) ) {
// link '$path' is skipped
return;
}
if ( !@chmod($path, $filemode) ) {
$filemode_str = decoct($filemode);
// Failed applying filemode '$filemode_str' on file '$path'
return;
}
}
}*/
function nc_func_enabled($function) {
$function = strtolower(trim($function));
if ($function == '') {
return false;
}
$dis_functions = array();
$dis_functions = explode(",", @ini_get("disable_functions"));
if (!empty($dis_functions)) {
$dis_functions = array_map('trim', array_map('strtolower', $dis_functions));
}
if (function_exists($function) && is_callable($function) && !in_array($function, $dis_functions)) {
return true;
}
else {
return false;
}
}
function nc_clear_dir($directory) {
$files = nc_double_array_shift(scandir($directory));
foreach ($files as $file) {
$file = $directory . '/' . $file;
if (is_dir($file)) {
nc_clear_dir($file);
}
else {
@unlink($file);
}
}
@rmdir($directory);
}
function nc_exec_sql($file) {
$fp = fopen($file, "r");
if (!$fp) {
nc_write_log('Не удалось открыть sql-файл: ' . $file);
return false;
}
$i = 0;
while (!feof($fp)) {
$statement = chop(fgets($fp, 65536));
if (strlen($statement)) {
while (substr($statement, strlen($statement) - 1, 1) <> ";" && substr($statement, 0, 1) <> "#" && substr($statement, 0, 2) <> "--")
$statement .= chop(fgets($fp, 65536));
if (substr($statement, 0, 1) <> "#" && substr($statement, 0, 2) <> "--") {
if (!nc_query($statement)) {
nc_write_log('Неудачное выполнение запроса в файле ' . $file . ' MySQL ошибка: ' . mysql_error());
}
}
}
}
fclose($fp);
return true;
}
function nc_get_varsinc($CUSTOM_FOLDER, $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DB_NAME, $MYSQL_ENCRYPT, $AUTHORIZE_BY, $AUTHORIZATION_TYPE, $ISPATH) {
ob_start();
?>
$DOCUMENT_ROOT = rtrim( getenv("DOCUMENT_ROOT"), "/\\" );
$HTTP_HOST = getenv("HTTP_HOST");
# подпапка в которой стоит NetCat
$SUB_FOLDER = '= $CUSTOM_FOLDER ?>';
# Если NetCat стоит в подпапке, то раскомментируйте следующую строчку
= $ISPATH ?>$SUB_FOLDER = str_replace( str_replace("\\", "/", $DOCUMENT_ROOT), "", str_replace("\\", "/", dirname(__FILE__)) );
# установка переменных окружения
error_reporting(E_ALL & ~(E_NOTICE | E_STRICT));
@ini_set("session.auto_start", "0");
@ini_set("session.use_trans_sid", "0");
@ini_set("session.use_cookies", "1");
@ini_set("session.use_only_cookies", "1");
@ini_set("url_rewriter.tags", ""); // to disable trans_sid on PHP < 5.0
@ini_set('session.cookie_domain', (strpos(str_replace("www.", "", $HTTP_HOST),'.') !== false) ? str_replace("www.", "", $HTTP_HOST) : '');
@ini_set("session.gc_probability", "1");
@ini_set("session.gc_maxlifetime", "1800");
@ini_set("session.hash_bits_per_character", "5");
@ini_set("mbstring.internal_encoding", "UTF-8");
@ini_set("default_charset", "UTF-8");
@ini_set("session.name", ini_get("session.hash_bits_per_character")>=5 ? "sid" : "ced");
# параметры доступа к базе данных
$MYSQL_HOST = "= $MYSQL_HOST ?>";
$MYSQL_USER = "= $MYSQL_USER ?>";
$MYSQL_PASSWORD = "= $MYSQL_PASSWORD ?>";
$MYSQL_DB_NAME = "= $MYSQL_DB_NAME ?>";
$MYSQL_CHARSET = "utf8";
$MYSQL_ENCRYPT = "= $MYSQL_ENCRYPT ?>";
# кодировка
$NC_UNICODE = 1;
$NC_CHARSET = "utf-8";
# настройки авторизации
$AUTHORIZE_BY = "= $AUTHORIZE_BY ?>";
$AUTHORIZATION_TYPE = "= $AUTHORIZATION_TYPE ?>"; # 'http', 'session' or 'cookie'
#разрешить вход только по https
$NC_ADMIN_HTTPS = 0; # 0 или 1
# серверные настройки
$PHP_TYPE = "module"; # 'module' or 'cgi'
$REDIRECT_STATUS = "on"; # 'on' or 'off'
# настройки безопасности
$SECURITY_XSS_CLEAN = false;
# инструмент "Переадресация" не доступен
$NC_REDIRECT_DISABLED = 0; # 0 или 1
# не загружать устаревшие файлы и функции
$NC_DEPRECATED_DISABLED = 1; # 0 или 1
$ADMIN_LANGUAGE = "Russian"; # Язык административной части NetCat "по-умолчанию"
$FILECHMOD = 0644; # Права на файл при добавлении через систему
$DIRCHMOD = 0755; # Права на директории для закачки пользовательских файлов
$SHOW_MYSQL_ERRORS = 'off'; # Показ ошибок MySQL на страницах сайта
$ADMIN_AUTHTIME = 2592000; # Время жизни авторизации в секундах (при $AUTHORIZATION_TYPE = session, cookie)
$ADMIN_AUTHTYPE = "manual"; # Выбор типа авторизации: 'session', 'always' or 'manual'
$use_gzip_compression = false; # Для включения сжатия вывода установите true
# настройки проекта
$DOMAIN_NAME = $HTTP_HOST; # $HTTP_HOST is server environment variable
#$DOCUMENT_ROOT = "/usr/local/etc/httpd/htdocs/www";
$HTTP_IMAGES_PATH = "/images/";
$HTTP_ROOT_PATH = "/netcat/";
$HTTP_FILES_PATH = "/netcat_files/";
$HTTP_DUMP_PATH = "/netcat_dump/";
$HTTP_CACHE_PATH = "/netcat_cache/";
$HTTP_TEMPLATE_PATH = "/netcat_template/";
$HTTP_TRASH_PATH = "/netcat_trash/";
# относительный путь в админку сайта, для ссылок
$ADMIN_PATH = $SUB_FOLDER.$HTTP_ROOT_PATH."admin/";
# относительный путь к теме админки, для изображений и .css файлов
$ADMIN_TEMPLATE = $ADMIN_PATH."skins/default/";
# полный путь к теме админки
$ADMIN_TEMPLATE_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$ADMIN_TEMPLATE;
$SYSTEM_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_ROOT_PATH."system/";
$ROOT_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_ROOT_PATH;
$FILES_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_FILES_PATH;
$DUMP_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_DUMP_PATH;
$CACHE_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_CACHE_PATH;
$TRASH_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_TRASH_PATH;
$INCLUDE_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_ROOT_PATH."require/";
$TMP_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_ROOT_PATH."tmp/";
$MODULE_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_ROOT_PATH."modules/";
$ADMIN_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_ROOT_PATH."admin/";
$EDIT_DOMAIN = $DOMAIN_NAME;
$DOC_DOMAIN = "netcat.ru/developers/docs";
$TEMPLATE_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_TEMPLATE_PATH."template/";
$CLASS_TEMPLATE_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_TEMPLATE_PATH."class/";
$WIDGET_TEMPLATE_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_TEMPLATE_PATH."widget/";
$JQUERY_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_TEMPLATE_PATH."jquery/";
$MODULE_TEMPLATE_FOLDER = $DOCUMENT_ROOT.$SUB_FOLDER.$HTTP_TEMPLATE_PATH."module/";
# set include_path: require/lib folder (PEAR and other 3rd-party libraries)
set_include_path("{$INCLUDE_FOLDER}lib/");
# название разработчика, отображаемое на странице «О программе»
#$DEVELOPER_NAME = 'ООО «НетКэт»';
#$DEVELOPER_URL = 'http://www.netcat.ru/';
$str) {
if (strpos($str, 'ErrorDocument 404') === 0) {
$htaccess[$num] = "ErrorDocument 404 " . rtrim($custom_dir, '/') . "/netcat/require/e404.php\n\r";
}
if (strpos($str, 'RewriteRule ^(.+)$') === 0) {
$htaccess[$num] = "RewriteRule ^(.+)$ " . rtrim($custom_dir, '/') . "/netcat/require/e404.php?REQUEST_URI=$1 [L,QSA]\n\r";
}
}
// update file content
if (is_writable($htaccess_path)) {
file_put_contents($htaccess_path, join('', $htaccess));
nc_write_log('Управляющий файл ' . $htaccess_path . ' записан успешно.');
}
}
function nc_double_array_shift($files) {
array_shift($files);
array_shift($files);
return $files;
}
function nc_installer_check_perm($dir_name) {
$filepath = $dir_name . "n123.tmp";
$h = @fopen($filepath, "w");
if ($h === false) {
$result = false;
}
else {
fclose($h);
@unlink($filepath);
$result = true;
}
return $result;
}