Archive for the ‘Discuz’ Category

手工开启discuz4.1页面静态化

Wednesday, May 10th, 2006

首先的第一点是确认你的服务器支持 rewrite mod 不然请略过此文。
具体方法

首页后台开启 页面静态化的选项[表告诉我你不知道那个东西在那里。]
接着进入论坛根目录,像我的论坛根目录就是/bbs
在/bbs 这个目录里面新建一个文件 .htaccess,内容如下

rewriteengine on

rewritebase /

rewriterule ^archiver/([a-z0-9-]+.html)$ archiver/index.php?$1

rewriterule ^forum-([0-9]+)-([0-9]+).html$ forumdisplay.php?fid=$1&page=$2

rewriterule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$ viewthread.php?tid=$1&extra=page%3d$4&page=$2

rewriterule ^profile-(username|uid)-(.*).html$ viewpro.php?$1=$2

.htaccess 上传试试 rewritebase / 中“/”为根目录 如果是bbs改为“/bbs”

如无法保存,附件有 .htaccess 下载回去自己改
htaccess.rar

faisunsql v4.0发布了,提供下载。

Wednesday, May 10th, 2006

一直在用faisunsql3.9 , 好几年了,4.0终于开发出来了,想不到faisun也是落伍的,落伍强人实在数不胜数。
什么是faisunsql?[给你补习下]

more..

一、faisunsql 程序有以下特点:

  1. 可以导出导入任意大小的数据库。faisunsql 采用分卷导出的方式,将数据库分为多个部份多次导出,因此理论上无论多大的数据库,它都可以胜任。
  2. 导出的文件本身可以在php环境下执行,因此不需要借助其他工具(也不再需要 faisunsql程序)。导出的文件为完整的 php 文件,直接在服务器中执行即可,使用方便。
  3. 虽然为多页导出和导入,但其过程会自动运行,且执行速度较快,成功率高。
  4. 程序编写时考虑了程序的可整合性,因此只要略加修改即可整合到其他程序的后台。
  5. 导出方式、每个数据文件的大小和数据表等都可以进行设置,个性化强。
  6. 程序对数据进行了一定的压缩,减少了备份文件的空间占用。
  7. 对导出的程序进行了加密,安全性高。
  8. 导出和导入时基本上按照默认的配置即可,使用方便快捷。

二、导出操作步骤简介:

1.操作流程:

操作流程图

2.各流程简要说明:

  • (1) 检查数据库配置:输入正确的配置以连接数据库。如果在程序源文件的“配置部分”配置的是正确的值,则不会出现该表单,您可以修改源文件的配置以整合到您程序的后台,但请注意在源文件的适当地方添加管理员身份验证程序。不更改源文件,则必须填入正确的配置。如果无法连接数据库,请联系您的主机管理员以获得正确配置值。
  • (2) 选择要备份的数据表:您可以选择导出该数据库中的全部或部分数据表。如果您服务器的空间不够,可以先导出一部分,下载回本机后再导出下一部分。默认全部导出。
  • (3) 选择导出方式:您可以选择单文件导出或多文件导出。如果您数据库不大,可以选择单文件导出方式,该方式下备份文件直接下载到本地硬件,而不需要先保存在服务器空间。如果数据库较大,请选择多文件导出方式。保存备份文件需要空间与所选择导出的数据库大小相差不大,但建议保证有1.2 倍以上的存储空间。程序会根据您所要导出的数据量给出默认值,数据量大于1m时默认多文件导出方式。
  • (4) 导入默认配置:选择单文件导出方式时会出现该表单。即备份文件重新导入数据库时出现的默认配置,导入时仍可更改。默认“服务器”和“数据库”为您第一步填写的服务器和数据库配置,“该数据库不存在时自动创建”的选项为选中。导入时若该选项不选,如果用户填写的数据库不存在时只提示出错而不自动创建。
  • (5) 开始单文件导出。导出的结果为一个php文件,并下载到本地硬盘。
  • (6) 保存选项和导入默认配置:选择多文件导出时会出现该表单。该表单包括保存选项和导入默认配置两个表格的内容。简要介绍如下:
    • 存放目录:备份文件存放在服务器上的目录。注意该目录相对faisunsql所在目录而言,且其目录属性要求可读写(即设为777)。
    • 主文件名:不包括扩展名(.php)的名称,为导出的php运行文件名。主文件名也决定了其他的数据文件名。导入时运行该文件即可。
    • 生成文件格式:.php格式最安全且不易出错,下载时需要密码;.zip和.gz都是压缩文件格式,所有的文件写在一个压缩包内,需要解压后使用,导出后占用空间较小,但导出时不能刷新,单个压缩文件不能超过4gb,且易被别人下载,所以请尽快将其删除或移动到不可访问的目录中。
    • 每个数据文件大小:单位为b,1mb=(1024*1024)b=1048576b。因为多文件下载时必须把数据文件分成若干个,程序检测到目前的数据文件已到达设定的大小时,即结束该文件并换页准备写入新文件。该值不能设得太大,否则容易造成程序运行超时;也不宜设得太小,否则会分卷过多,导出导入总时间变长,且需占用更多的存储空间。
    • 导出一页时间间隔:单位为秒。有些服务器不允许用户过于频繁的刷新页面,所以设为这个选项。
    • 数据导入密码:因为导出后,您的文件仍在服务器中,设置此密码以防止他人运行您的备份文件。同时,在以http方式下载所有数据文件时也必须输入此密码以保证您数据的安全性。所以,该密码不要太简单,且请保护好。该密码不能为空。
    • “导入默认配置”与第(4)点基本相同。
  • (7) 检查多余文件:您在上一步设置的目录中,可能含有其他文件,并且有一些可能会被这次导出的文件覆盖。默认选定了所有可能被覆盖的文件。删除选定的文件,或返回上一步更改保存目录。
  • (8) 检查目录属性。检查您设定的保存目录是否可以写入文件。程序试图向该目录写入logo图片,若出错则表明该目录无写入权限。请把该目录的属性改为777。
  • (9) 开始多文件的导出:这一步数据文件开始导出,并自动进行下一页,直到导出完毕。

三、导入操作步骤简介:

  1. 备份文件的下载:
    备份文件的下载主要有两种方式:
    ftp方式:通过ftp方式连接到服务器,并把备份目录下载回来即可。
    http方式:在服务器中运行导出的主文件,文件名为您填写的主文件名+扩展名(.php),点击“点击这里http方式下载所有文件”的链接,要求输入导入密码(即导出时填写的导入密码,见导出操作步骤简介),程序即列出所有的相关文件及其链接。您可以通过flashget等软件全部下载它们。下载完成后,您也可以以http方式把服务器上的备份文件删除。
  2. 备份文件的导入。
    导入时的操作相对比较简单。在服务器中运行导出的主文件,文件名为您填写的主文件名+扩展名(.php),然后输入该数据库的配置即可。多文件导出方式导出的文件,依然为多文件导入。

本站下载 faisunsql v4.0 gb2312

faisunsql_v40.rar

本站下载 faisunsql v4.0 utf-8

faisunsql_v40_utf8.rar

discuz 去掉主题前面的日期

Sunday, April 30th, 2006

论坛的主题按照某人的方法 在发表主题时,前面插入日期,现在看来。这个日期插得还不科学。
详情可以参看我在dz的帖子。
http://www.discuz.net/viewthread.php?tid=281364
为了挽救下自己,于是在dz是处找帖子。
还终于给我找到了。

update cdb_threads set subject=substring(subject,10);

这个,是错误的,你们可不要用啊。不然会将你的所有的帖子。不论前面有没有时间,全部截掉10个字符

下面的才是正确的

update cdb_threads set subject=substring(subject from 11) where position(’[' in subject)=1 and position(']‘ in subject)=10

php不太懂,稍微解释下 当你的主题前面有 [06-03-02]格式的日期时,上面的sql是这样执行的。
首页在所有的主题里面寻找,当主题的第一个字符是”["第10个字符是“]” 时,截去这个主题第11位前面的字符.

我的论坛是 [04-17] 所以代码就是

update cdb_threads set subject=substring(subject from 8) where position(’[' in subject)=1 and position(']‘ in subject)=7

php下的utf8解决方案

Friday, April 21st, 2006

1.my.ini:
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-storage-engine=myisam
在[mysqld]下加入:
default-collation=utf8_bin
init_connect=’set names utf8′

2.在需要做数据库操作的php程序前面加上
mb_internal_encoding(’utf-8′);

3.create table最后边加上engine=myisam default charset=utf8 collate=utf8_bin

4.phpmyadmin/config.inc.php
$cfg['defaultcharset'] = ‘utf-8′;
$cfg['recodingengine'] = ‘iconv’;

5.phpmyadmin/libraries/string.lib.php
将第41行的
mb_internal_encoding($globals['charset']);
改为:mb_internal_encoding(’utf-8′);

6.phpadmin导出数据时
把”二进制区域使用十六进制显示”的勾去掉

Discuz4.1乱码解决方案

Monday, March 27th, 2006

我的论坛更换服务器.论坛进行转移.顺便进行了升级.因为服务器用的mysql是4.1(原来安家空间是4.0),而4.1在编译 mysql 时,指定了一个默认的字符集,这个字符集是 utf8;就是这个utf8,因为不是很熟悉mysql,所以在升级的时候给我带来了相当大的麻烦.前后删除重建数据表不下20次. 在这里把我的一些经验之谈写出来,如果你也遇到我同样的情况,就可以少走一些弯路.
mysql4.0–>mysql4.1(默认字符集 utf8) discuz4.0–>discuz4.1

1.首先是论坛转移.
(1)先看看你的论坛的默认字符集是什么.进入你的phpmyadmin,里面有 mysql 连接校对 边上有一个下拉,点最上面的整理,页面会刷新,看看出来的是字符.如果是 utf8_swedish_ci ,说明默认的字符校对就是latin1了,你的情况就和我一样了.如果出来的是gbk_chinese_ci;那么你可以跳过此文.一知道了字符集的类型,就可以开始转移论坛了.
(2)首先新建一个discuz4.0,这时我们可以看到正常的文件.但是将备份的数据库导入后,会发现出来的全部是乱码,满篇都是??? 问题出在那里? 因为新建的discuz用的是 gbk_chinese_ci来和数据库进行连接校对的.新建的数据表的编码也是gbk_chinese_ci. 我们将备份数据导 ,因为备份数据是mysql4.0的,并没有连接校对字符集,所以mysql4.1会自动为倒入的备份数据添加一个默认的字符集,这个字符集是 utf8.如此一来,矛盾就出现了. 前台的编码访问模式是gbk_chinese_ci,而后台的编码模式却是utf8_swedish_ci.就像访问网页时,用utf-8去访问gb2312一样,自然而然的出现了错误.
解决方案:很明显,就是让前台用正确的编码访问模式去访问后台的编码.后台默认的编码是utf8_swedish_ci 我们让前台用utf8_swedish_ci 去访问就是了.打开文件include/db_mysql_class.php,大约在31~34行,有这样的一段代码.

if($this->version() > ‘4.1′ && in_array(strtolower($globals['charset']), array(’gbk’, ‘big5′, ‘utf-8′))) {
//attention: remove the following line if you want to use the default database character set.
mysql_query(”set names ‘”.str_replace(’-', ”, $globals['charset']).”‘”);
}

在”mysql_query(”set names ‘”.str_replace(’-', ”, $globals['charset']).”‘”);”它的意思是让程序用dz定义的字符集去访问mysql(gbk_chinese_ci),在前面加上”"//”将这一行注释掉.程序就会用mysql的默认字符集(utf8_swedish_ci)去访问mysql里面的数据.保存好文件,在后台更新缓存和统计. wowo~ 页面显示正常了. 高兴死了.
以上部份由旺角网络的旺才指点,参考文章 http://www.discuz.net/thread-201676-1-1.html

2.论坛升级.
(1)disucz4.1也是同样设置了用 gbk_chinese_ci 去访问数据的.所以在运行upgrade6.php前同样要先修改程序访问后台的字符集,不然出了错就糗大了.打开文件include/db_mysql_class.php,大约在 31~39行,有下面的代码

if($this->version() > ‘4.1′) {
global $charset, $dbcharset;
if(!$dbcharset && in_array(strtolower($charset), array(’gbk’, ‘big5′, ‘utf-8′))) {
$dbcharset = str_replace(’-', ”, $charset);
}
if($dbcharset) {
mysql_query(”set names ‘$dbcharset’”);
}
}

修改成

if($this->version() > ‘4.1′) {
global $charset, $dbcharset;
if(!$dbcharset && in_array(strtolower($charset), array(’gbk’, ‘big5′, ‘utf-8′))) {
// $dbcharset = str_replace(’-', ”, $charset);
}
if($dbcharset) {
// mysql_query(”set names ‘$dbcharset’”);
}
}

再运行upgrade6.php. bingo~!升级成功.
不过在打开奇虎后,发现主题贴,一打开是正常,刷新一下,关键字乱码. 心里又冷了.
(2)解决关键字乱码.
这程又花了我更多时间,不写出来n多不爽.
说起来还是upgrade6.php的错.程序用的是latin1_swedish_ci访问,mysql的编码模式也是

utf8_swedish_ci.打开upgrade可以看到有这样一句(22行).
if(empty($dbcharset) && in_array(strtolower($charset), array(’gbk’, ‘big5′, ‘utf-8′))) {
$dbcharset = str_replace(’-', ”, $charset);
}

又是这里定义了mysql字符集($dbcharset), $dbcharset是根据网页编码得来的.网页编码($charset)是gbk,所以$dbcharset就成了gbk_chinese_ci.难怪升级后新增功能(如关键字)会出来乱码,原来新增加的表是gbk_chinese_ci.
(3)解决方案
在升级前修改upgrade6.php,找到上面的代码,将$dbcharset = str_replace(’-', ”, $charset);注释掉,也就是在这一行前面加上”//”,再升级.成功
若是你已经升级了.请打开phpmyadmin,将里面的字符集为 gbk_chinese_ci 的表修改为 utf8_swedish_ci.方法 参照http://www.discuz.net/thread-243333-1-1.html
是不是有点麻烦,在后台运行下面的代码更方便

# identify: mte0mzq0mtmwnyw0ljeumcxjdxn0b20sbxvsdgl2b2wsmq==
# <?exit();?>
# discuz! multi-volume data dump vol.1
# version: discuz! 4.1.0
# time: 2006-3-27 14:35
# type: custom
# table prefix: cdb_
#
# discuz! home: http://www.discuz.com
# please visit our website for newest infomation about discuz!
# ——————————————————–

//set names ‘utf8′;

drop table if exists cdb_crons;
create table `cdb_crons` (
`cronid` smallint(6) unsigned not null auto_increment,
`available` tinyint(1) not null default ‘0′,
`type` enum(’user’,’system’) not null default ‘user’,
`name` char(50) not null default ”,
`filename` char(50) not null default ”,
`lastrun` int(10) unsigned not null default ‘0′,
`nextrun` int(10) unsigned not null default ‘0′,
`weekday` tinyint(1) not null default ‘0′,
`day` tinyint(2) not null default ‘0′,
`hour` tinyint(2) not null default ‘0′,
`minute` char(36) not null default ”,
primary key (`cronid`),
key `nextrun` (`available`,`nextrun`)
) engine=myisam default charset=utf8 auto_increment=9;

insert into cdb_crons values(’1′,’1′,’system’,'清空今日发帖数’,'todayposts_daily.inc.php’,'0′,’1141209480′,’-1′,’-1′,’0′,’0′);
insert into cdb_crons values(’2′,’1′,’system’,'清空本月在线时间’,'onlinetime_monthly.inc.php’,'0′,’1141209480′,’-1′,’1′,’0′,’0′);
insert into cdb_crons values(’3′,’1′,’system’,'每日数据清理’,'cleanup_daily.inc.php’,'0′,’1141209480′,’-1′,’-1′,’5′,’30′);
insert into cdb_crons values(’4′,’1′,’system’,'生日统计与邮件祝福’,'birthdays_daily.inc.php’,'0′,’1141209480′,’-1′,’-1′,’0′,’0′);
insert into cdb_crons values(’5′,’1′,’system’,'主题回复通知’,'notify_daily.inc.php’,'0′,’1141209480′,’-1′,’-1′,’5′,’00′);
insert into cdb_crons values(’6′,’1′,’system’,'每日公告清理’,'announcements_daily.inc.php’,'0′,’1141209480′,’-1′,’-1′,’0′,’0′);
insert into cdb_crons values(’7′,’1′,’system’,'限时操作清理’,'threadexpiries_daily.inc.php’,'0′,’1141209480′,’-1′,’-1′,’5′,’0′);
insert into cdb_crons values(’8′,’1′,’system’,'论坛推广清理’,'promotions_hourly.inc.php’,'0′,’1141209480′,’-1′,’-1′,’0′,’00′);

drop table if exists cdb_modworks;
create table `cdb_modworks` (
`uid` mediumint(8) unsigned not null default ‘0′,
`modaction` char(3) not null default ”,
`dateline` date not null default ‘2006-01-01′,
`count` smallint(6) unsigned not null default ‘0′,
`posts` smallint(6) unsigned not null default ‘0′,
key `uid` (`uid`,`dateline`)
) engine=myisam default charset=utf8;

drop table if exists cdb_pluginhooks;
create table `cdb_pluginhooks` (
`pluginhookid` mediumint(8) unsigned not null auto_increment,
`pluginid` smallint(6) unsigned not null default ‘0′,
`available` tinyint(1) not null default ‘0′,
`title` varchar(255) not null default ”,
`description` mediumtext not null,
`code` mediumtext not null,
primary key (`pluginhookid`),
key `pluginid` (`pluginid`),
key `available` (`available`)
) engine=myisam default charset=utf8 auto_increment=1;

drop table if exists cdb_pmsearchindex;
create table `cdb_pmsearchindex` (
`searchid` int(10) unsigned not null auto_increment,
`keywords` varchar(255) not null default ”,
`searchstring` varchar(255) not null default ”,
`uid` mediumint(8) unsigned not null default ‘0′,
`dateline` int(10) unsigned not null default ‘0′,
`expiration` int(10) unsigned not null default ‘0′,
`pms` smallint(6) unsigned not null default ‘0′,
`pmids` text not null,
primary key (`searchid`)
) engine=myisam default charset=utf8 auto_increment=1;

drop table if exists cdb_promotions;
create table `cdb_promotions` (
`ip` char(15) not null default ”,
`uid` mediumint(8) not null default ‘0′,
`username` char(15) not null default ”,
primary key (`ip`)
) engine=myisam default charset=utf8;

drop table if exists cdb_relatedthreads;
create table `cdb_relatedthreads` (
`tid` mediumint(8) not null default ‘0′,
`expiration` int(10) not null default ‘0′,
`keywords` varchar(255) not null default ”,
`relatedthreads` text not null,
primary key (`tid`)
) engine=myisam default charset=utf8;

ok 就么多了. 以上文字针对mysql4.1 且默认字符集为latin1.如果是其他字符集请酌情修改(gbk不在本文讨论范围) 本人水平有限,有出错的地方还请高手指教.写出来不容易,若转载请保留言署名.
by freeher@im286 http://bearlet.com qq 35645368