/*------------------------------------------------------ */ //-- 设置数据库账号 /*------------------------------------------------------ */ case 'database' : if (file_exists(ROOT_PATH . 'data/config.php')) { include_once(ROOT_PATH . 'data/config.php'); } else { $db_host = 'localhost'; $db_name = 'ecshop'; $db_user = 'root'; $db_pass = ''; $prefix = 'ecs_'; } include_once(ROOT_PATH . 'install/inc_goods_type_'.$selected_lang.'.php'); $goods_type = ''; $n = 0; foreach ($attributes AS $key=>$val) { $goods_type .= ' <input type="checkbox" name="goods_type[]" value="' .$key. '" checked="true" /> '. $lang[$key]; $n ++; if ($n >= 4) { $goods_type .= "<br />"; $n = 0; } } break; /*------------------------------------------------------ */ //-- 安装测试数据,填写管理员账号 /*------------------------------------------------------ */ case 'administrator' : $db_host = trim($_POST['db_host']); $db_name = trim($_POST['db_name']); $db_user = trim($_POST['db_user']); $db_pass = trim($_POST['db_pass']); $prefix = trim($_POST['db_prefix']); include_once(ROOT_PATH . "includes/adodb/adodb.inc.php"); $connect_success = true; /* 测试数据库联接 */ if (http://blog.sina.com.cn/s/mailto:!@mysql_connect($db_host, $db_user, $db_pass)) { $step = 'message'; $message = $lang['connect_failed']; $connect_success = false; } else { $mysql_ver = mysql_get_server_info(); if (http://blog.sina.com.cn/s/mailto:!@mysql_select_db($db_name)) { $query = ($mysql_ver > '4.1') ? "CREATE DATABASE $db_name DEFAULT CHARACTER SET utf8" : "CREATE DATABASE $db_name"; if (!mysql_query($query)) { $step = 'message'; $message = $lang['select_db_failed']; $connect_success = false; } } } @mysql_close(); /* 初始化数据库类 */ if($connect_success) { $db = &NewADOConnection('mysql'); if(!$db->Connect($db_host, $db_user, $db_pass, $db_name)) { $step = 'message'; $message = $db->ErrorMsg(); $connect_success = false; } $db->query("SET NAMES utf8"); } if ($connect_success) { /* 写入配置文件 */ $configfile = "<?" ."phpn"; $configfile .= "// database hostn"; $configfile .= "$db_host = '$db_host';nn"; $configfile .= "// database namen"; $configfile .= "$db_name = '$db_name';nn"; $configfile .= "// database usernamen"; $configfile .= "$db_user = '$db_user';nn"; $configfile .= "// database passwordn"; $configfile .= "$db_pass = '$db_pass';nn"; $configfile .= "// table prefixn"; $configfile .= "$prefix = '$prefix';n"; $configfile .= '?'.'>'; /******************************************************** fopen(PHP 3, PHP 4 , PHP 5) fopen -- 打开文件或者 URL 说明 resource fopen ( string filename, string mode [, int use_include_path [, resource zcontext]]) fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被 当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议, PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。 如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以 访问的,因此需要确认文件访问权限允许该访问。如果激活了 安全模式或者 open_basedir 则会应用进一步的限制。 如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。 注: 所支持的协议列表见附录 L。某些协议(也被称为 wrappers)支持 context 和 php.ini 选项。参见相 应的页面哪些选项可以被设定。(也就是 php.ini 的值 user_agent 用在 http 协议中。)有关 contexts 和 zcontext 参数的说明,参见 参考 CXII, Stream Functions。 mode 参数指定了所要求到该流的访问类型。可以是以下: 表格 1. fopen() 中的 mode 的可能值列表 mode 说明 'r' 只读方式打开,将文件指针指向文件头。 'r+' 读写方式打开,将文件指针指向文件头。 'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE, 并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE, 并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 注: 不同的操作系统家族具有不同的行结束习惯。当你写入一个文本文件并想插入一个新行时,你需要使用符合 你操作系统的行结束符号。基于 Unix 的系统使用 n 作为行结束字符,基于 Windows 的系统使用 rn 作为行 结束字符,基于 Macintosh 的系统使用 r 作为行结束字符。 如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。 Windows 下提供了一个文本转换标记('t')可以透明地将 n 转换为 rn。与此对应你还可以使用 'b' 来强制 使用二进制模式,这样就不会转换你的数据。要使用这些标记,要么用 'b' 或者用 't' 作为 mode 参数的最后一个字符。 默认的转换模式依赖于 SAPI 和你使用的 PHP 版本,因此为了便于移植鼓励你总是指定恰当的标记。当操作以 n 作为行结束定界符的纯文本文件时,如果你还期望这些文件可以用于其它应用程序例如 Notepad,则应该在脚本中使用 't' 模式。在所有其它情况下使用 'b'。 在操作二进制文件时如果没有指定 'b' 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 rn 字符的奇怪问题。 为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 'b' 标记。 再一次,为移植性考虑,强烈建议你重写那些依赖于 't' 模式的代码使其使用正确的行结束符并改成 'b' 模式。 自 PHP 4.3.2 起,对所有区别二进制和文本模式的平台默认模式都被设为二进制模式。如果你在升级后脚本碰到问题, 尝试暂时使用 't' 标记,直到所有的脚本都照以上所说的改为更具移植性以后。 如果也需要在 include_path 中搜寻文件的话,可以将可选的第三个参数 use_include_path 设为 '1' 或 TRUE。 如果打开失败,本函数返回 FALSE。 例子 1. fopen() 例子 <?php $handle = fopen ("/home/rasmus/file.txt", "r"); $handle = fopen ("/home/rasmus/file.gif", "wb"); $handle = fopen ("http://www./", "r"); $handle = fopen ("http://blog.sina.com.cn/s/ftp://user:password@/somefile.txt", "w"); ?> 如果在用服务器模块版本的 PHP 时在打开和写入文件上遇到问题,记住要确保所使用的文件是服务器进程所能够访问的。 在 Windows 平台上,要小心转义文件路径中的每个反斜线,或者用斜线。 <?php $handle = fopen ("c:\data\info.txt", "r"); ?> 参见附录 L,fclose(),fgets(),fread(),fwrite(),fsockopen(),file(),file_exists(), is_readable(),stream_set_timeout() 和 popen()。 ********************************************************/ $fp = fopen(ROOT_PATH . 'data/config.php', 'wb+'); if (!$fp) { $step = 'message'; $message = $_LANG['open_config_error']; } fwrite($fp, trim($configfile)); fclose($fp); /*************************************** set_time_limit 配置该页最久执行时间。 语法: void set_time_limit(int seconds); 返回值: 无 函数种类: PHP 系统功能 内容说明 本函数用来配置该页最久执行时间。默认值是 30 秒,在 php.ini 中的 max_execution_time 变量配置,若配置为 0 则不限定最久时间。 当执行到该函数时,才开始计算。例如,若默认是 30 秒 ,而在执行到该函数前已执行了 25 秒,而用本函数改为 20 秒, 则该页面最长执行时间为 45 秒。 ***************************************/ /* 安装数据库 */ @set_time_limit(120); $arr_files[] = 'structure.sql'; $arr_files[] = 'data_'.$selected_lang.'.sql'; if (isset($_POST['install_demo']) && $_POST['install_demo'] == 1) { // 测试数据 $arr_files[] = ROOT_PATH . 'install/demo/demo_'.$selected_lang.'.sql'; // 复制图片 if (!file_exists(ROOT_PATH . 'images/200609')) { mkdir(ROOT_PATH . 'images/200609'); chmod(ROOT_PATH . 'images/200609', 0777); } if (!file_exists(ROOT_PATH . "images/200609/")) { $step = 'message'; $message = $_LANG['safe_mode_on3']; } $dir = opendir(ROOT_PATH . 'install/demo/200609') ; while ($file = @readdir($dir)) { if (is_file(ROOT_PATH . 'install/demo/200609/'. $file)) { copy(ROOT_PATH . 'install/demo/200609/'. $file, ROOT_PATH . 'images/200609/'.$file); chmod(ROOT_PATH . 'images/200609/'.$file, 0777); } } closedir($dir); } foreach ($arr_files AS $key=>$file) { if (!file_exists($file)) { continue; } $arr_file = array_filter(file($file), "remove_comment"); $sql_file = str_replace(" `ecs_", ' `'.$prefix, implode('', $arr_file)); $sql_file = str_replace("r", '', $sql_file); if($mysql_ver > '4.1') { $sql_file = str_replace("TYPE=MyISAM", 'ENGINE=MyISAM DEFAULT CHARSET=utf8', $sql_file); } $sql_arr = explode(";n", $sql_file); foreach ($sql_arr AS $key=>$sql) { if (empty($sql)) { continue; } if (!$db->query($sql)) { $step = 'message'; $message = $db->ErrorMsg(). "<br /><br />" .$sql; break; } } if ($step == 'message') { break; } } if (isset($_POST['goods_type']) && $step!='message') { include_once (ROOT_PATH . 'install/inc_goods_type_' . $selected_lang . '.php'); foreach ($attributes AS $key=>$val) { if (!in_array($key, $_POST['goods_type'])) { continue; } $db->query($val['cat']) or die($db->ErrorMsg()."<br />".$val['cat']); $cat_id = $db->Insert_ID(); $attr_query = str_replace("{cat_id}", $cat_id, $val['attr']); $db->query($attr_query) or die($db->ErrorMsg()."<br />".$attr_query); } } } |
|