Пропустить

Установка phpBB на хостинге с PostgreSQL 9

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
Свернуть Развернуть Правила форума Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Установка phpBB на хостинге с PostgreSQL 9

Сообщение mishanon » 09.02.2011 18:57

Вообщем проблема, нужен хак или что то еще.
При установке выдает что

PostgreSQL 7.x/8.x:
Недоступно

Соотвественно на хостинге у меня PostgreSQL 9.0.2

Сообственно поковырался и нашел что проверка версии происходить в файле includes/db/postgres.php
Функция

function sql_server_info($raw = false, $use_cache = true)
	{
		global $cache;

		if (!$use_cache || empty($cache) || ($this->sql_server_version = $cache->get('pgsql_version')) === false)
		{
			$query_id = @pg_query($this->db_connect_id, 'SELECT VERSION() AS version');
			$row = @pg_fetch_assoc($query_id, null);
			@pg_free_result($query_id);

			$this->sql_server_version = (!empty($row['version'])) ? trim(substr($row['version'], 10)) : 0;

			$this->sql_server_version = "8.0";

			if (!empty($cache) && $use_cache)
			{
				$cache->put('pgsql_version', $this->sql_server_version);
			}
		}

		$this->sql_server_version = "8.0";

		return ($raw) ? $this->sql_server_version : 'PostgreSQL ' . $this->sql_server_version;
	}


Как я понял, этот код зачем то вообще не вызывался. Как видитье я вставил свои строки $this->sql_server_version = "8.0";. Но все равно не получается установить :(

PS другой хостинг не предлагать!

mishanon
phpBB 1.0.0
 
Сообщения: 4
Зарегистрирован: 09.02.2011 18:51
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Установка phpBB на хостинге с PostgreSQL 9

Сообщение nissin » 09.02.2011 21:03

Модуль pgsql в php установлен и загружен?
Всё повторяется. nurlan.info
Аватара пользователя
nissin
Поддержка
Поддержка
 
Сообщения: 1381
Зарегистрирован: 16.12.2007 15:01
Откуда: Павлодар
Благодарил (а): 1 раз.
Поблагодарили: 124 раз.

Re: Установка phpBB на хостинге с PostgreSQL 9

Сообщение mishanon » 10.02.2011 11:10

Модуль pgsql в php установлен и загружен?

Конечно,
pdo_pgsqlPDO Driver for PostgreSQL enabled
PostgreSQL(libpq) Version 9.0.2
Module version 1.0.2
Revision $Id: pdo_pgsql.c 300351 2010-06-10 12:11:19Z iliaa $

Добавлено спустя 2 часа 21 минуту 43 секунды:
Сделал чтоб можно было выбрать PostgreSQL 7.x/8.x. Но на стадии forum/install/index.php?mode=install&sub=database выдает пустую страницу(после ввода сервера название базы логина пароля )

хак сделал в forum/includes/functions_install.php

	/*
 	 * Хак для установки PostgreSQL 9.0.2
 	 *
 	 */

	$available_dbms["postgres"]["AVAILABLE"] = TRUE;



на 194 строчке кода

mishanon
phpBB 1.0.0
 
Сообщения: 4
Зарегистрирован: 09.02.2011 18:51
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Установка phpBB на хостинге с PostgreSQL 9

Сообщение nissin » 10.02.2011 19:09

Нужен без PDO.
Всё повторяется. nurlan.info
Аватара пользователя
nissin
Поддержка
Поддержка
 
Сообщения: 1381
Зарегистрирован: 16.12.2007 15:01
Откуда: Павлодар
Благодарил (а): 1 раз.
Поблагодарили: 124 раз.

Re: Установка phpBB на хостинге с PostgreSQL 9

Сообщение mishanon » 15.02.2011 23:05

Переписал includes/db/postgres.php
чтоб работал с PDO и с 9 версией ;)

<?php
/**
*
* @package dbal
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/*

pg_escape_string => http://ru.php.net/manual/en/pdo.quote.php

è pg_result_seek => âñåãäà TRUE

@sql_rowset

*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

include_once($phpbb_root_path . 'includes/db/dbal.' . $phpEx);

/**
* PostgreSQL Database Abstraction Layer
* Minimum Requirement is Version 7.3+
* @package dbal
*/
class dbal_postgres extends dbal
{
	var $last_query_text = '';

	/**
	* Connect to server
	*/
	function sql_connect($sqlserver, $sqluser, $sqlpassword, $database, $port = false, $persistency = false, $new_link = false)
	{

		$connect_string = '';

		if ($sqluser)
		{
			$connect_string .= "user=$sqluser ";
		}

		if ($sqlpassword)
		{
			$connect_string .= "password=$sqlpassword ";
		}

		if ($sqlserver)
		{
			// $sqlserver can carry a port separated by : for compatibility reasons
			// If $sqlserver has more than one : it's probably an IPv6 address.
			// In this case we only allow passing a port via the $port variable.
			if (substr_count($sqlserver, ':') === 1)
			{
				list($sqlserver, $port) = explode(':', $sqlserver);
			}

			if ($sqlserver !== 'localhost')
			{
				$connect_string .= "host=$sqlserver ";
			}

			if ($port)
			{
				$connect_string .= "port=$port ";
			}
		}

		$schema = '';

		if ($database)
		{
			$this->dbname = $database;
			if (strpos($database, '.') !== false)
			{
				list($database, $schema) = explode('.', $database);
			}
			$connect_string .= "dbname=$database";
		}

		$this->persistency = $persistency;

		if ($this->persistency)
		{
			//$this->db_connect_id = (!$new_link) ? @pg_pconnect($connect_string) : @pg_pconnect($connect_string, PGSQL_CONNECT_FORCE_NEW);
			$this->db_connect_id = (!$new_link) ? @new PDO("pgsql:host=$sqlserver;dbname=$database", "$sqluser", "$sqlpassword") : @new PDO("pgsql:host=$sqlserver;dbname=$database", "$sqluser", "$sqlpassword");
		}
		else
		{
			//$this->db_connect_id = (!$new_link) ? @pg_connect($connect_string) : @pg_connect($connect_string, PGSQL_CONNECT_FORCE_NEW);
			$this->db_connect_id = (!$new_link) ? @new PDO("pgsql:host=$sqlserver;dbname=$database", "$sqluser", "$sqlpassword") : @new PDO("pgsql:host=$sqlserver;dbname=$database", "$sqluser", "$sqlpassword");
		}

		if ($this->db_connect_id)
		{
			if (version_compare($this->sql_server_info(true), '9.1', '>='))
			{
				$this->multi_insert = true;
			}

			if ($schema !== '')
			{
				//@pg_query($this->db_connect_id, 'SET search_path TO ' . $schema);
				@$this->db_connect_id->query('SET search_path TO ' . $schema);
			}
			return $this->db_connect_id;
		}

		return $this->sql_error('');
	}

	/**
	* Version information about used database
	* @param bool $raw if true, only return the fetched sql_server_version
	* @param bool $use_cache If true, it is safe to retrieve the value from the cache
	* @return string sql server version
	*/
	function sql_server_info($raw = false, $use_cache = true)
	{
		global $cache;

		if (!$use_cache || empty($cache) || ($this->sql_server_version = $cache->get('pgsql_version')) === false)
		{
			/*
			$query_id = @pg_query($this->db_connect_id, 'SELECT VERSION() AS version');
			$row = @pg_fetch_assoc($query_id, null);
			@pg_free_result($query_id);
			*/
			$query_id = @$this->db_connect_id->query('SELECT VERSION() AS version');
			$row = @$query_id->fetch(PDO::FETCH_ASSOC);
			$query_id = null;



			$this->sql_server_version = (!empty($row['version'])) ? trim(substr($row['version'], 10)) : 0;

			if (!empty($cache) && $use_cache)
			{
				$cache->put('pgsql_version', $this->sql_server_version);
			}
		}

		return ($raw) ? $this->sql_server_version : 'PostgreSQL ' . $this->sql_server_version;
	}

	/**
	* SQL Transaction
	* @access private
	*/
	function _sql_transaction($status = 'begin')
	{
		switch ($status)
		{
			case 'begin':
				//return @pg_query($this->db_connect_id, 'BEGIN');
				return @$this->db_connect_id->beginTransaction();
			break;

			case 'commit':
				//return @pg_query($this->db_connect_id, 'COMMIT');
				return @$this->db_connect_id->commit();
			break;

			case 'rollback':
				//return @pg_query($this->db_connect_id, 'ROLLBACK');
				return @$this->db_connect_id->rollBack();
			break;
		}

		return true;
	}

	/**
	* Base query method
	*
	* @param	string	$query		Contains the SQL query which shall be executed
	* @param	int		$cache_ttl	Either 0 to avoid caching or the time in seconds which the result shall be kept in cache
	* @return	mixed				When casted to bool the returned value returns true on success and false on failure
	*
	* @access	public
	*/
	function sql_query($query = '', $cache_ttl = 0)
	{
		if ($query != '')
		{
			global $cache;

			// EXPLAIN only in extra debug mode
			if (defined('DEBUG_EXTRA'))
			{
				$this->sql_report('start', $query);
			}

			$this->last_query_text = $query;
			$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
			$this->sql_add_num_queries($this->query_result);

			if ($this->query_result === false)
			{
//				if (($this->query_result = @pg_query($this->db_connect_id, $query)) === false)
				if (($this->query_result = @$this->db_connect_id->query($query)) === false)
				{
					$this->sql_error($query);
				}

				if (defined('DEBUG_EXTRA'))
				{
					$this->sql_report('stop', $query);
				}

				if ($cache_ttl && method_exists($cache, 'sql_save'))
				{
					$this->open_queries[(int) $this->query_result] = $this->query_result;
					$cache->sql_save($query, $this->query_result, $cache_ttl);
				}
				else if (strpos($query, 'SELECT') === 0 && $this->query_result)
				{
					$this->open_queries[(int) $this->query_result] = $this->query_result;
				}
			}
			else if (defined('DEBUG_EXTRA'))
			{
				$this->sql_report('fromcache', $query);
			}
		}
		else
		{
			return false;
		}

		return $this->query_result;
	}

	/**
	* Build db-specific query data
	* @access private
	*/
	function _sql_custom_build($stage, $data)
	{
		return $data;
	}

	/**
	* Build LIMIT query
	*/
	function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0)
	{
		$this->query_result = false;

		// if $total is set to 0 we do not want to limit the number of rows
		if ($total == 0)
		{
			$total = 'ALL';
		}

		$query .= "\n LIMIT $total OFFSET $offset";

		return $this->sql_query($query, $cache_ttl);
	}

	/**
	* Return number of affected rows
	*/
	function sql_affectedrows()
	{
		//return ($this->query_result) ? @pg_affected_rows($this->query_result) : false;
		return ($this->query_result) ? @$this->query_result->rowCount() : false;
	}

	/**
	* Fetch current row
	*/
	function sql_fetchrow($query_id = false)
	{
		global $cache;

		if ($query_id === false)
		{
			$query_id = $this->query_result;
		}

		if (@isset($cache->sql_rowset[$query_id]))
		{
			return $cache->sql_fetchrow($query_id);
		}

		//return ($query_id !== false) ? @pg_fetch_assoc($query_id, null) : false;
		return ($query_id !== false) ? @$query_id->fetch(PDO::FETCH_ASSOC) : false;
	}

	/**
	* Seek to given row number
	* rownum is zero-based
	*/
	function sql_rowseek($rownum, &$query_id)
	{
		global $cache;

		if ($query_id === false)
		{
			$query_id = $this->query_result;
		}

		if (@isset($cache->sql_rowset[$query_id]))
		{
			return $cache->sql_rowseek($rownum, $query_id);
		}

		//return ($query_id !== false) ? @pg_result_seek($query_id, $rownum) : false;
		return true;
	}

	/**
	* Get last inserted id after insert statement
	*/
	function sql_nextid()
	{
		$query_id = $this->query_result;

		if ($query_id !== false && $this->last_query_text != '')
		{
			if (preg_match("/^INSERT[\t\n ]+INTO[\t\n ]+([a-z0-9\_\-]+)/is", $this->last_query_text, $tablename))
			{
				$query = "SELECT currval('" . $tablename[1] . "_seq') AS last_value";
				//$temp_q_id = @pg_query($this->db_connect_id, $query);
				$temp_q_id = @$this->db_connect_id->query($query);

				if (!$temp_q_id)
				{
					return false;
				}

				//$temp_result = @pg_fetch_assoc($temp_q_id, NULL);
				//@pg_free_result($query_id);
				$temp_result = @$temp_q_id->fetch(PDO::FETCH_ASSOC);
				$temp_q_id = null;

				return ($temp_result) ? $temp_result['last_value'] : false;
			}
		}

		return false;
	}

	/**
	* Free sql result
	*/
	function sql_freeresult($query_id = false)
	{
		global $cache;

		if ($query_id === false)
		{
			$query_id = $this->query_result;
		}

		if (@isset($cache->sql_rowset[$query_id]))
		{
			return $cache->sql_freeresult($query_id);
		}

		if (isset($this->open_queries[(int) $query_id]))
		{
			unset($this->open_queries[(int) $query_id]);
			//return @pg_free_result($query_id);
			return $query_id = null;
		}

		return false;
	}

	/**
	* Escape string used in sql query
	* Note: Do not use for bytea values if we may use them at a later stage
	*/
	function sql_escape($msg)
	{
		//return @pg_escape_string($msg);
		//return @$this->db_connect_id->quote($msg);
		return $msg;
		/**
		*  Íàïèñàòü ñâîé escape
		*/
	}

	/**
	* Build LIKE expression
	* @access private
	*/
	function _sql_like_expression($expression)
	{
		return $expression;
	}

	/**
	* return sql error array
	* @access private
	*/
	function _sql_error()
	{
		return array(
			//'message'	=> (!$this->db_connect_id) ? @pg_last_error() : @pg_last_error($this->db_connect_id),
			'message'	=> (!$this->db_connect_id) ? '' : @$this->db_connect_id->errorInfo(),
			'code'		=> (!$this->db_connect_id) ? '' : @$this->db_connect_id->errorCode()
		);
	}

	/**
	* Close sql connection
	* @access private
	*/
	function _sql_close()
	{
		//return @pg_close($this->db_connect_id);
		$this->db_connect_id = null;
		return TRUE;
	}

	/**
	* Build db-specific report
	* @access private
	*/
	function _sql_report($mode, $query = '')
	{
		switch ($mode)
		{
			case 'start':

				$explain_query = $query;
				if (preg_match('/UPDATE ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m))
				{
					$explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2];
				}
				else if (preg_match('/DELETE FROM ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m))
				{
					$explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2];
				}

				if (preg_match('/^SELECT/', $explain_query))
				{
					$html_table = false;
					//if ($result = @pg_query($this->db_connect_id, "EXPLAIN $explain_query"))
					if ($result = @$this->db_connect_id->query("EXPLAIN $explain_query"))
					{
//						while ($row = @pg_fetch_assoc($result, NULL))
						while ($row = @$result->fetch(PDO::FETCH_ASSOC))
						{
							$html_table = $this->sql_report('add_select_row', $query, $html_table, $row);
						}
					}
//					@pg_free_result($result);
					$result = null;

					if ($html_table)
					{
						$this->html_hold .= '</table>';
					}
				}

			break;

			case 'fromcache':
				$endtime = explode(' ', microtime());
				$endtime = $endtime[0] + $endtime[1];

//				$result = @pg_query($this->db_connect_id, $query);
				$result = @$this->db_connect_id->query($query);
//				while ($void = @pg_fetch_assoc($result, NULL))
				while ($void = @$result->fetch(PDO::FETCH_ASSOC))
				{
					// Take the time spent on parsing rows into account
				}
//				@pg_free_result($result);
				$result = null;

				$splittime = explode(' ', microtime());
				$splittime = $splittime[0] + $splittime[1];

				$this->sql_report('record_fromcache', $query, $endtime, $splittime);

			break;
		}
	}
}

?>


И вправил в forum/includes/functions_install.php чтоб работал с 9 версией

	
$available_dbms["postgres"]=  array(
			'LABEL'			=> 'PostgreSQL 7.x/8.x',
			'SCHEMA'		=> 'postgres',
			'MODULE'		=> 'pgsql',
			'DELIM'			=> ';',
			'COMMENTS'		=> 'remove_comments',
			'DRIVER'		=> 'postgres',
			'AVAILABLE'		=> true,
			'2.0.x'			=> true,
		);


Это нужно вставить в 197 строку кода

ENJOY!!

Поставил без проблем

mishanon
phpBB 1.0.0
 
Сообщения: 4
Зарегистрирован: 09.02.2011 18:51
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Установка phpBB на хостинге с PostgreSQL 9

Сообщение mishanon » 16.02.2011 12:20

Файлы в архиве
Вложения
files_MOD_PDO_Postgres_9.rar
files_MOD_PDO_Postgres_9
(7.9 КБ) Скачиваний: 32

mishanon
phpBB 1.0.0
 
Сообщения: 4
Зарегистрирован: 09.02.2011 18:51
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Установка phpBB на хостинге с PostgreSQL 9

Сообщение anon » 12.05.2011 3:22

mishanon писал(а):ENJOY!!

Поставил без проблем

а как вы поступили с полнотексовым поиском? fulltext_postgresql отсюда http://area51.phpbb.com/phpBB/viewtopic.php?f=4&t=28707 не работает кажется с 3.0.5. лично у меня нет необходимых навыков чтобы его допилить до рабочего состояния, может быть вы сможете? ;-)

anon
phpBB 1.2.1
 
Сообщения: 24
Зарегистрирован: 25.01.2010 13:45
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.


Вернуться в Поддержка phpBB 3.0.х

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы