Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Доступ к скрипту только для зарегистрированных

Проблемы с установкой или работой phpBB 3.1.x? Получите помощь здесь!
С 1 июля 2018 года phpBB Group прекращает поддержку phpBB версии 3.1.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.1 до 1 января 2019 года.
Подробнее: Окончание поддержки phpBB 3.1.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Доступ к скрипту только для зарегистрированных

Сообщение Alecto »

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

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

<?php
	define("DOCROOT", $_SERVER["DOCUMENT_ROOT"].DIRECTORY_SEPARATOR);

	// charset
	header("Content-type: text/html; charset=UTF-8");

	// session
	session_start();

	include 'classes/Upload.php';
	include 'classes/Crop.php';

	define('IN_PHPBB', TRUE);
	$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../';
	$phpEx = substr(strrchr(__FILE__, '.'), 1);
	include $phpbb_root_path.'common.'.$phpEx;

	// Start session management
	$user->session_begin();
	$auth->acl($user->data);
	$user->setup();
	if ($user->data['user_id'] == ANONYMOUS)
	{
		login_box('', $user->lang['LOGIN']);
	}
?>
в 31 появилась вот такая ошибка.
Общая ошибка
Попытка перенаправления на потенциально опасный сайт.

BACKTRACE

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

FILE: [ROOT]/includes/functions.php
LINE: 2300
CALL: trigger_error()

FILE: [ROOT]/includes/functions.php
LINE: 2878
CALL: redirect()

FILE: [ROOT]/ucp.php
LINE: 84
CALL: login_box()
помогите поправить для новой версии.
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет
Благодарил (а): 57 раз
Поблагодарили: 625 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Anvar »

login_box('', $user->lang['LOGIN']);
Замени на:

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

		login_box(request_var('redirect', "index.$phpEx"));
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Alecto »

в 30 было как:
если зарегистрированный пользователь переходит по адресу mysite/crop/ - он получает доступ к скрипту.
если гость переходит по адресу mysite/crop/ - он сначала попадает в форму логина, после успешного завершения которого редиректится к mysite/crop/
сейчас ошибка пропала, но редирект после успешного логина выполняется на index.php вместо mysite/crop/
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет
Благодарил (а): 57 раз
Поблагодарили: 625 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Anvar »

Тогда надо определить текущую страницу.
Добавить перед:

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

function request_url($get_path = false, $clear = false)
{
   global $config, $user;

   $server_name = $user->host;
   $server_port = (!empty($_SERVER['SERVER_PORT'])) ? (int) $_SERVER['SERVER_PORT'] : (int) getenv('SERVER_PORT');

   // Forcing server vars is the only way to specify/override the protocol
   if ($config['force_server_vars'] || !$server_name)
   {
      $server_protocol = ($config['server_protocol']) ? $config['server_protocol'] : (($config['cookie_secure']) ? 'https://' : 'http://');
      $server_name = $config['server_name'];
      $server_port = (int) $config['server_port'];

      $url = $server_protocol . $server_name;
      $cookie_secure = $config['cookie_secure'];
   }
   else
   {
      // Do not rely on cookie_secure, users seem to think that it means a secured cookie instead of an encrypted connection
      $cookie_secure = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 1 : 0;
      $url = (($cookie_secure) ? 'https://' : 'http://') . $server_name;
   }

   if ($server_port && (($cookie_secure && $server_port <> 443) || (!$cookie_secure && $server_port <> 80)))
   {
      // HTTP HOST can carry a port number (we fetch $user->host, but for old versions this may be true)
      if (strpos($server_name, ':') === false)
      {
         $url .= ':' . $server_port;
      }
   }

   // Strip / from the end
   //if (substr($url, -1, 1) == '/')
   //{
   //   $url = substr($url, 0, -1);
   //}

   if (isset($_SERVER['REQUEST_URI']))
   {
      $url .= $_SERVER['REQUEST_URI'];
   }
   else if (isset($_SERVER['argv'])) 
   {
      $url .= $_SERVER['SCRIPT_NAME'] .'?'. $_SERVER['argv'][0];
   }
   else if (isset($_SERVER['QUERY_STRING']))
   {
      $url .= $_SERVER['SCRIPT_NAME'] .'?'. $_SERVER['QUERY_STRING'];
   }
   else
   {
      $url .= $_SERVER['SCRIPT_NAME'];
   }

   if ($get_path)
   {
      $url_delim = (strpos($url, '?') === false) ? '?' : ((strpos($url, '?') === strlen($url) - 1) ? '' : '&');
      if($clear)
      {
         $url_delim = array($url_delim . $get_path, '&' . $get_path, '?' . $get_path, $get_path);
         $url = str_replace($url_delim, "", $url);
      }
      else
      {
         $url .= $url_delim . $get_path;
      }
   }

   return $url;
}
и уже использовать: login_box(request_var('redirect', request_url()));
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Alecto »

а на что тогда в login_box(request_var('redirect', "index.$phpEx"));
"index.$phpEx" поменять?
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет
Благодарил (а): 57 раз
Поблагодарили: 625 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Anvar »

Anvar писал(а):login_box(request_var('redirect', request_url()));
Полностью строку поменяй.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Alecto »

сделал все как вы писали.
ошибка
Illegal use of $_SERVER. You must use the request class or request_var() to access input data. Found in /home/motobrat/public_html/crop/conf.php on line 32. This error message was generated by deactivated_super_global.

BACKTRACE

FILE: (not given by php)
LINE: (not given by php)
на всякий случай привожу полный код файла.

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

<?php
	define("DOCROOT", $_SERVER["DOCUMENT_ROOT"].DIRECTORY_SEPARATOR);

	// charset
	header("Content-type: text/html; charset=UTF-8");

	// session
	session_start();

	include 'classes/Upload.php';
	include 'classes/Crop.php';

	define('IN_PHPBB', TRUE);
	$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../';
	$phpEx = substr(strrchr(__FILE__, '.'), 1);
	include $phpbb_root_path.'common.'.$phpEx;

	// Start session management
	$user->session_begin();
	$auth->acl($user->data);
	$user->setup();
	if ($user->data['user_id'] == ANONYMOUS)
	{
login_box(request_var('redirect', request_url()));
	}

function request_url($get_path = false, $clear = false)
{
   global $config, $user;

   $server_name = $user->host;
   $server_port = (!empty($_SERVER['SERVER_PORT'])) ? (int) $_SERVER['SERVER_PORT'] : (int) getenv('SERVER_PORT');

   // Forcing server vars is the only way to specify/override the protocol
   if ($config['force_server_vars'] || !$server_name)
   {
      $server_protocol = ($config['server_protocol']) ? $config['server_protocol'] : (($config['cookie_secure']) ? 'https://' : 'http://');
      $server_name = $config['server_name'];
      $server_port = (int) $config['server_port'];

      $url = $server_protocol . $server_name;
      $cookie_secure = $config['cookie_secure'];
   }
   else
   {
      // Do not rely on cookie_secure, users seem to think that it means a secured cookie instead of an encrypted connection
      $cookie_secure = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 1 : 0;
      $url = (($cookie_secure) ? 'https://' : 'http://') . $server_name;
   }

   if ($server_port && (($cookie_secure && $server_port <> 443) || (!$cookie_secure && $server_port <> 80)))
   {
      // HTTP HOST can carry a port number (we fetch $user->host, but for old versions this may be true)
      if (strpos($server_name, ':') === false)
      {
         $url .= ':' . $server_port;
      }
   }

   // Strip / from the end
   //if (substr($url, -1, 1) == '/')
   //{
   //   $url = substr($url, 0, -1);
   //}

   if (isset($_SERVER['REQUEST_URI']))
   {
      $url .= $_SERVER['REQUEST_URI'];
   }
   else if (isset($_SERVER['argv'])) 
   {
      $url .= $_SERVER['SCRIPT_NAME'] .'?'. $_SERVER['argv'][0];
   }
   else if (isset($_SERVER['QUERY_STRING']))
   {
      $url .= $_SERVER['SCRIPT_NAME'] .'?'. $_SERVER['QUERY_STRING'];
   }
   else
   {
      $url .= $_SERVER['SCRIPT_NAME'];
   }

   if ($get_path)
   {
      $url_delim = (strpos($url, '?') === false) ? '?' : ((strpos($url, '?') === strlen($url) - 1) ? '' : '&');
      if($clear)
      {
         $url_delim = array($url_delim . $get_path, '&' . $get_path, '?' . $get_path, $get_path);
         $url = str_replace($url_delim, "", $url);
      }
      else
      {
         $url .= $url_delim . $get_path;
      }
   }

   return $url;

}?>
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Re: Доступ к скрипту только для зарегистрированных

Сообщение rxu »

Alecto
Добавьте в global И используйте класс $request.
Изображение
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет
Благодарил (а): 57 раз
Поблагодарили: 625 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Anvar »

Забыл что $_SERVER в phpBB3.1 не доступна.

Функцию переделал. Проверить не могу, так как у меня нет сейчас затей.

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

<?php
	define("DOCROOT", $_SERVER["DOCUMENT_ROOT"].DIRECTORY_SEPARATOR);

	// charset
	header("Content-type: text/html; charset=UTF-8");

	// session
	session_start();

	include 'classes/Upload.php';
	include 'classes/Crop.php';

	define('IN_PHPBB', TRUE);
	$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../';
	$phpEx = substr(strrchr(__FILE__, '.'), 1);
	include $phpbb_root_path.'common.'.$phpEx;

	// Start session management
	$user->session_begin();
	$auth->acl($user->data);
	$user->setup();
	if ($user->data['user_id'] == ANONYMOUS)
	{
		login_box(request_var('redirect', request_url()));
	}

	function request_url()
	{
		global $config, $user, $request;

		$server_name = $user->host;
		$server_port = $request->server('SERVER_PORT');

		$server_protocol = ($config['server_protocol']) ? $config['server_protocol'] : (($config['cookie_secure']) ? 'https://' : 'http://');
		$server_name = $config['server_name'];
		$server_port = (int) $config['server_port'];

		$url = $server_protocol . $server_name;
		$cookie_secure = $config['cookie_secure'];
		if ($server_port && (($cookie_secure && $server_port <> 443) || (!$cookie_secure && $server_port <> 80)))
		{
			if (strpos($server_name, ':') === false)
			{
				$url .= ':' . $server_port;
			}
		}
		$url .= $request->server('SCRIPT_NAME') .'?'. $request->server('QUERY_STRING');
		return $url;
	}

?>
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Re: Доступ к скрипту только для зарегистрированных

Сообщение rxu »

Anvar писал(а):$server_port = (!empty($request->server('SERVER_PORT'))) ? (int) $request->server('SERVER_PORT') : (int) getenv('SERVER_PORT');
Последнее лишнее, getenv используется в самом методе $request->server (эта же логика).
Изображение
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Alecto »

белая страница
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет
Благодарил (а): 57 раз
Поблагодарили: 625 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Anvar »

Alecto, Изменил пост - проверяй.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Доступ к скрипту только для зарегистрированных

Сообщение Alecto »

заработало: выбросило на логин а потом вернуло на скрипт.
спасибо огромное!

Вернуться в «Поддержка phpBB 3.1.x»