Advertisement:

Author Topic: Бага в SSI.php  (Read 15231 times)

Offline RXL

  • Semi-Newbie
  • *
  • Posts: 61
  • Gender: Male
    • Клуб программистов 'Весельчак У'
Бага в SSI.php
« on: September 21, 2008, 10:26:12 AM »
Для полноценной работы с UTF-8 там не хватает в начале файла объявления
Code: (php) [Select]
global $db_character_set;
Это к сведению. Может привести к неверной кодировке при выдаче.

Offline †MavN†

  • Local Moderator
  • Sophist Member
  • *
  • Posts: 1,203
  • Gender: Male
  • MavnGroup
    • MavnGroup
Re: Бага в SSI.php
« Reply #1 on: September 21, 2008, 11:55:50 AM »
Версия smf и кусок кода где чего не хватает

Offline RXL

  • Semi-Newbie
  • *
  • Posts: 61
  • Gender: Male
    • Клуб программистов 'Весельчак У'
Re: Бага в SSI.php
« Reply #2 on: September 22, 2008, 01:57:31 AM »
Версия 1.1.6.

Code: [Select]
// We're going to want a few globals... these are all set later.
global $time_start, $maintenance, $msubject, $mmessage, $mbname, $language;
global $boardurl, $boarddir, $sourcedir, $webmaster_email, $cookiename;
global $db_server, $db_name, $db_user, $db_prefix, $db_persist, $db_error_send, $db_last_error, $db_character_set;
global $db_connection, $modSettings, $context, $sc, $user_info, $topic, $board, $txt;

$db_character_set добавлен мной. На UTF-8 я перешел только с этой версии и не могу сказать - были ли подобные проблемы в ранних версиях.

Думаю, что этот баг вылезает при require_once('..../SSI.php') не из глобального контекста, а из функции. И, конечно, важны настройки MySQL. У меня по дефолту кодировка клиента - latin1.

Code: [Select]
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | utf8                       |
| character_set_results    | latin1                     |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
« Last Edit: September 22, 2008, 02:07:36 AM by RXL »

Offline †MavN†

  • Local Moderator
  • Sophist Member
  • *
  • Posts: 1,203
  • Gender: Male
  • MavnGroup
    • MavnGroup
Re: Бага в SSI.php
« Reply #3 on: September 22, 2008, 02:16:27 AM »
Может конечно не прав но данная переменная нигде в SSI.php не употребляется для того чтобы ее в глобале объявлять так что тоже как и разработчики смысла особого не вижу в том чтобы ее в глобал поставить.

Offline RXL

  • Semi-Newbie
  • *
  • Posts: 61
  • Gender: Male
    • Клуб программистов 'Весельчак У'
Re: Бага в SSI.php
« Reply #4 on: September 22, 2008, 02:45:56 AM »
См. след.:
Если SSI.php вызывается из функции, то та вызывает Settings.php, который в свою очередь выполняется не в глобальном контексте.

Лучше объясню на примере.

file1.php
Code: [Select]
function my_func()
{
    require_once('file2.php');
}

my_func();

config.php
Code: [Select]
$var1 = 1;
$var2 = 2;

file2.php
Code: [Select]
global $var1;
// global $var2; // а это объявить забываем

require_once('config.php');

function smf_func()
{
    global $var1, $var2;

    // $var1 == 1
    // $var2 == null но никак не 2
}

Зато все было бы ОК, если бы в конфиге было либо объявление global для всех переменных конфига, либо использовался $GLOBALS.

config.php
Code: [Select]
$GLOBALS['var1'] = 1;
$GLOBALS['var2'] = 2;



$db_character_set используется в функции reloadSettings() из модуля Load.php - SSI.php вызывает его и именно там есть настройка кодировки подключения к базе.
« Last Edit: September 22, 2008, 02:56:59 AM by RXL »

Offline †MavN†

  • Local Moderator
  • Sophist Member
  • *
  • Posts: 1,203
  • Gender: Male
  • MavnGroup
    • MavnGroup
Re: Бага в SSI.php
« Reply #5 on: September 22, 2008, 07:24:56 AM »
угу в принципе нужно об этом просто сообщить разработчикам чтобы поправили.
на днях кинем в их раздел

Offline 7fanatic

  • Newbie
  • *
  • Posts: 2
Re: Бага в SSI.php
« Reply #6 on: November 05, 2008, 11:19:24 AM »
во, тоже столкнулся с этой проблемой, при выводе в вордпресс (утф8) из базы форума (утф8) в вордпрессе показывались "??????"

Добавление "lobal $db_character_set; " решило проблему.

Offline RXL

  • Semi-Newbie
  • *
  • Posts: 61
  • Gender: Male
    • Клуб программистов 'Весельчак У'
Re: Бага в SSI.php
« Reply #7 on: November 08, 2008, 11:53:32 AM »
Кстати, сегодняшний апдейт до 1.1.7 не исправляет эту проблему. Также игнорирована проблема с не-ascii именами вложений: http://www.simplemachines.org/community/index.php?topic=136952.msg1717374#msg1717374

Уважаемый MavN, вы не забыли сообщить об этих багах разработчикам?

Offline Mongoose

  • Semi-Newbie
  • *
  • Posts: 48
  • Gender: Male
    • Opera Fan
Re: Бага в SSI.php
« Reply #8 on: October 13, 2011, 07:13:13 AM »
Бага всё ещё актуальна для всех версий, включая последнюю SMF 2.0.1.

Offline RXL

  • Semi-Newbie
  • *
  • Posts: 61
  • Gender: Male
    • Клуб программистов 'Весельчак У'
Re: Бага в SSI.php
« Reply #9 on: October 26, 2011, 11:22:58 AM »
Я уже давно забил на это и патчу код форума самостоятельно. Очень помогает в этом контроль версий и багтрекер. А выходящие патчи приходится накладывать руками, но учитывая, что они стали очень редки и малы, то затруднений это не вызывает. Зато все найденные пользователями баги патчатся без ожидания разработчиков.
У меня вообще сложилось мнение, что развитие SMF остановилось. В 2.0.x не наблюдаю качественного скачка (на который намекает major version), т.к. архитектура осталась той же, что и в 1.1.x, со всеми присущими ей недостатками.

Offline inter

  • Jr. Member
  • **
  • Posts: 290
  • Gender: Male
    • interlab on GitHub
Re: Бага в SSI.php
« Reply #10 on: November 21, 2011, 07:11:07 AM »
Бага всё ещё актуальна для всех версий, включая последнюю SMF 2.0.1.

вы правы, позавчера подключался к базе через SSI.php и столкнулся с знаками вопросов вместо русских букв  :-\
исправилось при помощи:

Code: [Select]
$smcFunc['db_query']('', '
SET NAMES UTF8',
array(
)
);
Sorry for my English

Offline noir_noir

  • Newbie
  • *
  • Posts: 1
Re: Бага в SSI.php
« Reply #11 on: April 07, 2014, 06:22:49 AM »
Я невероятно благодарен тебе, чувак!!!