Перейти к содержимому
Русский язык для Invision Community 5

Стандартный Антиспам-сервис IPB: "зависает" php-команда fgets()

Что имеем:

1) Срок активности лицензии истёк и как следствие, антиспам-фильтр от IP.Board не работает (не должен работать)

2) В настройках IP.Board включаем антиспам-фильтр (почему-то IP.Board разрешает это сделать при истёкшей лицензии)

 

Что получаем:

При попытке регистрации нового пользователя на странице регистрации (шаг 1) нажимаем кнопку "Регистрация" и... ждём 3 мин, после чего получаем от сервера ошибку "Internal Server Error"

Первое, что пришло в голову - бесконечный цикл где-то в глубинах исходных кодов IP.Board

 

Локализация причины

1) /admin/sources/base/ipsController.php => ipsController::init():

protected function init()
{
   $this->registry = ipsRegistry::instance();
   $this->registry->init();
}

2) /admin/sources/base/ipsController.php => ipsController::handleRequest():

self::$cmd->execute( $this->registry )

3) /admin/applications/core/modules_public/global/register.php => public_core_global_register::_completeRegistrationSave():

//-----------------------------------------
// Pass twitter/facebook via spam service
//-----------------------------------------
...
/* Query the service */
$spamCode = IPSMember::querySpamService( $member['email'] );

4) /admin/sources/base/ipsMember.php => IPSMember::querySpamService():

/* Query the service */
$response = $query->postFileContents( "https://remoteservices.invisionpower.com/spam/{$type}", array( 'email' => $email, 'ip' => $ip ), $key, $key );

5) /kernel/classFileManagement.php => classFileManagement::postFileContents():

//-------------------------------
// Is URL, try curl and then fall back
//-------------------------------
...			
$contents = $this->_getContentsWithSocket( $file_location );

6) /kernel/classFileManagement.php => classFileManagement::_getContentsWithSocket():

while( ! feof($fp) && ! $status['timed_out'] )		
{
   $data .= fgets( $fp, 8192 );
   $status = stream_get_meta_data($fp);
}

Вот здесь команда fgets "зависает". При этом поток $fp проинициализирован:

print_r($fp) = "Resource id #35"

 

По каким-то причинам IP.Board'овский сервер не отдаёт ни EOF, ни EOL ?

Рекомендованные сообщения

http://ipbskins.ru/forum/topic10798.html/page__view__findpost__p__88545

 

Если речь о Registration / Spam service timing out on 3.4.7, то его я откатил

На самом деле даже без патча вы никакой разницы не почусвуете потому, что post запрос с бейсик авторизации на форуме встречается очень редко, и то, на многих хостингах есть курл который отрабатывает вместо сокетов. Более того, если у вас установлена локализация от ибр, то там используется другой антиспам сервис и то, что отправляются запросы на ипс это означает, что либо вы вручную поменяли сервис в файле, либо вы заменили этот файл оригинальным, например при установке патча с ИПС.

  • 2 недели спустя...
  • Автор
> Если речь о Registration / Spam service timing out on 3.4.7, то его я откатил

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

Тем не менее, ни один пользователь ни с одного компьютера не мог зарегистрироваться из-за сабжевого "подвисания".

 

А вот этот вопрос остаётся в силе:

2) Где искать сабжевый патч "Registration / Spam service timing out on 3.4.7" в варианте IBResource ?

  • Автор

Я тут нашёл работу для модераторов:

Перенести сообщения 19-23 в отдельную тему, тему назвать так: Обновление IP.Board 3.4.5

А то по ветке обновления, чувствую, сейчас дискуссия разрастётся...

  • Автор
А, учитывая то, что Вы используете локализацию от ибр, то вообще кричи "Караул!".

Что касается оригинального англоязычного патча 3_4_x_patch_nov_14, то предварительно я его откатил (до варианта, имевшего место после установки и локализации IP.Board 3.4.5).

После отката проверил сабжевый глюк при включенном антиспам-сервисе: регистрация проходит нормально, без "подвисаний". Значит, сабжевая проблема наблюдается только при коннекте к антиспам-сервису IPS. В ходе работы с антиспам-сервисом от IBResource ошибка себя никак не проявляет.

 

В любом случае, сабжевую ошибку (сокеты + basic-авторизация) желательно устранить. Только IBResource-адаптированной версии патча Registration / Spam service timing out on 3.4.7, похоже, не существует...

В ходе работы с антиспам-сервисом от IBResource ошибка себя никак не проявляет.

Потому что там не требуется бейсик авторизация.

 

В любом случае, сабжевую ошибку (сокеты + basic-авторизация) желательно устранить.

http://ipbskins.ru/forum/topic13693.html#entry91040

  • Автор
> В любом случае, сабжевую ошибку (сокеты + basic-авторизация) желательно устранить.

http://ipbskins.ru/forum/topic13693.html#entry91040

Этот патч (classFileManagement.php) не содержит локализованных фраз ?

 

В любом случае, на форуме IBResource в разделе "Новости" должна быть тема с описанием этого патча (в разделе "Новости" размещаются все патчи, включая те, которые не затрагивают файлы локализации). Но её там нет. Или есть ? Я не нашёл.

Изменено пользователем siv1987

В любом случае, на форуме IBResource в разделе "Новости" должна быть тема с описанием этого патча

Они выпускают только патчи безопасности. И то по моему когда речь касается измененных файлов ибр, иначе дают ссылку на скачку с ипс.

 

Этот патч (classFileManagement.php) не содержит локализованных фраз ?

Нет.

  • Автор
Они выпускают только патчи безопасности. И то по моему когда речь касается измененных файлов ибр, иначе дают ссылку на скачку с ипс.

Да, именно так. Если патч затрагивает локализованные файлы, то выкладывают адаптированный вариант патча, если нет - дают ссылку на оригинальный.

Но в любом случае они создают отдельную тему в разделе "Новости". Под любой патч (даже если патч не затрагивает локализованные файлы). Но в случае с Registration / Spam service timing out on 3.4.7 - они этого почему-то не сделали...

 

P.S. Почему вы удаляете ссылки на www.invisionpower.com ? Они нарушают правила форума ?

Изменено пользователем cyrax_02

P.S. Почему вы удаляете ссылки на www.invisionpower.com ? Они нарушают правила форума ?

Зачем повторять их стопиццот раз в этой теме? Один раз упомянули и хватит. И это касается не только ссылок на ипс. Не надо публиковать 1000 ссылок одного и того же адреса.

  • Автор

Это зафиксировано в правилах форума ?

Думаю, со мной согласится большинство форумчан - в том, что ссылки по возможности нужно оформлять всегда и везде. Даже если одним или несколькими постами выше эта ссылка уже присутствует. Люди же не будут искать по всем сообщениям темы, нет ли где нужной им ссылки. Более того, нужная им ссылка может иметь иной текст.

Вообще, это всё - прописные истины. Я не понимаю вашей логики. "Не как у людей"...

 

P.S. На своём форуме я эту логику планирую сделать рекомендацией.

Изменено пользователем cyrax_02

Но в любом случае они создают отдельную тему в разделе "Новости". Под любой патч (даже если патч не затрагивает локализованные файлы). Но в случае с Registration / Spam service timing out on 3.4.7 - они этого почему-то не сделали...

Где это? Не вижу ничего кроме тем, связанных с патчами безопасности, и тем, относящихся к Ибр.

Или Вы хотите, чтобы разработчики для каждого бага публиковали решение.

  • Автор

Что-то я нигде не могу найти упоминания, какой антиспам-фильтр работает - IPS или IBResource.

 

Хотя нет. Настройка "Защита от Спама" сопровождается комментарием: "Настройки для антиспам сервиса от IPS".

Только этот комментарий не соответствует действительности (в случае IBResource-локализации)...

Изменено пользователем cyrax_02

Люди же не будут искать по всем сообщениям темы, нет ли где нужной им ссылки.

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

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.