phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / functions_install.php

History | View | Annotate | Download (12.6 kB)

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