phpBB
Statistics
| Revision:

root / trunk / phpBB / includes / functions_install.php

History | View | Annotate | Download (13.8 kB)

1 6995 naderman
<?php
2 7736 acydburn
/**
3 6995 naderman
*
4 6995 naderman
* @package install
5 7736 acydburn
* @copyright (c) 2006 phpBB Group
6 11653 git-gate
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
7 6995 naderman
*
8 6995 naderman
*/
9 6995 naderman
10 6995 naderman
/**
11 8146 acydburn
* @ignore
12 8146 acydburn
*/
13 8146 acydburn
if (!defined('IN_PHPBB'))
14 8146 acydburn
{
15 8146 acydburn
        exit;
16 8146 acydburn
}
17 8146 acydburn
18 8146 acydburn
/**
19 6995 naderman
* Determine if we are able to load a specified PHP module and do so if possible
20 6995 naderman
*/
21 6995 naderman
function can_load_dll($dll)
22 6995 naderman
{
23 9618 toonarmy
        // SQLite2 is a tricky thing, from 5.0.0 it requires PDO; if PDO is not loaded we must state that SQLite is unavailable
24 9618 toonarmy
        // as the installer doesn't understand that the extension has a prerequisite.
25 10558 git-gate
        //
26 10558 git-gate
        // On top of this sometimes the SQLite extension is compiled for a different version of PDO
27 10558 git-gate
        // by some Linux distributions which causes phpBB to bomb out with a blank page.
28 10558 git-gate
        //
29 10558 git-gate
        // Net result we'll disable automatic inclusion of SQLite support
30 10558 git-gate
        //
31 10558 git-gate
        // See: r9618 and #56105
32 10558 git-gate
        if ($dll == 'sqlite')
33 9620 toonarmy
        {
34 9620 toonarmy
                return false;
35 9620 toonarmy
        }
36 9518 toonarmy
        return ((@ini_get('enable_dl') || strtolower(@ini_get('enable_dl')) == 'on') && (!@ini_get('safe_mode') || strtolower(@ini_get('safe_mode')) == 'off') && function_exists('dl') && @dl($dll . '.' . PHP_SHLIB_SUFFIX)) ? true : false;
37 6995 naderman
}
38 6995 naderman
39 6995 naderman
/**
40 6995 naderman
* Returns an array of available DBMS with some data, if a DBMS is specified it will only
41 6995 naderman
* return data for that DBMS and will load its extension if necessary.
42 6995 naderman
*/
43 6996 naderman
function get_available_dbms($dbms = false, $return_unavailable = false, $only_20x_options = false)
44 6995 naderman
{
45 7718 kellanved
        global $lang;
46 6995 naderman
        $available_dbms = array(
47 6995 naderman
                'firebird'        => array(
48 6995 naderman
                        'LABEL'                        => 'FireBird',
49 6995 naderman
                        'SCHEMA'                => 'firebird',
50 8146 acydburn
                        'MODULE'                => 'interbase',
51 6995 naderman
                        'DELIM'                        => ';;',
52 6995 naderman
                        'DRIVER'                => 'firebird',
53 6995 naderman
                        'AVAILABLE'                => true,
54 6996 naderman
                        '2.0.x'                        => false,
55 6995 naderman
                ),
56 6995 naderman
                'mysqli'        => array(
57 6995 naderman
                        'LABEL'                        => 'MySQL with MySQLi Extension',
58 6995 naderman
                        'SCHEMA'                => 'mysql_41',
59 6995 naderman
                        'MODULE'                => 'mysqli',
60 6995 naderman
                        'DELIM'                        => ';',
61 6995 naderman
                        'DRIVER'                => 'mysqli',
62 6995 naderman
                        'AVAILABLE'                => true,
63 6996 naderman
                        '2.0.x'                        => true,
64 6995 naderman
                ),
65 6995 naderman
                'mysql'                => array(
66 6995 naderman
                        'LABEL'                        => 'MySQL',
67 6995 naderman
                        'SCHEMA'                => 'mysql',
68 8146 acydburn
                        'MODULE'                => 'mysql',
69 6995 naderman
                        'DELIM'                        => ';',
70 6995 naderman
                        'DRIVER'                => 'mysql',
71 6995 naderman
                        'AVAILABLE'                => true,
72 6996 naderman
                        '2.0.x'                        => true,
73 6995 naderman
                ),
74 6995 naderman
                'mssql'                => array(
75 6995 naderman
                        'LABEL'                        => 'MS SQL Server 2000+',
76 6995 naderman
                        'SCHEMA'                => 'mssql',
77 8146 acydburn
                        'MODULE'                => 'mssql',
78 6995 naderman
                        'DELIM'                        => 'GO',
79 6995 naderman
                        'DRIVER'                => 'mssql',
80 6995 naderman
                        'AVAILABLE'                => true,
81 6996 naderman
                        '2.0.x'                        => true,
82 6995 naderman
                ),
83 6995 naderman
                'mssql_odbc'=>        array(
84 6995 naderman
                        'LABEL'                        => 'MS SQL Server [ ODBC ]',
85 6995 naderman
                        'SCHEMA'                => 'mssql',
86 8146 acydburn
                        'MODULE'                => 'odbc',
87 6995 naderman
                        'DELIM'                        => 'GO',
88 6995 naderman
                        'DRIVER'                => 'mssql_odbc',
89 6995 naderman
                        'AVAILABLE'                => true,
90 6996 naderman
                        '2.0.x'                        => true,
91 6995 naderman
                ),
92 10558 git-gate
                'mssqlnative'                => array(
93 10558 git-gate
                        'LABEL'                        => 'MS SQL Server 2005+ [ Native ]',
94 10558 git-gate
                        'SCHEMA'                => 'mssql',
95 10558 git-gate
                        'MODULE'                => 'sqlsrv',
96 10558 git-gate
                        'DELIM'                        => 'GO',
97 10558 git-gate
                        'DRIVER'                => 'mssqlnative',
98 10558 git-gate
                        'AVAILABLE'                => true,
99 10558 git-gate
                        '2.0.x'                        => false,
100 11477 git-gate
                ),
101 6995 naderman
                'oracle'        =>        array(
102 6995 naderman
                        'LABEL'                        => 'Oracle',
103 6995 naderman
                        'SCHEMA'                => 'oracle',
104 8146 acydburn
                        'MODULE'                => 'oci8',
105 6995 naderman
                        'DELIM'                        => '/',
106 6995 naderman
                        'DRIVER'                => 'oracle',
107 6995 naderman
                        'AVAILABLE'                => true,
108 6996 naderman
                        '2.0.x'                        => false,
109 6995 naderman
                ),
110 6995 naderman
                'postgres' => array(
111 6995 naderman
                        'LABEL'                        => 'PostgreSQL 7.x/8.x',
112 6995 naderman
                        'SCHEMA'                => 'postgres',
113 8146 acydburn
                        'MODULE'                => 'pgsql',
114 6995 naderman
                        'DELIM'                        => ';',
115 6995 naderman
                        'DRIVER'                => 'postgres',
116 6995 naderman
                        'AVAILABLE'                => true,
117 6996 naderman
                        '2.0.x'                        => true,
118 6995 naderman
                ),
119 6995 naderman
                'sqlite'                => array(
120 6995 naderman
                        'LABEL'                        => 'SQLite',
121 6995 naderman
                        'SCHEMA'                => 'sqlite',
122 8146 acydburn
                        'MODULE'                => 'sqlite',
123 6995 naderman
                        'DELIM'                        => ';',
124 6995 naderman
                        'DRIVER'                => 'sqlite',
125 6995 naderman
                        'AVAILABLE'                => true,
126 6996 naderman
                        '2.0.x'                        => false,
127 6995 naderman
                ),
128 6995 naderman
        );
129 6995 naderman
130 6995 naderman
        if ($dbms)
131 6995 naderman
        {
132 6995 naderman
                if (isset($available_dbms[$dbms]))
133 6995 naderman
                {
134 6995 naderman
                        $available_dbms = array($dbms => $available_dbms[$dbms]);
135 6995 naderman
                }
136 6995 naderman
                else
137 6995 naderman
                {
138 6995 naderman
                        return array();
139 6995 naderman
                }
140 6995 naderman
        }
141 6995 naderman
142 6995 naderman
        // now perform some checks whether they are really available
143 6995 naderman
        foreach ($available_dbms as $db_name => $db_ary)
144 6995 naderman
        {
145 6996 naderman
                if ($only_20x_options && !$db_ary['2.0.x'])
146 6996 naderman
                {
147 6996 naderman
                        if ($return_unavailable)
148 6996 naderman
                        {
149 6996 naderman
                                $available_dbms[$db_name]['AVAILABLE'] = false;
150 6996 naderman
                        }
151 6996 naderman
                        else
152 6996 naderman
                        {
153 6996 naderman
                                unset($available_dbms[$db_name]);
154 6996 naderman
                        }
155 6996 naderman
                        continue;
156 6996 naderman
                }
157 6996 naderman
158 6995 naderman
                $dll = $db_ary['MODULE'];
159 6995 naderman
160 6995 naderman
                if (!@extension_loaded($dll))
161 6995 naderman
                {
162 6995 naderman
                        if (!can_load_dll($dll))
163 6995 naderman
                        {
164 6995 naderman
                                if ($return_unavailable)
165 6995 naderman
                                {
166 6995 naderman
                                        $available_dbms[$db_name]['AVAILABLE'] = false;
167 6995 naderman
                                }
168 6995 naderman
                                else
169 6995 naderman
                                {
170 6995 naderman
                                        unset($available_dbms[$db_name]);
171 6995 naderman
                                }
172 6995 naderman
                                continue;
173 6995 naderman
                        }
174 6995 naderman
                }
175 6995 naderman
                $any_db_support = true;
176 6995 naderman
        }
177 6995 naderman
178 6995 naderman
        if ($return_unavailable)
179 6995 naderman
        {
180 6995 naderman
                $available_dbms['ANY_DB_SUPPORT'] = $any_db_support;
181 6995 naderman
        }
182 6995 naderman
        return $available_dbms;
183 6995 naderman
}
184 6995 naderman
185 6995 naderman
/**
186 6995 naderman
* Generate the drop down of available database options
187 6995 naderman
*/
188 6996 naderman
function dbms_select($default = '', $only_20x_options = false)
189 6995 naderman
{
190 7718 kellanved
        global $lang;
191 9970 acydburn
192 6996 naderman
        $available_dbms = get_available_dbms(false, false, $only_20x_options);
193 6995 naderman
        $dbms_options = '';
194 6995 naderman
        foreach ($available_dbms as $dbms_name => $details)
195 6995 naderman
        {
196 6995 naderman
                $selected = ($dbms_name == $default) ? ' selected="selected"' : '';
197 7718 kellanved
                $dbms_options .= '<option value="' . $dbms_name . '"' . $selected .'>' . $lang['DLL_' . strtoupper($dbms_name)] . '</option>';
198 6995 naderman
        }
199 6995 naderman
        return $dbms_options;
200 6995 naderman
}
201 6995 naderman
202 7015 davidmj
/**
203 7015 davidmj
* Get tables of a database
204 11478 git-gate
*
205 11478 git-gate
* @deprecated
206 7015 davidmj
*/
207 11478 git-gate
function get_tables(&$db)
208 7015 davidmj
{
209 11478 git-gate
        if (!class_exists('phpbb_db_tools'))
210 7015 davidmj
        {
211 11478 git-gate
                global $phpbb_root_path, $phpEx;
212 11478 git-gate
                require($phpbb_root_path . 'includes/db/db_tools.' . $phpEx);
213 7015 davidmj
        }
214 7015 davidmj
215 11478 git-gate
        $db_tools = new phpbb_db_tools($db);
216 7015 davidmj
217 11478 git-gate
        return $db_tools->sql_list_tables();
218 7015 davidmj
}
219 7015 davidmj
220 6995 naderman
/**
221 6995 naderman
* Used to test whether we are able to connect to the database the user has specified
222 6995 naderman
* and identify any problems (eg there are already tables with the names we want to use
223 6995 naderman
* @param        array        $dbms should be of the format of an element of the array returned by {@link get_available_dbms get_available_dbms()}
224 6995 naderman
*                                        necessary extensions should be loaded already
225 6995 naderman
*/
226 8248 acydburn
function connect_check_db($error_connect, &$error, $dbms_details, $table_prefix, $dbhost, $dbuser, $dbpasswd, $dbname, $dbport, $prefix_may_exist = false, $load_dbal = true, $unicode_check = true)
227 6995 naderman
{
228 6995 naderman
        global $phpbb_root_path, $phpEx, $config, $lang;
229 6995 naderman
230 8248 acydburn
        $dbms = $dbms_details['DRIVER'];
231 8248 acydburn
232 6995 naderman
        if ($load_dbal)
233 6995 naderman
        {
234 6995 naderman
                // Include the DB layer
235 8248 acydburn
                include($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
236 6995 naderman
        }
237 6995 naderman
238 6995 naderman
        // Instantiate it and set return on error true
239 8248 acydburn
        $sql_db = 'dbal_' . $dbms;
240 6995 naderman
        $db = new $sql_db();
241 6995 naderman
        $db->sql_return_on_error(true);
242 6995 naderman
243 6995 naderman
        // Check that we actually have a database name before going any further.....
244 8248 acydburn
        if ($dbms_details['DRIVER'] != 'sqlite' && $dbms_details['DRIVER'] != 'oracle' && $dbname === '')
245 6995 naderman
        {
246 6995 naderman
                $error[] = $lang['INST_ERR_DB_NO_NAME'];
247 6995 naderman
                return false;
248 6995 naderman
        }
249 6995 naderman
250 6995 naderman
        // Make sure we don't have a daft user who thinks having the SQLite database in the forum directory is a good idea
251 8248 acydburn
        if ($dbms_details['DRIVER'] == 'sqlite' && stripos(phpbb_realpath($dbhost), phpbb_realpath('../')) === 0)
252 6995 naderman
        {
253 6995 naderman
                $error[] = $lang['INST_ERR_DB_FORUM_PATH'];
254 6995 naderman
                return false;
255 6995 naderman
        }
256 6995 naderman
257 6995 naderman
        // Check the prefix length to ensure that index names are not too long and does not contain invalid characters
258 8248 acydburn
        switch ($dbms_details['DRIVER'])
259 6995 naderman
        {
260 6995 naderman
                case 'mysql':
261 6995 naderman
                case 'mysqli':
262 8507 davidmj
                        if (strspn($table_prefix, '-./\\') !== 0)
263 6995 naderman
                        {
264 6995 naderman
                                $error[] = $lang['INST_ERR_PREFIX_INVALID'];
265 6995 naderman
                                return false;
266 6995 naderman
                        }
267 6995 naderman
268 6995 naderman
                // no break;
269 6995 naderman
270 6995 naderman
                case 'postgres':
271 6995 naderman
                        $prefix_length = 36;
272 6995 naderman
                break;
273 6995 naderman
274 6995 naderman
                case 'mssql':
275 6995 naderman
                case 'mssql_odbc':
276 10558 git-gate
                case 'mssqlnative':
277 6995 naderman
                        $prefix_length = 90;
278 6995 naderman
                break;
279 6995 naderman
280 6995 naderman
                case 'sqlite':
281 6995 naderman
                        $prefix_length = 200;
282 6995 naderman
                break;
283 6995 naderman
284 6995 naderman
                case 'firebird':
285 6995 naderman
                case 'oracle':
286 6995 naderman
                        $prefix_length = 6;
287 6995 naderman
                break;
288 6995 naderman
        }
289 6995 naderman
290 6995 naderman
        if (strlen($table_prefix) > $prefix_length)
291 6995 naderman
        {
292 6995 naderman
                $error[] = sprintf($lang['INST_ERR_PREFIX_TOO_LONG'], $prefix_length);
293 6995 naderman
                return false;
294 6995 naderman
        }
295 6995 naderman
296 6995 naderman
        // Try and connect ...
297 7009 davidmj
        if (is_array($db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, true)))
298 6995 naderman
        {
299 6995 naderman
                $db_error = $db->sql_error();
300 6995 naderman
                $error[] = $lang['INST_ERR_DB_CONNECT'] . '<br />' . (($db_error['message']) ? $db_error['message'] : $lang['INST_ERR_DB_NO_ERROR']);
301 6995 naderman
        }
302 6995 naderman
        else
303 6995 naderman
        {
304 7015 davidmj
                // Likely matches for an existing phpBB installation
305 7015 davidmj
                if (!$prefix_may_exist)
306 6995 naderman
                {
307 6995 naderman
                        $temp_prefix = strtolower($table_prefix);
308 6995 naderman
                        $table_ary = array($temp_prefix . 'attachments', $temp_prefix . 'config', $temp_prefix . 'sessions', $temp_prefix . 'topics', $temp_prefix . 'users');
309 6995 naderman
310 7015 davidmj
                        $tables = get_tables($db);
311 7893 davidmj
                        $tables = array_map('strtolower', $tables);
312 7015 davidmj
                        $table_intersect = array_intersect($tables, $table_ary);
313 7015 davidmj
314 7015 davidmj
                        if (sizeof($table_intersect))
315 6995 naderman
                        {
316 7015 davidmj
                                $error[] = $lang['INST_ERR_PREFIX'];
317 6995 naderman
                        }
318 6995 naderman
                }
319 6995 naderman
320 6995 naderman
                // Make sure that the user has selected a sensible DBAL for the DBMS actually installed
321 8248 acydburn
                switch ($dbms_details['DRIVER'])
322 6995 naderman
                {
323 6995 naderman
                        case 'mysqli':
324 6995 naderman
                                if (version_compare(mysqli_get_server_info($db->db_connect_id), '4.1.3', '<'))
325 6995 naderman
                                {
326 6995 naderman
                                        $error[] = $lang['INST_ERR_DB_NO_MYSQLI'];
327 6995 naderman
                                }
328 6995 naderman
                        break;
329 6995 naderman
330 6995 naderman
                        case 'sqlite':
331 6995 naderman
                                if (version_compare(sqlite_libversion(), '2.8.2', '<'))
332 6995 naderman
                                {
333 6995 naderman
                                        $error[] = $lang['INST_ERR_DB_NO_SQLITE'];
334 6995 naderman
                                }
335 6995 naderman
                        break;
336 6995 naderman
337 6995 naderman
                        case 'firebird':
338 6995 naderman
                                // check the version of FB, use some hackery if we can't get access to the server info
339 6995 naderman
                                if ($db->service_handle !== false && function_exists('ibase_server_info'))
340 6995 naderman
                                {
341 6995 naderman
                                        $val = @ibase_server_info($db->service_handle, IBASE_SVC_SERVER_VERSION);
342 6995 naderman
                                        preg_match('#V([\d.]+)#', $val, $match);
343 6995 naderman
                                        if ($match[1] < 2)
344 6995 naderman
                                        {
345 6995 naderman
                                                $error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
346 6995 naderman
                                        }
347 6995 naderman
                                        $db_info = @ibase_db_info($db->service_handle, $dbname, IBASE_STS_HDR_PAGES);
348 6995 naderman
349 6995 naderman
                                        preg_match('/^\\s*Page size\\s*(\\d+)/m', $db_info, $regs);
350 6995 naderman
                                        $page_size = intval($regs[1]);
351 6995 naderman
                                        if ($page_size < 8192)
352 6995 naderman
                                        {
353 6995 naderman
                                                $error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS'];
354 6995 naderman
                                        }
355 6995 naderman
                                }
356 6995 naderman
                                else
357 6995 naderman
                                {
358 6995 naderman
                                        $sql = "SELECT *
359 6995 naderman
                                                FROM RDB$FUNCTIONS
360 6995 naderman
                                                WHERE RDB$SYSTEM_FLAG IS NULL
361 6995 naderman
                                                        AND RDB$FUNCTION_NAME = 'CHAR_LENGTH'";
362 6995 naderman
                                        $result = $db->sql_query($sql);
363 6995 naderman
                                        $row = $db->sql_fetchrow($result);
364 6995 naderman
                                        $db->sql_freeresult($result);
365 6995 naderman
366 6995 naderman
                                        // if its a UDF, its too old
367 6995 naderman
                                        if ($row)
368 6995 naderman
                                        {
369 6995 naderman
                                                $error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
370 6995 naderman
                                        }
371 6995 naderman
                                        else
372 6995 naderman
                                        {
373 9970 acydburn
                                                $sql = 'SELECT 1 FROM RDB$DATABASE
374 9970 acydburn
                                                        WHERE BIN_AND(10, 1) = 0';
375 6995 naderman
                                                $result = $db->sql_query($sql);
376 9970 acydburn
                                                if (!$result) // This can only fail if BIN_AND is not defined
377 6995 naderman
                                                {
378 6995 naderman
                                                        $error[] = $lang['INST_ERR_DB_NO_FIREBIRD'];
379 6995 naderman
                                                }
380 6995 naderman
                                                $db->sql_freeresult($result);
381 6995 naderman
                                        }
382 6995 naderman
383 6995 naderman
                                        // Setup the stuff for our random table
384 6995 naderman
                                        $char_array = array_merge(range('A', 'Z'), range('0', '9'));
385 6995 naderman
                                        $char_len = mt_rand(7, 9);
386 6995 naderman
                                        $char_array_len = sizeof($char_array) - 1;
387 6995 naderman
388 6995 naderman
                                        $final = '';
389 6995 naderman
390 6995 naderman
                                        for ($i = 0; $i < $char_len; $i++)
391 6995 naderman
                                        {
392 6995 naderman
                                                $final .= $char_array[mt_rand(0, $char_array_len)];
393 6995 naderman
                                        }
394 6995 naderman
395 6995 naderman
                                        // Create some random table
396 6995 naderman
                                        $sql = 'CREATE TABLE ' . $final . " (
397 6995 naderman
                                                FIELD1 VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE,
398 6995 naderman
                                                FIELD2 INTEGER DEFAULT 0 NOT NULL);";
399 6995 naderman
                                        $db->sql_query($sql);
400 6995 naderman
401 6995 naderman
                                        // Create an index that should fail if the page size is less than 8192
402 6995 naderman
                                        $sql = 'CREATE INDEX ' . $final . ' ON ' . $final . '(FIELD1, FIELD2);';
403 6995 naderman
                                        $db->sql_query($sql);
404 6995 naderman
405 6995 naderman
                                        if (ibase_errmsg() !== false)
406 6995 naderman
                                        {
407 6995 naderman
                                                $error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS'];
408 6995 naderman
                                        }
409 6995 naderman
                                        else
410 6995 naderman
                                        {
411 6995 naderman
                                                // Kill the old table
412 6995 naderman
                                                $db->sql_query('DROP TABLE ' . $final . ';');
413 6995 naderman
                                        }
414 6995 naderman
                                        unset($final);
415 6995 naderman
                                }
416 6995 naderman
                        break;
417 9970 acydburn
418 6995 naderman
                        case 'oracle':
419 7270 davidmj
                                if ($unicode_check)
420 6995 naderman
                                {
421 7270 davidmj
                                        $sql = "SELECT *
422 7270 davidmj
                                                FROM NLS_DATABASE_PARAMETERS
423 7270 davidmj
                                                WHERE PARAMETER = 'NLS_RDBMS_VERSION'
424 7270 davidmj
                                                        OR PARAMETER = 'NLS_CHARACTERSET'";
425 7270 davidmj
                                        $result = $db->sql_query($sql);
426 6995 naderman
427 7270 davidmj
                                        while ($row = $db->sql_fetchrow($result))
428 7270 davidmj
                                        {
429 7270 davidmj
                                                $stats[$row['parameter']] = $row['value'];
430 7270 davidmj
                                        }
431 7270 davidmj
                                        $db->sql_freeresult($result);
432 7270 davidmj
433 7270 davidmj
                                        if (version_compare($stats['NLS_RDBMS_VERSION'], '9.2', '<') && $stats['NLS_CHARACTERSET'] !== 'UTF8')
434 7270 davidmj
                                        {
435 7270 davidmj
                                                $error[] = $lang['INST_ERR_DB_NO_ORACLE'];
436 7270 davidmj
                                        }
437 6995 naderman
                                }
438 6995 naderman
                        break;
439 9970 acydburn
440 6995 naderman
                        case 'postgres':
441 7270 davidmj
                                if ($unicode_check)
442 7270 davidmj
                                {
443 7270 davidmj
                                        $sql = "SHOW server_encoding;";
444 7270 davidmj
                                        $result = $db->sql_query($sql);
445 7270 davidmj
                                        $row = $db->sql_fetchrow($result);
446 7270 davidmj
                                        $db->sql_freeresult($result);
447 6995 naderman
448 7270 davidmj
                                        if ($row['server_encoding'] !== 'UNICODE' && $row['server_encoding'] !== 'UTF8')
449 7270 davidmj
                                        {
450 7270 davidmj
                                                $error[] = $lang['INST_ERR_DB_NO_POSTGRES'];
451 7270 davidmj
                                        }
452 6995 naderman
                                }
453 6995 naderman
                        break;
454 6995 naderman
                }
455 6995 naderman
456 6995 naderman
        }
457 6995 naderman
458 6995 naderman
        if ($error_connect && (!isset($error) || !sizeof($error)))
459 6995 naderman
        {
460 6995 naderman
                return true;
461 6995 naderman
        }
462 6995 naderman
        return false;
463 6995 naderman
}
464 6995 naderman
465 7644 acydburn
/**
466 11610 git-gate
* Removes comments from schema files
467 7644 acydburn
*/
468 11610 git-gate
function remove_comments($sql)
469 7644 acydburn
{
470 11610 git-gate
        // Remove /* */ comments (http://ostermiller.org/findcomment.html)
471 11610 git-gate
        $sql = preg_replace('#/\*(.|[\r\n])*?\*/#', "\n", $sql);
472 11610 git-gate
473 11610 git-gate
        // Remove # style comments
474 7644 acydburn
        $sql = preg_replace('/\n{2,}/', "\n", preg_replace('/^#.*$/m', "\n", $sql));
475 11610 git-gate
476 11610 git-gate
        return $sql;
477 7644 acydburn
}
478 7644 acydburn
479 7644 acydburn
/**
480 7644 acydburn
* split_sql_file will split an uploaded sql file into single sql statements.
481 7644 acydburn
* Note: expects trim() to have already been run on $sql.
482 7644 acydburn
*/
483 7644 acydburn
function split_sql_file($sql, $delimiter)
484 7644 acydburn
{
485 7644 acydburn
        $sql = str_replace("\r" , '', $sql);
486 7644 acydburn
        $data = preg_split('/' . preg_quote($delimiter, '/') . '$/m', $sql);
487 7644 acydburn
488 7644 acydburn
        $data = array_map('trim', $data);
489 7644 acydburn
490 7644 acydburn
        // The empty case
491 7644 acydburn
        $end_data = end($data);
492 7644 acydburn
493 7644 acydburn
        if (empty($end_data))
494 7644 acydburn
        {
495 7644 acydburn
                unset($data[key($data)]);
496 7644 acydburn
        }
497 7644 acydburn
498 7644 acydburn
        return $data;
499 7644 acydburn
}
500 7644 acydburn
501 7644 acydburn
/**
502 7644 acydburn
* For replacing {L_*} strings with preg_replace_callback
503 7644 acydburn
*/
504 7644 acydburn
function adjust_language_keys_callback($matches)
505 7644 acydburn
{
506 7644 acydburn
        if (!empty($matches[1]))
507 7644 acydburn
        {
508 7644 acydburn
                global $lang, $db;
509 7644 acydburn
510 7644 acydburn
                return (!empty($lang[$matches[1]])) ? $db->sql_escape($lang[$matches[1]]) : $db->sql_escape($matches[1]);
511 7644 acydburn
        }
512 7644 acydburn
}
513 11477 git-gate
514 11477 git-gate
function phpbb_create_config_file_data($data, $dbms, $load_extensions, $debug = false)
515 11477 git-gate
{
516 11477 git-gate
        $load_extensions = implode(',', $load_extensions);
517 11477 git-gate
518 11477 git-gate
        $config_data = "<?php\n";
519 11477 git-gate
        $config_data .= "// phpBB 3.0.x auto-generated configuration file\n// Do not change anything in this file!\n";
520 11477 git-gate
521 11477 git-gate
        $config_data_array = array(
522 11477 git-gate
                'dbms'                        => $dbms,
523 11477 git-gate
                'dbhost'                => $data['dbhost'],
524 11477 git-gate
                'dbport'                => $data['dbport'],
525 11477 git-gate
                'dbname'                => $data['dbname'],
526 11477 git-gate
                'dbuser'                => $data['dbuser'],
527 11477 git-gate
                'dbpasswd'                => htmlspecialchars_decode($data['dbpasswd']),
528 11477 git-gate
                'table_prefix'        => $data['table_prefix'],
529 11477 git-gate
                'acm_type'                => 'file',
530 11477 git-gate
                'load_extensions'        => $load_extensions,
531 11477 git-gate
        );
532 11477 git-gate
533 11477 git-gate
        foreach ($config_data_array as $key => $value)
534 11477 git-gate
        {
535 11477 git-gate
                $config_data .= "\${$key} = '" . str_replace("'", "\\'", str_replace('\\', '\\\\', $value)) . "';\n";
536 11477 git-gate
        }
537 11477 git-gate
538 11477 git-gate
        $config_data .= "\n@define('PHPBB_INSTALLED', true);\n";
539 11477 git-gate
540 11477 git-gate
        if ($debug)
541 11477 git-gate
        {
542 11477 git-gate
                $config_data .= "@define('DEBUG', true);\n";
543 11477 git-gate
                $config_data .= "@define('DEBUG_EXTRA', true);\n";
544 11477 git-gate
        }
545 11477 git-gate
        else
546 11477 git-gate
        {
547 11477 git-gate
                $config_data .= "// @define('DEBUG', true);\n";
548 11477 git-gate
                $config_data .= "// @define('DEBUG_EXTRA', true);\n";
549 11477 git-gate
        }
550 11477 git-gate
551 11477 git-gate
        $config_data .= '?' . '>'; // Done this to prevent highlighting editors getting confused!
552 11477 git-gate
553 11477 git-gate
        return $config_data;
554 11477 git-gate
}