Skip to content

Вход в админку IPBoard зависает

В очередной раз попробовал зайти в админку форума - после ввода логина/пароля и нажатия кнопки "Ввод" сервер зависает (через 3 минуты - получаю ошибку таймаута). В логах сервера никаких ошибок нет, кроме 3-минутного таймаута.

 

Если под этим же логином/паролем (а также под любыми другими) зайти на форум, никаких проблем не возникает. Кукисы чистил. Проблема наблюдается в разных браузерах.

 

В результате локализации проблемного кода было определено, что в файле admin/sources/classes/output/formats/html/htmlOutput.php зависает команда [ @header( "Location: ".$url ); ] в [htmlOutput::silentRedirect()] (строка 555, в приведённом коде - внизу):

 

/**
 * Silent redirect (Redirects without a screen or other notification)
 *
 * @access	public
 * @param	string		URL
 * @param	string		[sEO Title]
 * @param	string		[send a 301 redirect header first]
 * @param	string		SEO Template
 * @return	mixed
 */
public function silentRedirect( $url, $seoTitle='', $send301=FALSE, $seoTemplate='' )
{

...

	if ( $this->settings['header_redirect'] == 'refresh' )
	{
		@header("Refresh: 0;url=".$url);
	}

	else if ( $this->settings['header_redirect'] == 'html' )
	{
		$url = str_replace( '&', '&', str_replace( '&', '&', $url ) );
		echo("<html><head><meta http-equiv='refresh' content='0; url=$url'></head><body></body></html>");
		exit();
	}
	else
	{
		@header( "Location: ".$url );
	}
	exit();
}

 

 

Если убрать собаку, по-прежнему никаких ошибок в логах не появляется (кроме 3-минутного таймаута). Т.е. происходит именно зависание на этой команде. Непосредственно перед этим header Функция headers_sent() возвращает false

 

URL передаётся такой:

http://www.site.ru/forum/admin/index.php?adsess=b89e113fd5a465ea01806098ac5df83c

Если этот URL ввести в браузере непосредственно, то нормально загружается страница ввода логина/пароля.

В чём может быть проблема ?

Featured Replies

Такая проблема у нас была в 3.1x из-за проверки лицензии в /admin/applications/core/extensions/dashboardNotifications.php

 

Также может быть из-за запроса $ipsNewsData к www.invisionpower.com в /admin/applications/core/modules_admin/mycp/dashboard.php

В новых версиях больше не используется запрос к www.invisionpower.com/latestversioncheck/ipb30x.php? который заменен на external.ipslink.com/latestversioncheck/ipb30x.php?

  • Author

Оно самое.

 

В приведённом выше коде "перенаправил" код на ветку [ $this->settings['header_redirect'] == 'html' ] - в этом случае браузер получил ответ с [ meta http-equiv='refresh' ] и сразу же начал загрузку указанного в html/head url:

http://www.invisionpower.com/latestversioncheck/ipb30x.php?MzQwMTF8XnxodHRwOi8vd8d3LmthbmFzaC1pbmZvLnJ1L2NvbW13bml5eQ==

 

И вот на этом url сервер снова стал зависать. Если этот URL загрузить в браузере непосредственно, то сначала сервер отдаёт 301 редирект на этот же самый URL, а во второй раз отдаёт 404 страницу.

 

Что касается загрузки этой страницы в classFileManagement.php, то происходило следующее (curl у меня до сих пор не установлен, так что работал метод classFileManagement::_getContentsWithSocket()):

 

- первая загрузка URL выполнялась около 10 секунд (это время занял цикл while( ! feof($fp) && ! $status['timed_out']) )

- вторая загрузка этого же URL (после получения от сервера 301 редиректа на этот же URL) выполнялась минуты 2-2,5 (на что именно ушло это время - не отслеживал)

- после 2-й загрузки снова был получен редирект на этот же URL и - 3-я загрузка URL, которая по понятным причинам в 3 минуты уже не укладывается

 

Т.е. картина складывается так: на сокетах таймауты косячат (файл "classFileManagement.php" у меня пропатченный), в итоге 5 итераций циклических редиректов занимают более 3 минут (что за идиотизм выдавать 301 редирект на этот же URL ???).

 

Здесь можно сделать одно из 2:

- либо уменьшить число итреаций с 5 до 1 (в classFileManagement::_getContentsWithSocket())

- либо в \admin\applications\core\modules_admin\mycp\dashboard.php в методе doExecute() закомментировать 165 строку:

$ipsNewsData['vcheck'] = $classFileManagement->getFileContents( 'http://www.invisionpower.com/latestversioncheck/ipb30x.php?' . base64_encode( ipsRegistry::$vn_full.'|^|'.$this->settings['board_url'] ) );

Сделал 2-е. После этого нормально вошёл в админку.

 

Далее раскомментировал строку, сохранил (и в htmlOutput::silentRedirect() убрал заглушку). Т.е. весь код привёл к изначальному виду.

И по-прежнему нормально выхожу/захожу в админку. В т.ч. и в других браузерах. Я так понимаю это кэш IP.Board ? Т.е. когда время жизни кэша истечёт, проблема снова себя проявит ?

закомментировать строку:

В новых версиях больше не используется запрос к www.invisionpower.com/latestversioncheck/ipb30x.php? который заменен на external.ipslink.com/latestversioncheck/ipb30x.php?

 

Я так понимаю это кэш IP.Board ? Т.е. когда время жизни кэша истечёт, проблема снова себя проявит ?

Если строка с проблемным запросом закомментирована - не появится.

Да уж прикольно они нагнули владельцев тройки, то же ждал минут 5 загрузки, после загрузки. блок последних новостей с ips кривой и отображаемая страница не совместима со стилями админки и исправлять видимо и не собираются. И ещё прикол они убрали личный кабинет у себя, мне как владельцу тройки теперь не доступен даже лицензионный ключь от неё ))) веселые ребята

Да уж прикольно они нагнули владельцев троqки,

Кто Вас нагнул? Посмотрел 3.4.8 и 3.4.9 версии. Все ссылки исправлены.

 

И ещё прикол они убрали личный кабинет у себя, мне как владельцу тройки теперь не доступен даже лицензионный ключь от неё ))) веселые ребята

Все есть https://www.invisionpower.com/clientarea/index.php?app=nexus&module=clients&section=purchases

Кто Вас нагнул? Посмотрел 3.4.8 и 3.4.9 версии. Все ссылки исправлены.

 

Все есть https://www.invisionpower.com/clientarea/index.php?app=nexus&module=clients&section=purchases

У меня IP.Board 3.4.5 в 3.4.9 ссылка на какую страницу, что бы самому ручками поправить?

Вчера не чего не было и ссылка на клиентарену вела сюда https://invisionpower.com/clients/

У меня IP.Board 3.4.5 в 3.4.9 ссылка на какую страницу, что бы самому ручками поправить?

Во втором посте указана.

 

			if( strpos( $this->settings['base_url'], 'https://' ) !== false )
		{
			$ipsNewsData['news'] = $classFileManagement->getFileContents( 'https://external.ipslink.com/ipboard33/dashboard/index.php?v=' . ipsRegistry::$vn_full );
			$ipsNewsData['vcheck'] = $classFileManagement->getFileContents( 'https://external.ipslink.com/latestversioncheck/ipb30x.php?' . base64_encode( ipsRegistry::$vn_full.'|^|'.$this->settings['board_url'] ) );
		}
		else
		{
			$ipsNewsData['news'] = $classFileManagement->getFileContents( 'http://external.ipslink.com/ipboard33/dashboard/index.php?v=' . ipsRegistry::$vn_full );
			$ipsNewsData['vcheck'] = $classFileManagement->getFileContents( 'http://external.ipslink.com/latestversioncheck/ipb30x.php?' . base64_encode( ipsRegistry::$vn_full.'|^|'.$this->settings['board_url'] ) );
		}

 

Вчера не чего не было и ссылка на клиентарену вела сюда

Может исправили. Они там все перелопатили.

Дак это на запрос последней версии, у меня то блок "Последних новостей" поплыл

Мы вообщето обсуждаем долгую загрузку страницы при входе в админцентре, со своим блоком вы немного не в теме.

  • Author
Я так понимаю это кэш IP.Board ? Т.е. когда время жизни кэша истечёт, проблема снова себя проявит ?

Да, через некоторое время проблема себя снова проявила. А до этого работал кэш админки.

 

В новых версиях больше не используется запрос к www.invisionpower.com/latestversioncheck/ipb30x.php? который заменен на external.ipslink.com/latestversioncheck/ipb30x.php?

Исправил адрес - проблем пока не наблюдается...

Столкнулся в 3.4.5, спасибо за тему.

  • 2 weeks later...

Исправил адрес - проблем пока не наблюдается...

Если совсем нужно избавится от запросов newsdata к ips, ниже

$ipsNewsData = $this->cache->getCache( 'ipsNewsData' );

добавить

 

$ipsNewsData = array( 'time' => time() );

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.