Перейти к публикации

Вся активность

Эта лента обновляется автоматически     

  1. Сегодня
  2. Вчера
  3. Ранее
  4. Не так давно закончилась поддержка пятой версии PHP. Это значит, пришло время переходить на новый и быстрый PHP 7. PHP эволюционирует, можно сказать «взрослеет». Требования к качеству кода выросли – плохо написанные скрипты при переходе на новую версию перестанут работать. Такая участь постигла IP.Board 3.4. К сожалению, ждать обновления от разработчиков не стоит, поддержка продукта полностью прекращена 1 апреля 2017. Если вы по каким-либо причинам не можете или не желаете обновляться до IPS 4, то это руководство для вас. Я хочу поделиться своим опытом «продления жизни» старому движку. Это не так сложно. [] operator not supported for strings и Illegal string offset Fatal error: Uncaught Error: [] operator not supported for strings in admin/applications/forums/sources/classes/topics.php:1895 Суть этой ошибки проста: мы пытаемся добавить элемент не в массив, а в строку. В PHP 7 появилась поддержка типизации, потому этот трюк приводит к ошибке: $foo = ""; $foo[] = "bar"; // Fatal error: [] operator not supported for strings echo $foo['core']; // Warning: Illegal string offset 'core' И такой момент встречается в нескольких местах. Решается исправлением объявления переменной. Чуть выше строки, указанной в ошибке найдите такой код: $topic['pages'] = ""; // Было $topic['pages'] = []; // Теперь это массив (это сокращённая замена array()) Аналогичное повторяем в ips_kernel/classCustomFields.php после строки: class customFieldDrop extends customFieldPlugin public $parsed = ''; // Было public $parsed = []; // Стало count(): Parameter must be an array or an object that implements Countable Warning: count(): Parameter must be an array or an object that implements Countable in admin/sources/classes/text/parser.php on line 2395 Ошибка приведения типа. Скорее всего, функции передали пустую строку или NULL. Решается здесь это добавлением проверки типа. if ( ! count( $this->_sortedSmilies ) ) // Было if ( empty( $this->_sortedSmilies ) ) // count() заменили на empty(), так как он более универсален для проверки на пустоту admin/sources/classes/like/composite.php исправляем аналогичным образом: if ( is_numeric($relId) && count($data) ) // Было if ( is_numeric($relId) && !empty($data) ) // Стало Сломанный шаблонизатор Вместо форума скорее всего, вы будете лицезреть вот такую ошибку: Fatal error: Redefinition of parameter $forum_data in cache/skin_cache/cacheid_1/skin_forum.php on line 424 Это связана с неправильной генерацией кода функции. В объявлении функции более одного раза повторяется имя аргумента. В данном случае это $forum_data. Ремонт шаблонизатора был самой сложной частью, но для вас он будет простым благодаря готовому решению от меня Находим и открываем файл ips_kernel/classTemplateEngine.php Ищем вот такой фрагмент кода (можно по комментарию искать): //---------------------------------------- // Get function arguments //---------------------------------------- foreach( $_tmp_func_data as $_i ) { preg_match( "#".'\$'.'(\w+)\s*(=|,|$)#i', $_i, $match ); if( count($match) ){ $_final[] = '$'.$match[1]; } } Ниже вставляем мой авторский фикс, который добавляет суффиксы к дублирующимся параметрам функции. Обязательно должен стоять перед строчкой: $clean_func_data = implode( ",", $_final ); // TODO TheAndrey start: PHP 7 compat fix $knownParamNames = []; $paramsFixed = false; for($i = count($_tmp_func_data) - 1; $i >= 0; $i--) { // Обходим с конца, так как параметры, что в конце переопределдяют значения предыдущих preg_match("#".'\$'.'(\w+)\s*(=|,|$)#i', $_tmp_func_data[$i], $matches); if(count($matches)) { $argName = $matches[1]; $argUseCount = intval($knownParamNames[$argName]) + 1; $knownParamNames[$argName] = $argUseCount; if($argUseCount > 1) { $argName = '$PARENT' . ($argUseCount - 1) . '_' . $argName; // Добавляем префикс повторяющимся (суть фикса) $_tmp_func_data[$i] = $argName; // TODO: съедает значение по умолчанию $paramsFixed = true; } } } if($paramsFixed) $normal_func_data = implode(',', $_tmp_func_data); // TODO TheAndrey end Сохраняем и закрываем файл. Теперь нужно запустить перестроение шаблонов, чтобы изменения вступили в силу: Админцентр > Внешний вид > Инструменты > Обновление кеш-файлов.
  5. Nevex уже давно прекратил выпуск nulled-версий DataLife Engine. Впоследствии был закрыт генератор ключей для retail-версий (оригинал). Всё это за прошедшие годы утратило свой смысл. Сегодня я хочу рассказать Вам, как самостоятельно сделать свой nulled-дистрибутив буквально за 5 мин. Nulled подразумевает под собой удаление всего функционала, связанного с проверкой наличия лицензии. На выходе Вы получаете «разлоченную» CMS. Не используйте готовые Nulled версии Готовые «нуллы» настоятельно не рекомендуется качать, потому что далеко не все авторы добросовестны. Помимо разблокировки CMS, они могут внести дополнительные изменения: Афишировать, что ваша CMS «нуленная»: например, в админпанели будет указан тип лицензии «Nulled by N2C-Team» и в исходных файлах тоже. Даже ежу (и вашему хостинг-провайдеру) будет понятно, что вы используете взломанную версию скрипта Скрытые ссылки в шаблонах на сайт автора. Это своего рода плата за нулл, а ваш сайт в свою очередь станет донором. Встраивание бэкдоров для последующего взлома вашего сайта. Многие поэтому предпочитают брать оригинальный дистрибутив и активировать его кейгеном, так безопаснее. Делаем свой Nulled Сперва нам понадобится раздобыть оригинальный (retail) дистрибутив. Его можно найти в интернете; попросить у владельца лицензии; либо приобрести лицензию хотя бы для одного сайта, чтобы иметь возможность скачивать дистрибутивы. Если решили качать из интернета, рекомендую скачать архивы с нескольких сайтов, чтобы их потом сравнить между собой. Оригинальный архив имеет примерно такое название: dle13_1.zip. Обратите внимание, что архив всегда в формате ZIP. На некоторых сайтах его ещё могут дополнительно упаковать в RAR. Содержимое архив имеет примерно такое: Распаковываем скачанный архив. Например, в папку локального веб-сервера (аля OpenServer). [Неактуально] Снимаем обфуксацию. Все функции проверки лицензии спрятаны в файле engine/inc/include/init.php поэтому он обфусцирован ByteRun Protector. В интернете по запросу «ByteRun Decoder» можно найти достаточно сайтов, которые помогут в расшифровке этого файла. Теперь этот файл распространяется в открытом виде (думаю, ByteRun не работает с PHP 7). Правим engine/inc/include/init.php Ищем такой фрагмент: $lic_tr = true; $auto_detect_config = false; Переменная $lic_tr отвечает за включение демонстрационного режима (trial). Меняем true на false, чтобы перевести скрипт в активированный режим. Чуть ниже удаляем проверку ключика (на основе этого кода делается keygen): $domen_md5 = md5( get_domen_hash() . DINITVERSION ); if( $domen_md5 == $config['key'] ) $lic_tr = false; В целом, на этом можно закончить. Наш скрипт уже активирован. Но я предпочитаю довести дело до конца. Удаляем отправку запроса на активацию и форму: Удаляем ограничение на 100 новостей и 200 комментариев: if( $lic_tr AND $is_loged_in AND $mod != "editnews" AND $mod != "main" AND $mod != "upgrade" AND $mod != "") { $row = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post" ); $stats_news = $row['count']; $row = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_comments" ); $count_comments = $row['count']; if( $stats_news > 100 ) msg( "error", "error", $lang['trial_limit'].'<br /><br />'.$activation_field ); if( $count_comments > 200 ) msg( "error", "error", $lang['trial_limit'].'<br /><br />'.$activation_field ); } На этом редактирование файла закончено. Правим engine/inc/include/functions.inc.php Удаояем функции: send_activation(), get_domen_hash() и dle_activation(): На этом всё. Смотрим результат. Теперь скрипт у нас активирован . При этом никто не сможет понять, nulled у нас или лицензия. Отключаем функцию проверки обновлений. Настоятельно рекомендуется сделать это, чтобы не «светить» свой сайт. Ранее скрипт сообщал домен вашего сайта, теперь передаётся ключ. Открываем файл engine/ajax/updates.php и полностью заменяем его содержимое на это: <?php if(!defined('DATALIFEENGINE')) { header( "HTTP/1.1 403 Forbidden" ); header ( 'Location: ../../' ); die( "Hacking attempt!" ); } if($member_id['user_group'] != 1) die ("error"); echo $lang['no_update']; // заглушка Теперь скрипт будет всегда выдавать ошибку подключения (дабы его модификация осталась незаметной). Убираем копирайты Хорошо эти или плохо, решать вам. Их нужно убрать, если не хотите, чтобы ваш сайт светился в поиске по запросу «DataLife Engine». От этого зависит, как скоро вы получите «письмо счастья» с требованием приобрести лицензию. engine/engine.php Удалить строку: <meta name="generator" content="DataLife Engine (http://dle-news.ru)"> engine/modules/main.php В самом конце файла найти и удалить строку: echo "\n<!-- DataLife Engine Copyright SoftNews Media Group (http://dle-news.ru) -->\r\n"; engine/rss.php Здесь встречается много упоминаний DataLife Engine. Как быть с ними я не знаю... templates/opensearch.tpl Замените всё на на название сайта. Отредактируйте шаблоны сайта (особенно smartphone). Измените в настройках сайта Description и Keywords.
  6. FTA1050

    Глобальное обновление

    Добрый день , вот это неожиданно приятно
  7. exclusive37

    Глобальное обновление

    Вот это поворот событий!
  8. TheAndrey

    Глобальное обновление

    Нет больше кейгена, да и не нужен он больше. Сейчас почти на каждом сайте есть информация, как сделать nulled своими руками.
  9. jakal

    Глобальное обновление

    Что то этот дизайн лучше выглядит, чем тот Nevex что есть для выбора. Кстати, а где делся генератор ключей для DLE? Да и что бы под новые версии работал, тоже?)
  10. jakal

    Глобальное обновление

    Ничё се, всё по новому выглядит!)
  11. TheAndrey

    Глобальное обновление

    Было выполнено плановое обновление форума по причине наступления EOL для IP.Board 3.
  1. Загрузить больше активности
  • Рассылка

    Хотите узнавать обо всех наших последних новостях и информации?

    Подписаться
×
×
  • Создать...