• 2009-03-30

    Discuz和织梦CMS,登陆注册链接,模板分页,模板数组循环的研究 - [tips]

    1.在模板里header.html可以改,但是不靠谱,因为有些地方没有调用模板,所以去改配置:common.inc.php

    先在common.inc.php文件中看到:

    $link_login = $passport_url.$passport_login_url.(strpos($passport_login_url, '?') === FALSE ? '?' : '&').'forward='.$passport_forward;

    于是在服务器上 bash# grep -R-l  "passport_url" /opt/web/bbs.XXXX.com/*

    查到字符在:/opt/web/bbs.XXXX.com/forumdata/cache/cache_settings.php文件中:                         于是修改!注册也是一样的!改reaname=>""....

    2.header.html里用户名显示问题,默认是在common.inc.php的$discuz_user定义的,这里可以改掉,但只是显示,没有意义,因为发帖和在线列表都是数据库里的原始ID。接着实验,还是在common.ini.php里,只要定义一个变量,然后去template/difalut/header.html里,就可以显示了,利用了smarty的模板原理

    3.$postlist = [0]=>[a]="a"
                                [b]="b"
                       [1]=>[a]="a"
                               [b]="b"
    模板里 <!--{loop $postlist $post}-->为:变量多维数组$postlist以每个键为$post循环,及:$post[a]=="a"

    4.在CMS中做环境设置(版本不同,设置地方不同,大体差不多):系统->系统基本参数->性能选项

    开启分页标题,再开启长文章自动分页。

    在模板中,要显示的地方,添加<div>:<div class="cupage" align="center">{dede:pagebreak/} </div>

    最好能写个cupage的css,这样美观一点~~ 哈哈

    编辑人员在编辑时,手动选择要分页的地方!(在文本编辑的地方有按键!让他们自己按!)

    OVER

    Tag:discuze
  • 2009-03-26

    Mysql:select * into outfile && load data infile 数据交换 - [mysql]

    1.

    LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作。为了将一个数据库的数据写入一个文件,使用SELECT ... INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。两个命令的FIELDS和LINES子句的语法是相同的。两个子句是可选的,但是如果指定两个,FIELDS必须在LINES之前。

    mysql> USE db1;
    mysql> LOAD DATA INFILE "./data.txt" INTO TABLE db2.my_table;

    2.

    select * from tablename into outfile '/tmp/xxx.log';

    这里用/tmp目录,因为mysql服务上不知道有没有权限写入,而且此句法只能在mysql服务器下生成文档,不能在本地,所以只有先放到/tmp下,再通过rsnyc同步,或者scp拷贝到本地

    Tag:Mysql
  • 2009-03-26

    如何提高mysql load data infile的速度 - [mysql]


    测试数据2.5G,共有数据9427567条。用的mysql的large服务器的配置。
    load一次需要大概10分钟左右。
    建的表用的是MYISAM,调整了几个session的参数值

    SET SESSION BULK_INSERT_BUFFER_SIZE=256217728;
    SET SESSION MYISAM_SORT_BUFFER_SIZE=256217728;

    运行结果如下

    Query OK, 9427567 rows affected, 1558 warnings (3 min 55.21 sec)
    Records: 9427567 Deleted: 0 Skipped: 0 Warnings: 0
    google到的还可以

    set global KEY_BUFFER_SIZE=256217728;
    alter table tablename disable keys;

    如何load数据里面带反斜杠(backslash)”\” 的数据
    由于如果你没有指定FIELDS子句,则默认值为假设您写下如下语句时的值:
    FIELDS TERMINATED BY ‘\t’ ENCLOSED BY ” ESCAPED BY ‘\\’
    所以,如果你的数据里面有反斜杠(backslash)”\”的时候,数据会出现被截断的问题。出现这种问题,只要写上如下的fields子句即可
    FIELDS TERMINATED BY ‘\t’ ENCLOSED BY ” ESCAPED BY ”

    如何load不同编码的数据
    原来用的4.X的mysql,我是select INTO OUTFILE ,只后用iconv,或者其他软件来做。可以参考这里,但是由于这次数据大,用ultraedit等软件打开都要半天。好在新版的mysql可以增加一个新的参数
    CHARACTER SET gbk
    我的文本数据是GBK的编码,数据表是utf8的,用这种方法测试成功。
    如何load的时候只insert特定的列
    比如表里面有比元数据多的列。可以在load的时候指定要插入的字段名字。

    示例的代码如下:

    LOAD DATA INFILE '~/data.txt'   
    INTO TABLE fb0505   
    CHARACTER SET  gbk   
    FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY ''
    LINES TERMINATED BY '\n' STARTING BY '' 
    (seller_id,fb_type,fb_date,item_url);

    其中表fb0505里面还有一列是id。

    Tag:Mysql
  • 2009-03-02

    PHP Tips,留着以后备用(1) - [php]

    <?php
    //中文字符截取 1
    $text = "牛逼牛逼牛逼的牛牛逼的逼哈哈哈";
    $value = substr($text, 0, 18);
    $value_length = strlen($value);
    $value_count = 0;
    for ($i = 0; $i < $value_length; $i++)
    {
    if (ord($value{$i}) > 127)
    {
    $value_count++;
    }
    }
    if ($value_count % 2 != 0)
    {
    $value = substr($text, 0, $value_length - 1);
    }
    echo $value."<BR>";
     
    //中文字符截取 2
    function cut_str($msg,$cut_size,$charset="UTF-8",$suffix="...")
    {
    if($cut_size<=0) return $msg;
    $i=1;$han=0;$eng=0;
    while ($i <= strlen($msg)) {
    if(ord($msg[($i-1)])>127) {
    $han++;
    if($charset=="UTF-8") {
    $i=$i+3;
    }else{
    $i=$i+2;
    }
    }else{
    $eng++;
    $i=$i+1;
    }
    if(($han+$eng)==$cut_size) {
    if($charset=="UTF-8") {
    $cut_size = $eng + (int)$han*3;
    }else{
    $cut_size = $eng + (int)$han*2;
    }
    break;
    }
    }
    for ($i=0;$i<$cut_size;$i++) {
    $str .=$msg[$i];
    }
    return $str.$suffix;
    }
     
    //取得来访者的IP,包括代理服务器!
     
    function iptype1 ()
    {
    if (getenv("HTTP_CLIENT_IP")) return getenv("HTTP_CLIENT_IP");
    else return "none";
    }
    function iptype2 ()
    {
    if (getenv("HTTP_X_FORWARDED_FOR")) return getenv("HTTP_X_FORWARDED_FOR");
    else return "none";
    }
    function iptype3 ()
    {
    if (getenv("REMOTE_ADDR")) return getenv("REMOTE_ADDR");
    else return "none";
    }
    function ip()
    {
    $ip1 = iptype1();
    $ip2 = iptype2();
    $ip3 = iptype3();
    if (isset($ip1) && $ip1 != "none" && $ip1 != "unknown") {
    return $ip1;
    }
    elseif (isset($ip2) && $ip2 != "none" && $ip2 != "unknown") {
    return $ip2;
    }
    elseif (isset($ip3) && $ip3 != "none" && $ip3 != "unknown") {
    return $ip3;
    }
    else {
    return "none";
    }
    }
    echo ip();
    Tag:php