50000000) {
$no_mem_limit = 0;
}
}
define('max_a_len', filesize(__FILE__)); // needed for offsets
ignore_user_abort(true);
set_magic_quotes_runtime(0);
@set_time_limit(600);
$url_test = fud_ini_get('allow_url_fopen');
/* uncomment the line below if the installer stalls after the 1st page */
// $url_test = 0;
/* opening a connection to itself should not take more then 5 seconds */
fud_ini_set("default_socket_timeout", 5);
/* Determine SafeMode limitations */
define('SAFE_MODE', fud_ini_get('safe_mode'));
/* Determine open_basedir limitations */
define('open_basedir', ini_get('open_basedir'));
/* determine if magic_guotes_gpc are off */
$magic_guotes_gpc = get_magic_quotes_gpc();
/* mbstring hackery, necessary if function overload is enabled */
if (extension_loaded('mbstring') && ini_get("mbstring.func_overload") > 0) {
mb_internal_encoding('ASCII');
}
if (!isset($_SERVER['PATH_TRANSLATED'])) {
$_SERVER['PATH_TRANSLATED'] = isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : realpath(__FILE__);
}
$module_status = module_check();
if (strncmp(PHP_SAPI, 'apache', 6)) {
define('file_perms', 0644);
define('dir_perms', 0755);
} else {
define('file_perms', 0600);
define('dir_perms', 0711);
}
/* we need this for PDO in 5.0+ */
if (version_compare(PHP_VERSION, '5.0.0', '>=')) {
function ex_handle($ex) { seterr('DBHOST', $ex->getMessage()); }
set_exception_handler('ex_handle');
$GLOBALS['PDO'] = null;
function pdo_fetch($res) { return $res->fetch(PDO_FETCH_NUM); }
}
function module_check()
{
$status = array();
foreach (array('zlib', 'mysql', 'pdo_mysql', 'pdo_pgsql', 'pdo_sqlite', 'pgsql', 'pcre', 'pspell', 'posix') as $m) {
$status[$m] = extension_loaded($m);
}
return $status;
}
function initdb($init=0)
{
if (preg_match('![^A-Za-z0-9_]!', $_POST['DBHOST_TBL_PREFIX'])) {
exit("Corrupted database prefix!");
}
switch ($_POST['DBTYPE']) {
case 'mysql':
if (!($conn = mysql_connect($_POST['DBHOST'], $_POST['DBHOST_USER'], $_POST['DBHOST_PASSWORD']))) {
seterr('DBHOST', 'Failed to connect to the MySQL Server, SQL Reason: '.mysql_error());
}
define('__FUD_SQL_LNK__', $conn);
if (!mysql_select_db($_POST['DBHOST_DBNAME'], __FUD_SQL_LNK__)) {
seterr('DBHOST_DBNAME', 'Could not open the database you\'ve specified, SQL Reason: '.mysql_error());
}
break;
case 'pgsql':
$connect_str = '';
$vals = array('DBHOST' => 'host', 'DBHOST_USER' => 'user', 'DBHOST_PASSWORD' => 'password', 'DBHOST_DBNAME' => 'dbname');
foreach ($vals as $k => $v) {
if (!empty($_POST[$k])) {
$connect_str .= ' '.$v.'='.$_POST[$k];
}
}
if (!($conn = pg_connect(ltrim($connect_str)))) {
seterr('DBHOST', 'Failed to establish database connection to '.$_POST['DBHOST']);
}
define('__FUD_SQL_LNK__', $conn);
break;
case 'pdo_mysql':
if ($_POST['DBHOST']{0} == ':') {
$host = 'unix_socket='.substr($_POST['DBHOST'], 1);
} else {
$host = 'host='.$_POST['DBHOST'];
}
$dsn = 'mysql:'.$host.';dbname='.$_POST['DBHOST_DBNAME'];
$GLOBALS['PDO'] = new PDO($dsn, $_POST['DBHOST_USER'], $_POST['DBHOST_PASSWORD']);
break;
case 'pdo_pgsql':
$dsn = 'pgsql:';
$vals = array('DBHOST' => 'host', 'DBHOST_USER' => 'user', 'DBHOST_PASSWORD' => 'password', 'DBHOST_DBNAME' => 'dbname');
foreach ($vals as $k => $v) {
if (!empty($_POST[$k])) {
$dsn .= $v.'='.$_POST[$k].' ';
}
}
$GLOBALS['PDO'] = new PDO($dsn);
break;
case 'pdo_sqlite':
$_POST['DBHOST'] = $_POST['SERVER_DATA_ROOT'].'/forum.db.php';
if ($init) {
@unlink($_POST['DBHOST']);
}
$GLOBALS['PDO'] = new PDO('sqlite:'.$_POST['DBHOST']);
break;
default:
exit("Invalid DB Type.");
}
}
function dbquery($qry, $fetch=0)
{
if (!defined('__FUD_SQL_LNK__') && !$GLOBALS['PDO']) {
return FALSE;
}
switch ($_POST['DBTYPE']) {
case 'mysql':
return mysql_query($qry, __FUD_SQL_LNK__);
break;
case 'pgsql':
return pg_query(__FUD_SQL_LNK__, $qry);
break;
case 'pdo_mysql':
case 'pdo_pgsql':
case 'pdo_sqlite':
if (!$fetch) {
return ($GLOBALS['PDO']->exec($qry) !== FALSE);
} else {
return $GLOBALS['PDO']->query($qry);
}
break;
}
}
function dberror()
{
switch ($_POST['DBTYPE']) {
case 'mysql':
return mysql_error(__FUD_SQL_LNK__);
break;
case 'pgsql':
return pg_last_error(__FUD_SQL_LNK__);
break;
case 'pdo_mysql':
case 'pdo_pgsql':
case 'pdo_sqlite':
$err = $GLOBALS['PDO']->errorInfo();
return end($err);
break;
}
}
function dbperms_check()
{
$qry = array(
'CREATE TABLE fud_forum_install_test_table (test_val INT)',
'ALTER TABLE fud_forum_install_test_table ADD test_val2 INT',
array(
'mysql' => 'LOCK TABLES fud_forum_install_test_table WRITE',
'pgsql' => 'BEGIN WORK; COMMIT WORK'
),
'DROP TABLE fud_forum_install_test_table'
);
$err = array(
'FATAL ERROR: your %name% account does not have permissions to create new %name% tables.
Enable this functionality and restart the script.',
'FATAL ERROR: your %name% account does not have permissions to run ALTER queries on existing %name% tables
Enable this functionality and restart the script.',
'FATAL ERROR: your %name% account does not have permissions to run LOCK queries on existing %name% tables
Enable this functionality and restart the script.',
'FATAL ERROR: your %name% account does not have permissions to run DROP TABLE queries on existing %name% tables
Enable this functionality and restart the script.'
);
switch ($_POST['DBTYPE']) {
case 'mysql':
case 'pdo_mysql':
$acc = 'MySQL';
break;
case 'pgsql':
case 'pdo_pgsql':
$acc = 'PostgreSQL';
break;
case 'pdo_sqlite': /* no need to check perms, we've got our own DB */
return;
default:
exit("Invalid DB Type.");
}
@dbquery('DROP /*!10000 TABLE IF EXISTS */fud_forum_install_test_table');
foreach ($qry as $k => $v) {
if (is_array($v)) {
$key = strpos($_POST['DBTYPE'], 'mysql') !== FALSE ? 'mysql' : 'pgsql';
$v = $v[$key];
}
if (!dbquery($v)) {
seterr('DBHOST', str_replace('%name%', $acc, $err[$k]));
}
}
}
function make_into_query($data)
{
return trim(str_replace('{SQL_TABLE_PREFIX}', $_POST['DBHOST_TBL_PREFIX'], preg_replace('!\s+!', ' ', preg_replace('!\#.*$!s', '', $data))));
}
function change_global_settings($list)
{
$settings = file_get_contents($GLOBALS['INCLUDE'] . 'GLOBALS.php');
foreach ($list as $k => $v) {
if (($p = strpos($settings, '$' . $k)) === false) {
$pos = strpos($settings, '$ADMIN_EMAIL');
if (is_int($v)) {
$settings = substr_replace($settings, "\${$k}\t= {$v};\n\t", $p, 0);
} else {
$v = addcslashes($v, '\\"$');
$settings = substr_replace($settings, "\${$k}\t= \"{$v}\";\n\t", $p, 0);
}
} else {
$p = strpos($settings, '=', $p) + 1;
$e = $p + strrpos(substr($settings, $p, (strpos($settings, "\n", $p) - $p)), ';');
if (is_int($v)) {
$settings = substr_replace($settings, ' '.$v, $p, ($e - $p));
} else {
$v = addcslashes($v, '\\"$');
$settings = substr_replace($settings, ' "'.$v.'"', $p, ($e - $p));
}
}
}
$fp = fopen($GLOBALS['INCLUDE'].'GLOBALS.php', 'w');
fwrite($fp, $settings);
fclose($fp);
}
/* un-quote the string if it is quotes */
if ($magic_guotes_gpc) {
function strip_quotes(&$var)
{
$var = stripslashes($var);
}
if (!empty($_GET)) {
array_walk($_GET, 'strip_quotes');
}
if (!empty($_POST)) {
array_walk($_POST, 'strip_quotes');
}
}
/* Perform various sanity checks, which check for required components */
if (!count($_POST)) {
/* php version check */
if (!version_compare(PHP_VERSION, '4.3.0', '>=')) {
?>