assign('ur_here', $_LANG['edit_languages']); $smarty->assign('keyword', $keyword); //关键字 $smarty->assign('action_link', array()); $smarty->assign('file_attr', $file_attr);//文件权限 $smarty->assign('lang_arr', $lang_arr); //语言文件列表 $smarty->assign('file_path', $file_path);//语言文件 $smarty->assign('lang_file', $lang_file);//语言文件 $smarty->assign('language_arr', $language_arr); //需要编辑的语言项列表 assign_query_info(); $smarty->display('language_list.htm'); } /*------------------------------------------------------ */ //-- 编辑语言项 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'edit') { /* 语言项的路径 */ $lang_file = isset($_POST['file_path']) ? trim($_POST['file_path']) : ''; /* 替换前的语言项 */ $src_items = !empty($_POST['item']) ? stripslashes_deep($_POST['item']) : ''; /* 修改过后的语言项 */ $dst_items = array(); $_POST['item_id'] = stripslashes_deep($_POST['item_id']); for ($i = 0; $i < count($_POST['item_id']); $i++) { /* 语言项内容如果为空,不修改 */ if (trim($_POST['item_content'][$i]) == '') { unset($src_items[$i]); } else { $_POST['item_content'][$i] = str_replace('\\\\n', '\\n', $_POST['item_content'][$i]); $dst_items[$i] = $_POST['item_id'][$i] .' = '. '"' .$_POST['item_content'][$i]. '";'; } } /* 调用函数编辑语言项 */ $result = set_language_items($lang_file, $src_items, $dst_items); if ($result === false) { /* 修改失败提示信息 */ $link[] = array('text' => $_LANG['back_list'], 'href' => 'javascript:history.back(-1)'); sys_msg($_LANG['edit_languages_false'], 0, $link); } else { /* 记录管理员操作 */ admin_log('', 'edit', 'languages'); /* 清除缓存 */ clear_cache_files(); /* 成功提示信息 */ $link[] = array('text' => $_LANG['back_list'], 'href' => 'edit_languages.php?act=list'); sys_msg($_LANG['edit_languages_success'], 0, $link); } } /*------------------------------------------------------ */ //-- 语言项的操作函数 /*------------------------------------------------------ */ /** * 获得语言项列表 * @access public * @exception 如果语言项中包含换行符,将发生异常。 * @param string $file_path 存放语言项列表的文件的绝对路径 * @param string $keyword 搜索时指定的关键字 * @return array 正确返回语言项列表,错误返回false */ function get_language_item_list($file_path, $keyword) { if (empty($keyword)) { return array(); } /* 获取文件内容 */ $line_array = file($file_path); if (!$line_array) { return false; } else { /* 防止用户输入敏感字符造成正则引擎失败 */ $keyword = preg_quote($keyword, '/'); $matches = array(); $pattern = '/\\[[\'|"](.*?)'.$keyword.'(.*?)[\'|"]\\]\\s|=\\s?[\'|"](.*?)'.$keyword.'(.*?)[\'|"];/'; $regx = '/(?P(?P\\$_LANG\\[[\'|"].*[\'|"]\\])\\s*?=\\s*?[\'|"](?P.*)[\'|"];)/'; foreach ($line_array AS $lang) { if (preg_match($pattern, $lang)) { $out = array(); if (preg_match($regx, $lang, $out)) { $matches[] = $out; } } } return $matches; } } /** * 设置语言项 * @access public * @param string $file_path 存放语言项列表的文件的绝对路径 * @param array $src_items 替换前的语言项 * @param array $dst_items 替换后的语言项 * @return void 成功就把结果写入文件,失败返回false */ function set_language_items($file_path, $src_items, $dst_items) { /* 检查文件是否可写(修改) */ if (file_mode_info($file_path) < 2) { return false; } /* 获取文件内容 */ $line_array = file($file_path); if (!$line_array) { return false; } else { $file_content = implode('', $line_array); } $snum = count($src_items); $dnum = count($dst_items); if ($snum != $dnum) { return false; } /* 对索引进行排序,防止错位替换 */ ksort($src_items); ksort($dst_items); for ($i = 0; $i < $snum; $i++) { $file_content = str_replace($src_items[$i], $dst_items[$i], $file_content); } /* 写入修改后的语言项 */ $f = fopen($file_path, 'wb'); if (!$f) { return false; } if (!fwrite($f, $file_content)) { return false; } else { return true; } } ?>