Вы не зашли.

#1 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 260
На форуме: 66 час.
Репутация: 21 (96%) ±
Инфо  Вебсайт  Написать

В коде чатов VOC++, к сожалению, довольно много ошибок.
К тому же, некоторые переменные и функции, используемые в коде чата и некоторых модов - являются уже устаревшими и подлежат замене.

И хотя эти ошибки пока не стали критичными, и чат с ними работоспособен, их наличие может проявиться при смене версии php или переносе на другой сервер, который перестал поддерживать устаревшие функции, либо сказываться на кроссбраузерности и СЕО.

В этой теме буду выкладывать способы исправления данных проблем.
Все предложенные правки - 100% рабочие, сделаны и протестированы мною в чате «Глобус».

Не обязательно делать все изменения сразу. Можно заменять по мере их обнаружения, во время установки модов, или правки кода.
Если вы сразу замените не все, а только часть устаревших функций, то от этого чат не "сломается", а будет работать, как и работал.

Я буду стараться выкладывать списки всех файлов, в которых необходимо делать замены. Но могу что-то забыть, или сам ещё не найти.
Поэтому, если вы встретите в файлах чата описанные ниже функции - можете заменить их самостоятельно.

Напоминаю, что перед правкой файла (особенно с заменой функций) - обязательно (!!!) делайте его бэкап!

Неактивен

#2 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 260
На форуме: 66 час.
Репутация: 21 (96%) ±
Инфо  Вебсайт  Написать

И начнем с самого начала. С заголовка страницы - DOCTYPE.

Согласно спецификациям HTML и XHTML тег DOCTYPE (что означает «объявление типа документа») сообщает валидатору, какую именно версию (X)HTMLвы используете в своей странице. Этот тег должен всегда находиться в первой строке каждой страницы сайта.
Тег DOCTYPE — ключевой компонент web-страниц, претендующих на соответствие стандартам: без него ваш код и CSS не пройдут проверку валидатором.
Он также важен для правильного отображения и работы страницы в броузерах, соответствующих стандартам (Mozilla, IE5/Mac, и IE6/Win).
Тег, в атрибутах которого указывается полный URI (полный web-адрес), сообщает броузерам, что страницу нужно вывести с соблюдением определенного стандарта или подвида этого стандарта.
Если вы будете пользоваться неполным тегом DOCTYPE, устаревшим его видом, или вообще забудете про него, броузер перейдет в «загадочный» (quirk) режим и будет исходить из предположения, что вы писали код страницы с ошибками и вольно отступали от стандартов, т.е. так, как писали в конце 90-ых годов.
В этом режиме броузер попытается разобрать вашу страницу по правилам обратной совместимости и выведет на экран, например, CSS так, как его вывел бы Internet Explorer 4-ой версии, а DOM будет работать так, как он работал именно в этом броузере (IE переключается в свой старый DOM, а Mozilla и Netscape 6 переключается вообще в непонятно что).
Понятно, что для вас эти выкрутасы не желательны. Но именно это вы можете получить, если будете пользоваться неполным или неправильным тегом DOCTYPE.

В файлах /js_frameset.php, /дизайн/fullinfo.php  и /admin/index.php указан DOCTYPE, как

Но этот DOCTYPE - для обычных страниц. И он невалиден для документов с фреймами, которыми и являются указанные файлы.

Его необходимо заменить на

Этот DTD идентичен HTML 4.01 Transitional DTD, за исключением содержимого <HTML>: в наборе фреймов, тег  <FRAMESET> заменяет тег <BODY>.

К тому же указанный в чате DOCTYPE - устаревший.
На остальных страницах нужно сменить версию с HTML 4.0  на HTML 4.01.

Неактивен

#3 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 260
На форуме: 66 час.
Репутация: 21 (96%) ±
Инфо  Вебсайт  Написать

Замена $HTTP_SERVER_VARS на $_SERVER
Замена $HTTP_GET_VARS на $_GET
Замена $HTTP_POST_VARS на $_POST
Замена $HTTP_POST_FILES на $_FILES
Замена $HTTP_ENV_VARS на $_ENV

В PHP » 4.1.0 были добавлены суперглобальные массивы:
$_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_ENV, $_REQUEST, $_SESSION и $ _FILES.
А с PHP 5.4.0, старые массивы $HTTP_*_VARS и $HTTP_POST_FILES удалены.

Соответственно, $HTTP_GET_VARS устарел и заменён на суперглобальный массив $_GET$HTTP_POST_VARS — на $_POST и т.д.

Например, в /admin/check_session.php необходимо найти:

и  заменить на:

В /data/engine/files/log_message.php, кроме замены устаревших массивов, необходимо удалить один из них:
в строке (в файле она встречается 3 раза):

global $data_path, $HTTP_SERVER_VARS;

удаляем всё, выделенное красным.
То же самое и в /inc_common.php:

global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, ${$variable_name};

Делается это потому, что массивы $_SERVER, $_GET, $_POST, $_COOKIE и так уже является суперглобальными (т.е. доступными в любом месте скрипта), поэтому дополнительное указание для них не нужно.
--------------------------------------

Файлы, в которых необходима замена:

Эта информация скрыта и доступна только зарегистрированным пользователям!

Неактивен

#4 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 260
На форуме: 66 час.
Репутация: 21 (96%) ±
Инфо  Вебсайт  Написать

Переменные переменных (символические ссылки)

Переменная переменная берет значение переменной и рассматривает его как имя переменной.
То есть, это имя переменной, которое может быть определено и изменено динамически.
Подробнее можно прочитать ЗДЕСЬ.

Переменная переменная обозначается оператором $$.
Этот синтаксис уже устарел в PHP5, а в PHP7 - удалён.
Для эмуляции предыдущего поведения необходимо использовать фигурные скобки.

Переменные переменные используются довольно редко, но в коде чата они есть.
Поэтому, если вы при редактировании кода встретите запись, подобную $$var = ... - её нужно заменить на ${$var} = ...

Примеры такой замены - в предыдущем посте.

------------------------------------

Файлы, требующие редактирования:

Эта информация скрыта и доступна только зарегистрированным пользователям!

Неактивен

#5 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 260
На форуме: 66 час.
Репутация: 21 (96%) ±
Инфо  Вебсайт  Написать

Замена ereg (eregi) на preg_match
Замена ereg_replace (ereg_replacei) на preg_repalce

(для тех, кто не в курсе, символ "i" в конце функции означает регистронезависимый поиск)

Начиная с PHP 5.3, разработчки решили избавиться от POSIX регулярных выражений (ПОДРОБНЕЕ).
В самом деле, зачем нужны две библиотеки для работы с регулярными выражениями, если можно обойтись одной?
К тому же, POSIX регулярные выражения гораздо медленнее чем Perl совместимые регулярные выражения (PCRE).

Просто взять и заменить одно выражение на другое нельзя. Будет выдано сообщение об ошибке.
Для корректной замены, необходимо:

1. Заменить ereg и eregi на preg_match, ereg_replace и ereg_replacei на preg_repalce;
2. Добавить разделители в начало и конец регулярного выражения;
3. Если POSIX функция кончается на i (eregi, ereg_replacei), то добавить i в конец регулярного выражения, после разделителя.

P.S. Не забывайте экранировать обратным слешем \ мета-символы . ^ $ * + - ? \ |, если они используются в регулярных выражениях в качестве того символа, каким они есть, а не в качестве специальных символов.

---------------------------------

Примеры замены:

В /admin/search.php ищем:

и меняем на:

В этом файле можно сделать ещё  лучше:

P.S. Данная функция намного проще и быстрее регулярки, но её нужно использовать осторожно.
Не везде она сможет заменить регулярное выражение.
К примеру, если применить её в /data/engine/files/users_search.php - то поиск по * перестаёт работать.

В /plugins/antihack/plugin.php ищем:

и меняем на:

(В этом примере, спецсимвол . был заэкранирован)

---------------------------------

Я буду стараться выложить все файлы, где необходима замена.
Но если что упущу - добавляйте и спрашивайте, если не получается сделать самим.

Файлы, в которых необходимо производить замену (некоторых файлов у вас может не быть):

Эта информация скрыта и доступна только зарегистрированным пользователям!

Неактивен

#6 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 260
На форуме: 66 час.
Репутация: 21 (96%) ±
Инфо  Вебсайт  Написать

Замена split на explode или preg_split.

С версии PHP 5.3.0 функция  split считается УСТАРЕВШЕЙ.  В PHP 7.0 - удалена.

Меняется она на функцию explode, которая не использует регулярных выражений и поэтому работает намного быстрее.
Если же нужно разбить строку по регулярному выражению - тогда применяется более  быстрая функция preg_split.

В чатах на движке VOC++ - все split меняются на explode, без каких-либо дополнительных изменений в коде.


Файлы, в которых нужна замена:

Эта информация скрыта и доступна только зарегистрированным пользователям!

Неактивен

#7 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 260
На форуме: 66 час.
Репутация: 21 (96%) ±
Инфо  Вебсайт  Написать

В некоторых чатах возникает проблема с ответами в викторине, при использовании юзером транслитерации.

Проблема заключается в том, что в языковом файле, в функции транслита, почему-то вместо русских букв написали аналогичные по виду английские.
И викторина, соответственно, их не принимает. Хотя на читаемость текста это не влияет.
Для исправления бага - полностью заменить аналогичный массив в languages/ru.php.

Вот исправленный мною и дополненный массив соответствия транслитерации => русским буквам:

Эта информация скрыта и доступна только зарегистрированным пользователям!

Неактивен

#8 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 260
На форуме: 66 час.
Репутация: 21 (96%) ±
Инфо  Вебсайт  Написать

Убираем дублирование атрибута style:

В чате "кликабельность" ника осуществляется подобным образом:

Вроде как всё в порядке. Данный код работает не один десяток лет во всех чатах на движке  VOC++.
А вот валидатор ругается на двойной атрибут style в теге.
И до сих пор никто не обратил внимания, и не не устранил ошибку.

Исправляется очень просто:

Эта строка встречается в коде чата много раз, в разных вариантах и в разных файлах.
В том числе и в главной админке Конфигурирование => Внешний вид => Шаблоны сообщений

Неактивен

#9 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 260
На форуме: 66 час.
Репутация: 21 (96%) ±
Инфо  Вебсайт  Написать

Проблема с Style Selection Plugin for VOC++ BSE от CyberDream

В чатах иногда замечается проблема, когда невозможно ничего сделать с подарками.
Ни удалить, ни вернуть, ни продать.

Проблема возникает только там, где установлен мод Style Selection Plugin for VOC++ BSE от CyberDream - товар набора шрифтов.
И именно тогда, когда был приобретён этот товар в магазине, но ещё не применён.
После применения данного товара - проблема с подарками исчезает.

Проблема не явно выраженная. Так как шрифты меняют нечасто, плюс в этот период не каждый решает удалить какой-то подарок.
У меня в чате, в течении нескольких лет, время от времени кто-то да и обращался с такой проблемой.
Но так, как проблема "самоустранялась" после применения шрифтов - всё списывалось на банальный глюк браузера, или ещё что-то.

Но оказалось, что это не глюк.
Проблема - в вышеназванном моде. Все его копии имеют ошибку в коде. То ли случайную, то ли кем-то внесённую.
В файле frontend.php мода отсутствует закрывающий тег формы </form>.

Для устранения проблемы достаточно добавить этот тег после всего кода.
Чтобы в конце было так:

P.S. Данный мод, выложенный мною на форуме - исправлен.

Неактивен

[ Generated in 0.008 seconds, 9 queries]