Страница 1 из 3

Board Statistics

Добавлено: 11.11.2015 23:19
MAKOMI
Название расширения: Board Statistics
Автор: John Peskens
Описание расширения: Расширение регистрирует все посещения пользователей и гостей. Очистка статистики производится по заданию cron. Тема на офф-сайте Board Statistics
Скачать: https://github.com/ForumHulp/statistics ... master.zip
GitHub repository: https://github.com/ForumHulp/statistics
Язык: Английский, Русский
1 Board statistics.jpg
2 Board statistics.jpg
3 Board statistics.jpg
4 Board statistics.jpg
5 Board statistics.jpg
Установил расширение. Так как на хостинге закрыты исходящие то расширение показывает Debug в верху страницы

Код: Выделить всё

[phpBB Debug] PHP Warning: in file [ROOT]/ext/forumhulp/statistics/event/listener.php on line 184: fsockopen(): unable to connect to http://www.ip-api.com:80 (Permission denied)
1)Как отключить Debug чтобы его не видели пользователи но видел админ? (если нельзя то пункт 2)
2)Что можно отключить или закомментировать в расширении чтобы не было Debug-а?

Re: Как отключить Debug?

Добавлено: 11.11.2015 23:21
Sheer
MAKOMI писал(а): отключить или закомментировать в расширении
Проверку версии.

Re: Как отключить Debug?

Добавлено: 12.11.2015 0:25
MAKOMI
Дико извиняюсь час промучился хотел сам разобраться но не вышло :(
Подскажите в каком именно файле и в какой строке закомментировать :oops:

Re: Как отключить Debug?

Добавлено: 12.11.2015 0:30
Sheer
MAKOMI писал(а): in file [ROOT]/ext/forumhulp/statistics/event/listener.php on line 184
Отправлено спустя 1 минуту 23 секунды:
Ведь перед носом. Английски по белому написано.

Re: Как отключить Debug?

Добавлено: 12.11.2015 0:45
MAKOMI
:oops: :oops: :oops:
До сих пор с ребенком делаю уроки нервы и внимание ни к черту
Огромное спасибо за помощь :!: :!: :!:

Re: Как отключить Debug?

Добавлено: 12.11.2015 13:46
MAKOMI
Это не проверка версии а проверка местоположения пользователя через ресурс www.ip-api.com и вывод в таблицу в колонке СТРАНА название страны и флага.
таблица.jpg
Как правильно закомментировать в этом коде? А то все мои попытки приводят вот к этому:
ошибка.jpg

Код: Выделить всё

<?php
/**
*
* @package Statistics
* @copyright (c) 2014 ForumHulp.com
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

namespace forumhulp\statistics\event;

/**
* @ignore
*/
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* Event listener
*/
class listener implements EventSubscriberInterface
{
	protected $config;
	protected $helper;
	protected $user;
	protected $db;
	protected $online_table;
	protected $config_table;
	protected $se_table;
	protected $php_ext;

	/**
    * Constructor
    *
    * @param \phpbb\controller\helper    $helper        Controller helper object
    */
	public function __construct(\phpbb\config\config $config, \phpbb\controller\helper $helper, \phpbb\user $user, \phpbb\db\driver\driver_interface $db, $online_table, $config_table, $se_table, $php_ext)
	{
		$this->config = $config;
		$this->helper = $helper;
		$this->user = $user;
		$this->db = $db;
		$this->online_table = $online_table;
		$this->config_table = $config_table;
		$this->se_table = $se_table;
		$this->php_ext = $php_ext;
	}

	static public function getSubscribedEvents()
	{
		return array(
			'core.page_footer'	=> 'get_ref',
		);
	}

	/**
	 * @param object $event The event object
	 * @return null
	 * @access public
	 */

	public function get_modules()
	{
		global $db, $user;
		$user->add_lang(array('ucp', 'mcp', 'common'));
		$modules = array();
		$sql = 'SELECT forum_id, forum_name FROM ' . FORUMS_TABLE;
		$result = $db->sql_query($sql);
		while ($row = $db->sql_fetchrow($result))
		{
			$modules[$row['forum_id']] = $row['forum_name'];
		}
		$sql = 'SELECT module_langname FROM ' . MODULES_TABLE . ' WHERE module_class = "ucp" OR module_class = "mcp"';
		$result = $db->sql_query($sql);
		while ($row = $db->sql_fetchrow($result))
		{
			(isset($user->lang[$row['module_langname']])) ? $modules[$row['module_langname']] = $user->lang[$row['module_langname']] : null;
		}
		return $modules;
	}

	function get_ref($event)
	{
		global $request, $template, $cache;

		if ($this->user->page['script_path'] != '/adm/')
		{
			$ref_url = strtolower($this->user->referer);

			if (!empty($ref_url) && (strpos($ref_url, $this->config['server_name']) === false))
			{
				if (strpos($ref_url, 'sid=') !== false)
				{
					$ref_url = preg_replace('/(\?)?(&|&)?sid=[a-z0-9]+/', '', $ref_url);
					$ref_url = preg_replace("/$this->php_ext(&|&)+?/", "$this->php_ext?", $ref_url);
				}

				$data['referer'] = parse_url(htmlspecialchars(strip_tags($ref_url)));

				$sql = 'SELECT DISTINCT query FROM ' . $this->se_table . ' WHERE name like "%' . substr($data['referer']['host'], 0, strrpos($data['referer']['host'], '.')) . '"';
				$result = $this->db->sql_query($sql);
				$row = $this->db->sql_fetchrow($result);

				if ($row && strpos($data['referer']['query'], $row['query'] . '=') !== false)
				{
					parse_str($data['referer']['query'], $query);
					$searchwords = trim($query[$row['query']]);
					$searchwords = str_replace(array('%3d','%27'), array('',''), $searchwords);
					$searchwords = str_replace(array('=','\''), array('',''), $searchwords);
					$searchwords = urldecode($searchwords);
					$searchwords = str_replace(',', ' ', $searchwords);
					$searchwords = str_replace('+', ' ', $searchwords);
				}
			} else
			{
				$ref_url = '';
			}

			if ($this->user->page['forum'] && is_numeric($this->user->page['forum']))
			{
				$data['module'] = $this->user->page['forum'];
			} else if ($this->user->page['page_dir'] == '' && !$request->is_set('i'))
			{
				$module_pages = array('index.php' => 'FORUM_INDEX', 'faq.php' => 'VIEWING_FAQ', 'mcp.php' => 'VIEWING_MCP', 'search.php' => 'SEARCHING_FORUMS', 'viewonline.php',  'VIEWING_ONLINE', 'memberlist.php' => 'VIEWING_MEMBERS', 'ucp.php' => 'VIEWING_UCP');

				$sql = 'SELECT custom_pages FROM ' . $this->config_table;
				$result = $this->db->sql_query($sql, 3000);
				$row = $this->db->sql_fetchfield('custom_pages');
				$row = unserialize($row);

				if (sizeof($row) > 0)
				{
					foreach($row as $key => $value)
					{
						$module_pages[$key] = $value;
					}
				}
				if (strpos($this->user->page['page_name'], 'app.php') === false)
				{
					$data['module'] = (isset($module_pages[$this->user->page['page_name']])) ? $module_pages[$this->user->page['page_name']] : null;
				} else
				{
					$pagename = substr($this->user->page['page_name'], 0, strrpos ($this->user->page['page_name'], '/'));
					$data['module'] = (isset($module_pages[$pagename])) ? $module_pages[$pagename] : null;
				}
			} else
			{
				if (is_numeric($request->variable('i', '')))
				{
					$sql = 'SELECT module_langname FROM ' . MODULES_TABLE . ' WHERE module_id = ' . $request->variable('i', 0);
					$result = $this->db->sql_query($sql);
					$module_langname = $this->db->sql_fetchfield('module_langname');
					$data['module'] = $module_langname;
				} else
				{
					$modules = $this->get_modules();
					(in_array(strtoupper($request->variable('i', '')), $modules)) ? $data['module'] = strtoupper($request->variable('i', '')) : null;
				}
			}

			if (isset($data['module']) && $data['module'] !== '')
			{
				if (($this->ip_cache = $cache->get('_ip_cache')) !== false)
				{
					if (!isset($this->ip_cache[$this->user->data['session_ip']]))
					{
						if ($this->user->data['session_ip'] != '127.0.0.1' && fsockopen('www.ip-api.com', 80))
						{
							$ip_query = file_get_contents('http://ip-api.com/json/' . $this->user->data['session_ip'] . '?fields=status,countryCode,reverse');
							$ip_aray = json_decode($ip_query, true);

							$this->ip_cache[$this->user->data['session_ip']]['countryCode'] = strtolower($ip_aray['countryCode']);
							$this->ip_cache[$this->user->data['session_ip']]['reverse'] = strtolower($ip_aray['reverse']);
							$this->ip_cache = array_slice($this->ip_cache, -50, 50, true);
							$cache->put('_ip_cache', $this->ip_cache);
						} else
						{
							$this->ip_cache[$this->user->data['session_ip']]['reverse'] = @gethostbyaddr(($this->user->data['session_ip']));
							$aray = explode('.', $this->ip_cache[$this->user->data['session_ip']]['reverse']);
							$this->ip_cache[$this->user->data['session_ip']]['countryCode'] = ($this->user->data['session_ip'] == '127.0.0.1') ? 'lo' : strtolower($aray[sizeof($aray) -1]);
						}
					}
				} else
				{
					if ($this->user->data['session_ip'] != '127.0.0.1' && fsockopen('www.ip-api.com', 80))
					{
						$ip_query = file_get_contents('http://ip-api.com/json/' . $this->user->data['session_ip'] . '?fields=status,countryCode,reverse');
						$ip_aray = json_decode($ip_query, true);

						$this->ip_cache[$this->user->data['session_ip']]['countryCode'] = strtolower($ip_aray['countryCode']);
						$this->ip_cache[$this->user->data['session_ip']]['reverse'] = strtolower($ip_aray['reverse']);

						$cache->put('_ip_cache', $this->ip_cache);
					} else
					{
						$this->ip_cache[$this->user->data['session_ip']]['reverse'] = @gethostbyaddr(($this->user->data['session_ip']));
						$aray = explode('.', $this->ip_cache[$this->user->data['session_ip']]['reverse']);
						$this->ip_cache[$this->user->data['session_ip']]['countryCode'] = ($this->user->data['session_ip'] == '127.0.0.1') ? 'lo' : strtolower($aray[sizeof($aray) -1]);
					}
				}

				$data['host'] = $this->ip_cache[$this->user->data['session_ip']]['reverse'];
				$data['domain'] = strtolower($this->ip_cache[$this->user->data['session_ip']]['countryCode']);

				$data['domain'] = (!file_exists('./ext/forumhulp/statistics//adm/style/images/flags/' . $data['domain'] . '.png')) ? 'un' : $data['domain'];

				if (!$request->is_set($this->config['cookie_name'] . '_statistics_res', \phpbb\request\request_interface::COOKIE))
				{
					$template->assign_vars(array('ACOOKIE' => true, 'COOKIENAME' => $this->config['cookie_name']));
					$data['screen_res'] = '1920x1080x24';
				} else
				{
					$data['screen_res'] = $request->variable($this->config['cookie_name'] . '_statistics_res', '1920x1080x24', false, \phpbb\request\request_interface::COOKIE);
				}

				$fields = array(
					'time'			=> time(),
					'uname'			=> $this->user->data['username'],
					'ugroup'		=> (int) $this->user->data['group_id'],
					'agent'			=> $this->user->browser,
					'ip_addr'		=> $this->user->data['session_ip'],
					'host'			=> $data['host'],
					'domain'		=> $data['domain'],
					'module'		=> $data['module'],
					'scr_res'		=> $data['screen_res'],
					'referer'		=> isset($ref_url) ? $ref_url: '',
					'page'			=> $this->user->page['page'],
					'se_terms'		=> isset($searchwords) ? $searchwords: '',
				);
				$sql = 'INSERT INTO ' . $this->online_table . ' ' . $this->db->sql_build_array('INSERT', $fields);
				$this->db->sql_query($sql);
			}
		}
	}
}

Re: Как отключить Debug?

Добавлено: 13.11.2015 0:16
LavIgor
MAKOMI писал(а): Как правильно закомментировать в этом коде?
Поставьте @ перед fsockopen.
Это уберёт сообщение об ошибке, при этом код запроса выполняться не будет, т.к. функция проверяется в условии if.

А вообще попробуйте заменить fsockopen на @fopen (заменив 80 на 'r'), поскольку в самом коде сокеты не используются.

Re: Как отключить Debug?

Добавлено: 13.11.2015 1:07
MAKOMI
При первом варианте если заходить под админом работает тока захожу под пользователем получаю следующее:

Код: Выделить всё

SQL ERROR [ mysql4 ]

Data too long for column 'uname' at row 1 [1406]

SQL

INSERT INTO phpbb_statistics_online (time, uname, ugroup, agent, ip_addr, host, domain, module, scr_res, referer, page, se_terms) VALUES (1447365736, 'Мазур Константин Михайлович', 10, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36', '92.60.178.79', '92.60.178.79', 'un', 'FORUM_INDEX', '1024x600x24', '', 'index.php', '')

BACKTRACE

FILE: (not given by php)
LINE: (not given by php)
CALL: msg_handler()

FILE: [ROOT]/phpbb/db/driver/driver.php
LINE: 855
CALL: trigger_error()

FILE: [ROOT]/phpbb/db/driver/mysql.php
LINE: 181
CALL: phpbb\db\driver\driver->sql_error()

FILE: [ROOT]/phpbb/db/driver/factory.php
LINE: 329
CALL: phpbb\db\driver\mysql->sql_query()

FILE: [ROOT]/ext/forumhulp/statistics/event/listener.php
LINE: 230
CALL: phpbb\db\driver\factory->sql_query()

FILE: (not given by php)
LINE: (not given by php)
CALL: forumhulp\statistics\event\listener->get_ref()

FILE: [ROOT]/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php
LINE: 164
CALL: call_user_func()

FILE: [ROOT]/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php
LINE: 53
CALL: Symfony\Component\EventDispatcher\EventDispatcher->doDispatch()

FILE: [ROOT]/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php
LINE: 167
CALL: Symfony\Component\EventDispatcher\EventDispatcher->dispatch()

FILE: [ROOT]/phpbb/event/dispatcher.php
LINE: 60
CALL: Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch()

FILE: [ROOT]/phpbb/event/dispatcher.php
LINE: 46
CALL: phpbb\event\dispatcher->dispatch()

FILE: [ROOT]/includes/functions.php
LINE: 5386
CALL: phpbb\event\dispatcher->trigger_event()

FILE: [ROOT]/index.php
LINE: 207
CALL: page_footer()
Восстановлю форум попробую вариант №2

Отправлено спустя 14 минут 31 секунду:
Второй метод тоже кидает в SQL ERROR

Отправлено спустя 1 минуту 21 секунду:
А вообще можно отключить Debug чтобы его не видели пользователи но видел админ?

Re: Как отключить Debug?

Добавлено: 13.11.2015 1:39
Sheer
MAKOMI писал(а): А вообще можно отключить Debug чтобы его не видели пользователи но видел админ?
Нет. А что у расширения никаких настроек типа отключения проверки местоположения пользователя нет?
Ну можно поковырять экст и выпилить оттуда этот кусок или сделать туннель, через который пролезть на www.ip-api.com

Re: Как отключить Debug?

Добавлено: 13.11.2015 1:53
MAKOMI
Настроек отключения нет :(
Тунель прокинуть тоже нельзя заблокированно :(
Могу дать доступ к тестовому форуму

Re: Как отключить Debug?

Добавлено: 13.11.2015 1:57
Sheer
А может проще хостинг сменить?

Re: Как отключить Debug?

Добавлено: 13.11.2015 2:01
MAKOMI
:D
Бесплатного лучшего или такого же по параметрам к сожалению нет.
У всех бесплатных свои бока. У моего это закрытые исходящие.

Re: Как отключить Debug?

Добавлено: 13.11.2015 2:10
LavIgor
MAKOMI писал(а): При первом варианте
Это если собачку поставить?
Так она никоим образом не связана с SQL Error.
Посмотрите ограничение столбца uname, попробуйте задать ему тип TEXT.

Re: Как отключить Debug?

Добавлено: 13.11.2015 2:19
MAKOMI
Что первый вариант что второй вариант вызывает SQL Error.
Но при определенном условии.
Под админом захожу все ок. дебага нет по форуму лажу. Тока захожу под пользователем сразу SQL Error

Отправлено спустя 3 минуты 40 секунд:
Блин мне из кучи всяких там прибамбасов из этого расширение всего лишь надо когда зашел пользователь и на какие страницы заходил.

Re: Board Statistics

Добавлено: 13.11.2015 2:35
Sheer
LavIgor писал(а): Посмотрите ограничение столбца uname
VARCHR 25 Автор пожадничал :D
MAKOMI, Замени на VARCHAR 255
LavIgor писал(а): Поставьте @ перед fsockopen.
и не парься.