WOW!这是一个技术博客耶!

  • 分类文章 php
  • php史上公认最安全的正反加密解密函数

    之前写过一个加解密的文章: http://www.52blogger.com/archives/387 ,也能凑合着使用, 现在为了安全, 用php写了一个triple des(3DES)的正反加解密函数. 3DES是公认的最安全的加密解密函数了,只是可惜的是php没有提供这样现成的函数,于是乎自己写了一个3DES版本的方法,3DES有很多版本,该版本采用的是ECB模式,用PKCS7补码,base64做密文,安全等级高,一般使用该函数只要修改其中的key即可.

    测试:
    echo (des3crypt( “龙哥博客”,’ENCODE’));
    echo “
    “;
    echo (des3crypt( “bxC46TETFEZFpTS1DClzpg==”,’DECODE’));
    echo “
    “;

    /**
    * 加解密函数
    * @param $str
    * @param $type
    * @param $key
    */
    function des3crypt($str,$type = ‘ENCODE’,$key = ‘AXNU7SLKJ7HKJm+x4bfBJSJQKde’){
    if(empty($str) && $str != 0){
    return false;
    }
    $td = mcrypt_module_open( MCRYPT_3DES, ”, MCRYPT_MODE_ECB, ”);
    $key = base64_decode($key);
    mcrypt_generic_init($td, $key,’12345678′);
    if(strtoupper($type) == ‘ENCODE’){
    $str = padding( $str );
    $data = mcrypt_generic($td, $str);
    }elseif(strtoupper($type) == ‘DECODE’){
    $str = base64_decode($str);
    $data = mdecrypt_generic($td, $str);
    }
    //加密
    mcrypt_generic_deinit($td);
    //结束
    mcrypt_module_close($td);
    if(strtoupper($type) == ‘ENCODE’){
    $data = removeBR(base64_encode($data));
    }elseif(strtoupper($type) == ‘DECODE’){
    $data = removePadding($data);
    }
    return $data;
    }

    //删除填充符
    function removePadding( $str ){
    $len = strlen( $str );
    $newstr = “”;
    $str = str_split($str);
    for ($i = 0; $i < $len; $i++ ){
    if (!in_array($str[$i],array(chr(0),chr(1),chr(2),chr(3),chr(4),chr(5),chr(6),chr(7),chr(8)))){
    $newstr .= $str[$i];
    }
    }
    return $newstr;
    }

    //填充密码,填充至8的倍数,pkcs7 | pkcs5
    function padding( $str ,$pkcs = 5){
    if($pkcs == 5){
    $pad = 8 – (strlen($str) % 8);
    $str .= str_repeat(chr($pad), $pad);
    }elseif($pkcs == 7){
    $len = 8 – strlen( $str ) % 8;
    for ( $i = 0; $i < $len; $i++ ){
    $str .= chr( 0 );
    }
    }
    return $str ;
    }

    /**
    * http://52blogger.com 龙哥博客版权所有,欢迎转载,转载请务必注明来源,违版必究.
    */

    //删除回车和换行
    function removeBR( $str ){
    $len = strlen( $str );
    $newstr = “”;
    $str = str_split($str);
    for ($i = 0; $i < $len; $i++ ){
    if ($str[$i] != ‘\n’ and $str[$i] != ‘\r’){
    $newstr .= $str[$i];
    }
    }
    return $newstr;
    }


  • php截取字符串函数(不打断单词)

    在项目中,遇到一个需求,如我要截取一串字符串,而又不想截取半截的单词,看了下php手册的这个mb_strimwidth() 函数,据说是不会打断单词的,可是测试没有成功,于是乎自己写个先,虽然有些小问题,但是勉强能用了,有时间再封装的好点. 该函数的实现原理是利用wordwrap()打断单词,然后用mb_strlen()计算单词的长度,截取到需要被截取的长度即可. 如下测试:

    //原字符串
    $str = ‘readonly this boolean attribute indicates that the user cannot modify the value of the control. Unlike the disabled attribute, the readonly attribute does not prevent the user from clicking or selecting in the control. long ge blog\’s The value of a read-only control is still submitted with the form.’;

    echo wordcut($str,100);

    //结果:
    readonly this boolean attribute indicates that the user cannot modify value of control. Unlike disabled attribute, …

    /**
    * 该函数截取英文字符串,不会打断英文单词,就是说不会把一个单词截取一半
    * note: 不适用于中文,当然改改也可以
    * note: 目前该函数有点小bug,$cutlength 不是指长度,而是计算所有单词的长度到了这个数时停止,其实也就是空格的长度被忽略了
    */
    function wordcut($string, $cutlength = 250, $replace = ‘…’){
    //长度不足直接返回
    if(mb_strlen($string) <= $cutlength){
    return $string;
    }else{
    //计算当前单词总长度
    $totalLength = 0;
    $datas = $newwords = array();
    //打乱文本
    $wrap = wordwrap($string,1,"\t");
    //组成数组
    $wraps = explode("\t",$wrap);

    foreach ($wraps as $tmp){
    //计算每个单词的长度
    $datas[$tmp] = mb_strlen($tmp);
    }
    foreach ($datas as $word => $length){
    //保存单词的总长度
    $totalLength += $length;
    //如果小于截取的长度则保存
    if($totalLength < $cutlength){
    array_push($newwords,$word);
    }else{
    break;
    }
    }
    //生成新字符串
    $str = trim(implode(” “,$newwords));
    return empty($str) ? $str : $str.’ ‘.$replace;
    }
    }


  • PHP POST数据的三种方法

    php有三种方法可以post数据,分别为Curl、socket、file_get_contents:

    /**
    * Socket版本
    * 使用方法:
    * $post_string = "app=socket&version=beta";
    * request_by_socket('facebook.cn','/restServer.php',$post_string);
    */
    function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30){
    $socket = fsockopen($remote_server,$port,$errno,$errstr,$timeout);
    if (!$socket) die("$errstr($errno)");

    fwrite($socket,"POST $remote_path HTTP/1.0\r\n");
    fwrite($socket,"User-Agent: Socket Example\r\n");
    fwrite($socket,"HOST: $remote_server\r\n");
    fwrite($socket,"Content-type: application/x-www-form-urlencoded\r\n");
    fwrite($socket,"Content-length: ".strlen($post_string)+8."\r\n");
    fwrite($socket,"Accept:*/*\r\n");
    fwrite($socket,"\r\n");
    fwrite($socket,"mypost=$post_string\r\n");
    fwrite($socket,"\r\n");

    $header = "";
    while ($str = trim(fgets($socket,4096))) {
    $header.=$str;
    }

    $data = "";
    while (!feof($socket)) {
    $data .= fgets($socket,4096);
    }

    return $data;
    }

    /**
    * Curl版本
    * 使用方法:
    * $post_string = "app=request&version=beta";
    * request_by_curl('http://facebook.cn/restServer.php',$post_string);
    */
    function request_by_curl($remote_server,$post_string){
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$remote_server);
    curl_setopt($ch,CURLOPT_POSTFIELDS,'mypost='.$post_string);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_USERAGENT,"Jimmy's CURL Example beta");
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
    }
    /**
    * 其它版本
    * 使用方法:
    * $post_string = "app=request&version=beta";
    * request_by_other('http://facebook.cn/restServer.php',$post_string);
    */
    function request_by_other($remote_server,$post_string){
    $context = array(
    'http'=>array(
    ‘method’=>’POST’,
    ‘header’=>’Content-type: application/x-www-form-urlencoded’.”\r\n”.
    ‘User-Agent : Jimmy\’s POST Example beta’.”\r\n”.
    ‘Content-length: ‘.strlen($post_string)+8,
    ‘content’=>’mypost=’.$post_string)
    );
    $stream_context = stream_context_create($context);
    $data = file_get_contents($remote_server,FALSE,$stream_context);
    return $data;
    }

    ?>


  • php imap函数详解

    imap 的全名是 internet message access protocol,即网际网络信息存取协议,为美国史丹福大学 (stanford university) 在 1986 年开始研发的多重邮箱电子邮件系统。php 所提供的功能是 imap 4 的系统,这是根据 rfc 1730 所实作的。更多有关 imap 的信息可以参考 imap 的官方网站 http://www.imap.org 。

    欲使用 imap 的电子邮件功能,要先到 ftp://ftp.cac.washington.edu/imap 下载 imap 的客户端程序。在编译完成之后将 c-client/c-client.a 复制到 /usr/local/lib 之中,并将 c-client/rfc822.h、mail.h 及 linkage.h 三个文件复制到 /usr/local/include 之下。之后编译 php 程序时要加入 –with-imap 的选项。

    imap_append : 附加字符串到指定的邮箱中。
    imap_base64 : 解 base64 编码。
    imap_body : 读信的内文。
    imap_check : 返回邮箱信息。
    imap_close : 关闭 imap 链接。
    imap_createmailbox : 建立新的信箱。
    imap_delete : 标记欲删除邮件。
    imap_deletemailbox : 删除既有信箱。
    imap_expunge : 删除已标记的邮件。
    imap_fetchbody : 从信件内文取出指定部分。
    imap_fetchstructure : 获取某信件的结构信息。
    imap_header : 获取某信件的标头信息。
    imap_headers : 获取全部信件的标头信息。
    imap_listmailbox : 获取邮箱列示。
    imap_listsubscribed : 获取订阅邮箱列示。
    imap_mail_copy : 复制指定信件到它处邮箱。
    imap_mail_move : 移动指定信件到它处邮箱。
    imap_num_msg : 取得信件数。
    imap_num_recent : 取得新进信件数。
    imap_open : 打开 imap 链接。
    imap_ping : 检查 imap 是否连接。
    imap_renamemailbox : 更改邮箱名字。
    imap_reopen : 重开 imap 链接。
    imap_subscribe : 订阅邮箱。
    imap_undelete : 取消删除邮件标记。
    imap_unsubscribe : 取消订阅邮箱。
    imap_qprint : 将 qp 编码转成八位。
    imap_8bit : 将八位转成 qp 编码。
    imap_binary : 将八位转成 base64 编码。
    imap_scanmailbox : 寻找信件有无特定字符串。
    imap_mailboxmsginfo : 取得目前邮箱的信息。
    imap_rfc822_write_address : 电子邮件位址标准化。
    imap_rfc822_parse_adrlist : 解析电子邮件位址。
    imap_setflag_full : 配置信件标志。
    imap_clearflag_full : 清除信件标志。
    imap_sort : 将信件标头排序。
    imap_fetchheader : 取得原始标头。
    imap_uid : 取得信件 uid。
    imap_getmailboxes : 取得全部信件详细信息。
    imap_getsubscribed : 列出所有订阅邮箱。
    imap_msgno : 列出 uid 的连续信件。
    imap_search : 搜寻指定标准的信件。
    imap_last_error : 最后的错误信息。
    imap_errors : 所有的错误信息。
    imap_alerts : 所有的警告信息。
    imap_status : 目前的状态信息。

    imap_append
    附加字符串到指定的邮箱中。
    语法: int imap_append(int imap_stream, string mbox, string message, string [flags]);
    返回值: 整数
    函数种类: 网络系统
    内 容说明: 本函数可在指定的电子邮箱中增加附加的字符串。参数 imap_stream 为 imap 的代号。参数 mbox 为电子邮箱的位址。参数 message 为欲附加的信息。参数 flag 为可省略的标志,表示电子邮箱的标志值。治募 注意的是要与 cyrus imap 服务器沟通时,应使用 \r\n 作为行结束字符 (end-of-line, eol)。若有错误则返回 false 值。

    imap_base64
    解 base64 编码。
    语法: string imap_base64(string text);
    返回值: 字符串
    函数种类: 网络系统
    内容说明: 本函数可将用 base64 编码字符串解码。返回值是解码后的字符串。
    参考 imap_binary() base64_encode() base64_decode()

    imap_body
    读信的内文。
    语法: string imap_body(int imap_stream, int msg_number, int [flags]);
    返回值: 字符串
    函数种类: 网络系统
    内容说明
    本函数可读取信件的内文 (body) 部份。参数 imap_stream 为 imap 的代号。参数 msg_number 为信件的序号。参数 flags 可省略,有下列的值
    ft_uid : 信件序号为 uid。
    ft_peek : 若无配置 \seen 标志则不要设本标志。
    ft_internal : 返回字符串使用系统格式,不要刻意转成 crlf 行结束标准。
    使用范例
    本例利用 imap 协议读取 myid@localhost 的第一封信件。

    imap_check
    返回邮箱信息。
    语法: object imap_check(int imap_stream);
    返回值: 类
    函数种类: 网络系统
    内容说明: 本函数可取得目前电子邮箱的信息。返回值为类类型,包含下面的属性
    date最新邮件的日期driver使用的界面mailbox电子邮箱网址nmsgs总邮件数目recent新进邮件数目
    类属性 代表意义说明
    参考 imap_mailboxmsginfo()

    imap_close
    关闭 imap 链接。
    语法: int imap_close(int imap_stream, int [flags]);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函数用来关闭 imap 的资料流,亦即结束链接。可省略的参数 flags 的值若为 cl_expunge 则在关闭链接前会将电子邮件信箱清空。
    imap_createmailbox
    建立新的信箱。
    语法: int imap_createmailbox(int imap_stream, string mbox);
    返回值: 整数
    函数种类: 网络系统
    内容说明
    本函数用来建立新的信箱。成功则返回 true 值。

    imap_delete
    标记欲删除邮件。
    语法: int imap_delete(int imap_stream, int msg_number);
    返回值: 整数
    函数种类: 网络系统
    内容说明
    本函数仅用来标记欲删除之邮件。实际删除的指令 imap_expunge()

    imap_deletemailbox
    删除既有信箱。
    语法: int imap_deletemailbox(int imap_stream, string mbox);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函数用来删除既有的信箱。成功则返回 true 值。

    imap_expunge
    删除已标记的邮件。
    语法: int imap_expunge(int imap_stream);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函数用来删除已加入删除标记的邮件。欲标记邮件须使用 imap_delete() 函数。

    imap_fetchbody
    从信件内文取出指定部分。
    语法: string imap_fetchbody(int imap_stream, int msg_number, string part_number, flags [flags]);
    返回值: 字符串
    函数种类: 网络系统
    内容说明: 本函数可读取信件的内文 (body) 部份。参数 imap_stream 为 imap 的代号。参数 msg_number 为信件的序号。参数 part_number 为指定的部分。参数 flags 可省略,有下列的值
    ft_uid : 信件序号为 uid。
    ft_peek : 若无配置 \seen 标志则不要设本标志。
    ft_internal : 返回字符串使用系统格式,不要刻意转成 crlf 行结束标准。

    imap_fetchstructure
    获取某信件的结构信息。
    语法: array imap_fetchstructure(int imap_stream, int msg_number);
    返回值: 数组
    函数种类: 网络系统
    内容说明
    本函数可读取指定信件的相关信息。参数 imap_stream 为 imap 的代号。参数 msg_number 为信件的序号。返回的信息为数组的方式,各元素的内容见下表
    type 整数 (integer)encoding整数 (integer)ifsubtype布尔 (boolean)subtype字符串 (string)ifdescription布尔 (boolean)description字符串 (string)ifid布尔 (boolean)id字符串 (string)lines整数 (integer)bytes整数 (integer)ifparameters布尔 (boolean)
    元素名称 类型

    其中 type 元素的值代表的意义如下 0文字 text1复合 multipart2信息 message3程序 application4声音 audio5图形 image6影像 video7其它 other
    值 代表意义

    而 encoding 值代表的意义如下 0七位 (7 bit)1八位 (8 bit)2二进位 (binary)3base64 编码4qp 编码 (quotedprintable)5其它
    值 代表意义
    imap_header
    获取某信件的标头信息。
    语法: object imap_header(int imap_stream, int msg_number, int [fromlength], int [subjectlength], int [defaulthost]);
    返回值: 类
    函数种类: 网络系统
    内 容说明: 本函数可读取指定信件的标头信息。 msg_number 为信件的序号。返回类有下列的属性:answered、bcc、bccaddress、cc、ccaddress、date、date、deleted、 fetchfrom、fetchsubject、flagged、followup_to、from、fromaddress、in_reply_to、 maildate、message_id、msgno、newsgroups、recent、references、remail、reply_to、 reply_toaddress、return_path、return_pathaddress、sender、senderaddress、 size、subject、subject、to、toaddress、udate、unseen。

    imap_headers
    获取全部信件的标头信息。
    语法: array imap_headers(int imap_stream);
    返回值: 数组
    函数种类: 网络系统
    内容说明: 本函数可读取全部信件的标头信息。参数 imap_stream 为 imap 的代号。返回的数组一个元素为某一封信的标头。
    使用范例
    $mb = imap_open(“{my.imap.com.tw}inbox”, “wilson”, “mypasswd”);
    $allheaders = imap_headers($mb);
    imap_close($mb);
    echo ”

    \n";
    for ($i=0; $i < count($allheaders); $i++) {
    echo $allheaders[$i]."
    
    \n"; } echo "

    \n”;
    ?>

    imap_listmailbox
    获取邮箱列示。
    语法: array imap_listmailbox(int stream_id, string ref, string pattern);
    返回值: 数组
    函数种类: 网络系统
    内 容说明: 本函数可获得邮箱列示。参数 imap_stream 为 imap 的代号。参数 ref 通常为 imap 服务器名称,参考下例。参数 pattern 可用万用字符 * 代表全部的路径,aayawa@yahoo.com 并指出 (27-apr-1999) 若本参数以 “” (空字符) 代入,不会返回资料。
    使用范例
    本例为 alank@shermanloan.com 于 02-jun-1999 所提出的。
    $account = “myid”;
    $password= “mypasswd”;
    $mailbox = imap_open(“{mail.xyz.com:143}inbox”, $account, $password);
    if ($mailbox) {
    $mailboxes = imap_listmailbox($mailbox, “{mail.xyz.com:143}”, “*”);
    for ($index = 0; $index < count($mailboxes); $index++) { print($mailboxes[$index] . “\n”); } imap_close($mailbox); } else { print(“无法?/font>}启 $account 的信箱.\n”);
    }
    ?>

    imap_listsubscribed
    获取订阅邮箱列示。
    语法: array imap_listsubscribed(int stream_id, string ref, string pattern);
    返回值: 数组
    函数种类: 网络系统
    内容说明: 本函数可获得订阅邮箱 (subscribed) 列示。参数 imap_stream 为 imap 的代号。参数 ref 通常为 imap 服务器名称。参数 pattern 可用万用字符 * 代表全部的路径。
    参考 imap_listmailbox() imap_subscribe() imap_unsubscribe()

    imap_mail_copy
    复制指定信件到它处邮箱。
    语法: int imap_mail_copy(int imap_stream, string msglist, string mbox, int [flags]);
    返回值: 整数
    函数种类: 网络系统
    内 容说明: 本函数复制指定的信件到指定的邮箱 (mailbox) 之中。参数 imap_stream 为 imap 的代号。参数 msglist 可以是信件号序,也可以是范围。参数 mbox 为复制的目的邮箱。参数 flags 可省略,有二种选择 cp_uid,cp_move。

    imap_mail_move
    移动指定信件到它处邮箱。
    语法: int imap_mail_move(int imap_stream, string msglist, string mbox);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函数移动指定的信件到指定的邮箱 (mailbox) 之中。参数 imap_stream 为 imap 的代号。参数 msglist 可以是信件号序,也可以是范围。参数 mbox 为移动的目的邮箱。

    imap_num_msg
    取得信件数。
    语法: int imap_num_msg(int imap_stream);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函数可取得邮箱 (mailbox) 的信件数。参数 imap_stream 为 imap 的代号。

    imap_num_recent
    取得新进信件数。
    语法: int imap_num_recent(int imap_stream);
    返回值: 整数
    函数种类: 网络系统
    内容说明
    本函数可取得邮箱 (mailbox) 的新进未读信件数。参数 imap_stream 为 imap 的代号。
    imap_open
    打开 imap 链接。
    语法: int imap_open(string mailbox, string username, string password, int [flags]);
    返回值: 整数
    函数种类: 网络系统
    内 容说明: 本函数可打开客户端与服务器之间的 imap 链接,并可链接至 pop3 或 nntp 服务器。参数 mailbox 为服务器端的位置。参数 username 为用户帐号。参数 password 为用户的密码。参数 flags 可省略,有下列的值:
    op_readonly : 打开链接使用只读状态。
    op_anonymous : 匿名读取 nntp 服务器,不使用 .newsrc 文件。
    op_halfopen : 只与 imap 或 nntp 服务器链接,不打开邮箱。
    cl_expunge : 关闭链接时自动清除邮箱中的信件。
    使用范例
    下例分别为打开 imap、pop3、nntp 的部份参考范例
    }启与 imap 服务器链接,imap 的埠 (port) 通?/font>`为 143。
    $mbox = imap_open(“{localhost/pop3:110}inbox”,”user_id”,”password”);
    \\ ?/font>}启与 pop3 服务器链接,pop3 的埠值为 110。
    $nntp = imap_open(“{localhost/nntp:119}comp.test”,”",”");
    \\ ?/font>}启与 nntp 服务器链接,nntp 的埠为 119。
    ?>

    imap_ping
    检查 imap 是否连接。
    语法: int imap_ping(int imap_stream);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函用来检查与 imap 服务器的连接状态。参数 imap_stream 为 imap 的代号。若仍然保持与 imap 服务器连接则返回 true 值。

    imap_renamemailbox
    更改邮箱名字。
    语法: int imap_renamemailbox(int imap_stream, string old_mbox, string new_mbox);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函用来更改邮箱 (mailbox) 的名字。参数 imap_stream 为 imap 的代号。参数 old_mbox 及 new_mbox 分别为原邮箱名字及欲更换成的新邮箱名字。更换成功则返回 true 值。

    imap_reopen
    重开 imap 链接。
    语法: int imap_reopen(string imap_stream, string mailbox, string [flags]);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函数可重新打开客户端与服务器之间的 imap 链接。本函数通常与 imap_ping() 函数合用。参数 mailbox 为服务器端的位置。参数 flags 可省略,有下列的值:
    op_readonly : 打开链接使用只读状态。
    op_anonymous : 匿名读取 nntp 服务器,不使用 .newsrc 文件。
    op_halfopen : 只与 imap 或 nntp 服务器链接,不打开邮箱。
    cl_expunge : 关闭链接时自动清除邮箱中的信件。
    使用范例

    imap_subscribe
    订阅邮箱。
    语法: int imap_subscribe(int imap_stream, string mbox);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函数可订阅新邮箱 (mailbox)。

    imap_undelete
    取消删除邮件标记。
    语法: int imap_undelete(int imap_stream, int msg_number);
    返回值: 整数
    函数种类: 网络系统
    内容说明
    本函数将标记欲删除邮件取消。标记欲删除邮件需使用 imap_delete()。参数 msg_number 代表邮件的流水序号。

    imap_unsubscribe
    取消订阅邮箱。
    语法: int imap_unsubscribe(int imap_stream, string mbox);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函数可取消订阅新邮箱 (mailbox)。

    imap_qprint
    将 qp 编码转成八位。
    语法: string imap_qprint(string string);
    返回值: 字符串
    函数种类: 网络系统
    内容说明
    本函数可将 qp (quoted-printable) 编码字符串转成八位字符串。
    参考 quoted_printable_decode() imap_8bit()

    imap_8bit
    将八位转成 qp 编码。
    语法: string imap_8bit(string string);
    返回值: 字符串
    函数种类: 网络系统
    内容说明: 本函数可将八位字符串转成 qp (quoted-printable) 编码字符串。
    参考 quoted_printable_decode() imap_qprint()

    imap_binary
    将八位转成 base64 编码。
    语法: string imap_binary(string string);
    返回值: 字符串
    函数种类: 网络系统
    内容说明: 本函数将字符串转成 mime base64 编码。此编码方式可以让中文字或者图片也能在网络上顺利传输。更多的 base64 编码信息可以参考 rfc2045 文件之 6.8 节或是 base64_encode()。
    参考 imap_base64() base64_decode() chunk_split()

    imap_scanmailbox
    寻找信件有无特定字符串。
    语法: array imap_scanmailbox(int imap_stream, string ref, string pattern, string content);
    返回值: 数组
    函数种类: 网络系统
    内 容说明: 本函用来检查与 imap 服务器信件中有无特定的字符串。参数 imap_stream 为 imap 的代号。参数 ref 通常为 imap 服务器名称,如 “{mail.wahaha.com:143}”。参数 pattern 为解析比对字符串的规则。参数 content 则为欲寻找的字符串内容。

    取得目前邮箱的信息。
    语法: object imap_mailboxmsginfo(int imap_stream);
    返回值: 类
    函数种类: 网络系统
    内 容说明: 本函用来取得目前使用中邮箱 (mailbox) 的相关信息。参数 imap_stream 为 imap 的代号。返回类包括下列的属性 date最新邮件的日期driver使用的界面mailbox电子邮箱网址nmsgs总邮件数目recent新进邮件数目unread未读邮件数目 size邮箱大小
    类属性 代表意义说明
    参考:imap_check

    imap_rfc822_write_address
    电子邮件位址标准化。
    语法: string imap_rfc822_write_address(string mailbox, string host, string personal);
    返回值: 字符串
    函数种类: 网络系统
    内容说明: 本函数将电子邮件位址成为 rfc822 的标准格式。

    imap_rfc822_parse_adrlist
    解析电子邮件位址。
    语法: object imap_rfc822_parse_adrlist(string address, string default_host);
    返回值: 类
    函数种类: 网络系统
    内容说明: 本函数可解析电子邮件位址。返回的类包括下列属性 mailbox用户名称host服务器名称personal个人名字adl所在来源绕路
    属性名 说明
    imap_setflag_full
    配置信件标志。
    语法: int imap_setflag_full(int imap_stream, string sequence, string flag, int [options]);
    返回值: 整数
    函数种类: 网络系统
    内 容说明: 本函数可指定连续信件而配置标志。参数 imap_stream 为 imap 的代号。参数 sequence 为特定的部分序号。参数 flag 为欲配置的标志值,包括 seen、answered、flagged、deleted、draft 及 recent。参数 options 可省略,可为 st_uid。

    imap_clearflag_full
    清除信件标志。
    语法: imap_clearflag_full(int imap_stream, string sequence, string flag, int [options]);
    返回值: 无
    函数种类: 网络系统
    内 容说明: 本函数可指定连续信件而清除标志。参数 imap_stream 为 imap 的代号。参数 sequence 为特定的部分序号。参数 flag 为欲配置的标志值,包括 seen、answered、flagged、deleted、draft 及 recent。参数 options 可省略,可为 st_uid。

    imap_sort
    将信件标头排序。
    语法: array imap_sort(int imap_stream, int criteria, int reverse, int [options]);
    返回值: 数组
    函数种类: 网络系统
    内容说明
    本函数将信件标头排序。参数 imap_stream 为 imap 的代号。参数 criteria 的意义见下表,并只能是下表的其中一项 mailbox用户名称host服务器名称personal个人名字adl所在来源绕路
    属性名 说明

    参数 reverse 值为 0 时表由小到大排序,若值为 1 表由大到小排序。参数 options 可省略,有下列的值: se_uid 与 se_noprefetch。

    imap_fetchheader
    取得原始标头。
    语法: string imap_fetchheader(int imap_stream, int msg_no, int [options]);
    返回值: 字符串
    函数种类: 网络系统
    内容说明: 本函数将信件标头排序。参数 imap_stream 为 imap 的代号。参数 msg_no 为信件序号。参数 options 可省略,其值有下列数种
    ft_uid : 信件序号为 uid。
    ft_internal : 返回字符串使用系统格式,不要刻意转成 crlf 行结束标准。
    ft_prefetchtext : 去掉额外的 rtt。

    imap_uid
    取得信件 uid。
    语法: string imap_uid(string mailbox, int msgno);
    返回值: 字符串
    函数种类: 网络系统
    内容说明: 本函数可取得指定信件的 uid。参数 mailbox 为邮箱名。参数 msgno 为信件序号。

    imap_getmailboxes
    取得全部信件详细信息。
    语法: object imap_getmailboxes(int imap_stream, string ref, string pattern);
    返回值: 类
    函数种类: 网络系统
    内容说明: 本函用来检查 imap 服务器信件的详细信息。参数 imap_stream 为 imap 的代号。参数 ref 通常为 imap 服务器名称,如 “{mail.wahaha.com:143}”。参数 pattern 为解析比对字符串的规则。

    imap_getsubscribed
    列出所有订阅邮箱。
    语法: array imap_getsubscribed(int imap_stream, string ref, string pattern);
    返回值: 数组
    函数种类: 网络系统
    内 容说明: 本函用来列示出所有订阅 imap 服务器信箱 (mailbox)。参数 imap_stream 为 imap 的代号。参数 ref 通常为 imap 服务器名称,如 “{mail.wahaha.com:143}”。参数 pattern 为解析比对字符串的规则。

    imap_msgno
    列出 uid 的连续信件。
    语法: int imap_msgno(int imap_stream, int uid);
    返回值: 整数
    函数种类: 网络系统
    内容说明: 本函用来列示指定 uid 的连续信件。参数 imap_stream 为 imap 的代号。参数 uid 为用户代号。
    搜寻指定标准的信件。
    语法: array imap_search(int imap_stream, string criteria, int flags);
    返回值: 数组
    函数种类: 网络系统
    内 容说明: 本函用来搜寻合乎指定条件的信件。参数 imap_stream 为 imap 的代号。参数 criteria 为指定的条件,各字段以空格 (space) 分开,条件见下表。参数 flags 为 se_uid。 all返回所有合乎标准的信件answered信件有配置 \\answered 标志者bcc “字符串”bcc 栏中有指定 “字符串” 的信件before “日期”指定 “日期” 以前的信件body “字符串”内文字段中有指定 “字符串” 的信件cc “字符串”cc 栏中有指定 “字符串” 的信件deleted合乎已删除的信件flagged信件有配置 \\flagged 标志者from “字符串”from 栏中有指定 “字符串” 的信件keyword “字符串”关键字为指定 “字符串” 者new新的信件old旧的信件on “日期”指定 “日期” 的信件recent信件有配置 \\recent 标志者seen信件有配置 \\seen 标志者since “日期”指定 “日期” 之后的信件subject “字符串”subject 栏中有指定 “字符串” 的信件text “字符串”text 栏中有指定 “字符串” 的信件to “字符串”to 栏中有指定 “字符串” 的信件unanswered未回应的信件undeleted未删除的信件unflagged未配置标志的信件unkeyword “字符串”未配置关键 “字符串” 的信件unseen未读取的信件
    条件 说明

    imap_last_error
    最后的错误信息。
    语法: string imap_last_error(void);
    返回值: 字符串
    函数种类: 网络系统
    内容说明: 本函数用来显示最后出现的 imap 错误字符串。本函数不需要使用任何参数。

    imap_errors
    所有的错误信息。
    语法: array imap_errors(void);
    返回值: 数组
    函数种类: 网络系统
    内容说明: 本函数用来显示所有出现的 imap 错误字符串。本函数不需要使用任何参数。

    imap_alerts
    所有的警告信息。
    语法: array imap_alerts(void);
    返回值: 数组
    函数种类: 网络系统
    内容说明: 本函数用来显示所有出现的 imap 警告字符串。本函数不需要使用任何参数。

    imap_status
    目前的状态信息。
    语法: object imap_status(int imap_stream, string mailbox, int options);
    返回值: 类
    函数种类: 网络系统
    内 容说明: 本函数用来显示目前 imap 的状态信息。参数 imap_stream 为 imap 的代号。参数 mailbox 为指定的邮箱。参数 options 有下面的选择:sa_messages、sa_recent、sa_unseen、sa_uidnext、sa_uidvalidity 与 sa_all。


  • 如何用php生成随机码?

    <?php

    function  makeRandomCount($length = 6){
    $key = “”;
    $str = ’0123456789ABCDEFGHIJKLOMNOPQRSTUVWXYZ’;//字符池
    for($i=0;$i<$length;$i++) {
    $key .= $str{mt_rand(0,36)};
    }
    return $key;
    }

    ?>


  • php中如何允许特殊ip组访问项目

    在做项目的过程中,往往会遇到允许一些特殊的ip访问项目,这里便是一个允许ip组访问的实例


    //$checklevel匹配等级,默认0匹配正则,1为ip末尾数字必须匹配,2为完全匹配
    function __nlb($ip=null,$checklevel = 0){
    if(empty($ip)){
    $ip = $this->getOnlineIP(); // 获取客户端ip请看http://www.52blogger.com/archives/597
    }
    if(preg_match('/^(203\.78\.)(9|11|12|13|14|15)(\.)[\d]{2,3}$/',$ip)){
    if($checklevel == 0){
    $iparr = explode('.',$ip);
    if($checklevel == 1){
    $nlbips = array("20","21","22","35","37","38","39","40","41","42","47","77","99","148","149","150","165");
    }elseif($checklevel == 2){
    switch($iparr[2]){
    case "9" : $nlbips = array("148","149","150","165"); break;
    case "11" : $nlbips = array("35","37","38","39","40","41","42","47","77","99"); break;
    case "12" : $nlbips = array("20","21","22"); break;
    case "13" : $nlbips = array("20","21","22"); break;
    case "14" : $nlbips = array("148","149","150","165"); break;
    case "15" : $nlbips = array("47","77"); break;
    default : return false;
    }
    }
    if(in_array($iparr[3],$nlbips)){
    return true;
    }
    }else{
    return true;
    }
    }
    return false;
    }

    //这是允许的ip组,可做测试

    A
    1 203.78.11.35
    2 203.78.11.37
    3 203.78.11.38
    4 203.78.11.39
    5 203.78.11.40
    6 203.78.11.41
    7 203.78.11.42
    8 203.78.11.47
    9 203.78.11.77
    10 203.78.11.99
    11 203.78.12.20
    12 203.78.12.21
    13 203.78.12.22
    14 203.78.13.20
    15 203.78.13.21
    16 203.78.13.22
    17 203.78.14.148
    18 203.78.14.149
    19 203.78.14.150
    20 203.78.14.165
    21 203.78.15.47
    22 203.78.15.77
    23 203.78.9.148
    24 203.78.9.149
    25 203.78.9.150
    26 203.78.9.165

  • php获取客户端ip,简单实用


    function getOnlineIP() {
    $cip = getenv ( 'HTTP_CLIENT_IP' );
    $xip = getenv ( 'HTTP_X_FORWARDED_FOR' );
    $rip = getenv ( 'REMOTE_ADDR' );
    $srip = $_SERVER ['REMOTE_ADDR'];

    if ($cip && strcasecmp ( $cip, 'unknown' )) {
    $onlineip = $cip;
    } elseif ($xip && strcasecmp ( $xip, 'unknown' )) {
    $onlineip = $xip;
    } elseif ($rip && strcasecmp ( $rip, 'unknown' )) {
    $onlineip = $rip;
    } elseif ($srip && strcasecmp ( $srip, 'unknown' )) {
    $onlineip = $srip;
    }

    preg_match ( "/[\d\.]{7,15}/", $onlineip, $match );
    $onlineip = $match [0] ? $match [0] : 'unknown';

    return $onlineip;
    }


  • php模拟post提交数据

    php模拟post提交数据,用处很多,可用来网站的采集,登陆等等


    //以我项目中的论坛登录为例
    function A_bbslogin($user_login,$password,$host,$port="80"){
    //需要提交的post数据
    $argv = array(
    'cookie' => array('user_login' =>$user_login, 'password' => $password,'_wp_http_referer'=>'/bbpress/','re'=>'','remember'=>true)
    );
    foreach($argv['cookie'] as $key => $value) {
    $params[] = $key . '=' . $value;
    }
    $params = implode('&', $params);
    $header = "POST /bbpress/bb-login.php HTTP/1.1\r\n";
    $header .= "Host:$host:$port\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($params) . "\r\n";
    $header .= "Connection: Close\r\n\r\n";
    $header .= $params;
    $fp = fsockopen($host, $port);
    fputs($fp, $header);
    while(!feof($fp)) {
    $str = fgets($fp); //以下是自己的逻辑代码,这里主要是模拟cookie,可用来同步登陆
    if(!(strpos($str,"Set-Cookie:") === false)){
    $tmparray = explode(" ",$str);
    $cookiearray = explode("=",$tmparray[1]);
    $cookiepaths = explode("=",$tmparray[6]);
    $cookiename = urldecode($cookiearray[0]);
    $cookievalue = urldecode(substr($cookiearray[1],0,strlen($cookiearray[1])-1));
    $cookietime = time()+3600*24*7;
    $cookiepath = urldecode(substr($cookiepaths[1],0,strlen($cookiepaths[1])-1));
    setcookie($cookiename,$cookievalue,$cookietime,$cookiepath);
    }
    }
    fclose($fp);
    }


  • 提高PHP编程效率的53个要点

    用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。
    1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。
    2、$row[’id’] 的速度是$row[id]的7倍。
    3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。
    4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
    5、注销那些不用的变量尤其是大数组,以便释放内存。
    6、尽量避免使用__get,__set,__autoload。
    7、require_once()代价昂贵。
    8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。
    9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
    10、函数代替正则表达式完成相同功能。
    11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
    12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
    13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
    14、用@屏蔽错误消息的做法非常低效,极其低效。
    15、打开apache的mod_deflate模块,可以提高网页的浏览速度。
    16、数据库连接当使用完毕时应关掉,不要用长连接。
    17、错误消息代价昂贵。
    18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
    19、递增一个全局变量要比递增一个局部变量慢2倍。
    20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
    21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
    22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
    23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
    24、派生类中的方法运行起来要快于在基类中定义的同样的方法。
    25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
    26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
    27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
    28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
    29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
    (举例如下)
    if (strlen($foo) < 5) { echo “Foo is too short”$$ }
    (与下面的技巧做比较)
    if (!isset($foo{5})) { echo “Foo is too short”$$ }
    调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
    34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
    35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
    36、并非要用类实现所有的数据结构,数组也很有用。
    37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
    38、当你需要时,你总能把代码分解成方法。
    39、尽量采用大量的PHP内置函数。
    40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
    41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
    42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
    43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
    44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
    45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
    46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
    47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
    48、多维数组尽量不要循环嵌套赋值;
    49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
    50、foreach效率更高,尽量用foreach代替while和for循环;
    51、用单引号替代双引号引用字符串;
    52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
    53、对global变量,应该用完就unset()掉;


  • phpwind8.0版发布啦

    phpwind V8.0 beta 的数据表更改情况如下:

    修改:
    attachs  附件信息
    增加字段mid,表示消息id,`mid` int(10) unsigned not null default ’0′

    nav  自定义导航
    增加字段selflisttype,表示当前页排列方式,`selflisttype` VARCHAR( 10 ) NOT NULL DEFAULT ”;
    增加字段floattype,导航配置表浮动显示方式,`floattype` VARCHAR( 10 ) NOT NULL DEFAULT ”;
    增加字段listtype,导航配置表排列方式,`listtype` VARCHAR( 10 ) NOT NULL DEFAULT ”’;

    cmembers  群组成员信息
    修改字段introduce,简介,`introduce` VARCHAR( 255 ) NOT NULL;
    增加字段lastpost,群组里面会员的最后发言时间,`lastpost`INT( 11 ) UNSIGNED NOT NULL ;

    datanalyse  数据统计信息
    修改字段num,热榜缓存支持对于时间的排序,`num` INT( 10 ) NOT NULL DEFAULT ’0′;

    invokepiece  门户相关基础模块
    删除字段func
    删除字段rang
    增加字段config,模块表统一模块配置字段,`config` varchar(255) NOT NULL AFTER `action`;
    增加字段ifpushonly,是否只调用推送数据,`ifpushonly` TINYINT( 1 ) UNSIGNED NOT NULL;

    pushdata  模板自定义推送数据表
    删除字段title
    删除字段loopid
    增加字段ifbusiness,是否商业推送,`ifbusiness` TINYINT( 1 ) UNSIGNED NOT NULL ;
    增加字段pushtime,推送时间,`pushtime` INT( 10 ) UNSIGNED NOT NULL AFTER `titlecss` ;
    增加字段ifverify,是否通过推送审核,`ifverify` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT ’0′ AFTER `pushtime` ;
    删除字段invokename

    elements  元素表
    修改字段eid,增加元素表id的长度,`eid` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT;

    colonys  群组信息
    增加字段iftopicshowinforum,控制群组帖子是否显示在版块中,`iftopicshowinforum` TINYINT( 1 ) UNSIGNED DEFAULT ’1′ NOT NULL AFTER `activitynum` ;
    增加字段viewtype, 群组的展示类型 0:群组和论坛视图 1:论坛视图 2:群组视图,`viewtype` TINYINT( 1 ) NOT NULL ;
    修改字段ifopen, 话题浏览权限 0:仅群组成员 1:任何人,`ifopen` TINYINT( 1 ) NOT NULL DEFAULT ’1′ ;
    修改字段ifwriteopen, 记录浏览权限 0:仅群组成员 1:任何人,`ifwriteopen` TINYINT( 1 ) NOT NULL DEFAULT ’1′ ;
    增加字段ifmemberopen, 成员浏览权限 0:仅群组成员 1:任何人,`ifmemberopen` TINYINT( 1 ) NOT NULL DEFAULT ’1′ ;
    增加字段ifannouceopen, 公告浏览权限 0:仅群组成员 1:任何人,`ifannouceopen` TINYINT( 1 ) NOT NULL DEFAULT ’1′ ;
    删除字段albumopen
    增加字段titlefont,群组标题字体,`titlefont` varchar(255) NOT NULL DEFAULT ”;
    增加字段vieworder,关联版块的群组在版块中显示的顺序,`vieworder` TINYINT( 3 ) NOT NULL ;
    增加字段colonystyle,群组风格,`colonystyle` VARCHAR( 40 ) NOT NULL;
    增加字段ifshowpic,是否在帖子列表页以图文的方式显示群组链接,`ifshowpic` TINYINT( 1 ) NOT NULL ;
    增加字段 ifshow,群组链接是否在版块中显示,`ifshow` TINYINT( 1 ) NOT NULL ;
    增加字段visit,群组增加访问统计,`visit` INT( 11 ) DEFAULT ’0′ NOT NULL ;
    增加字段styleid,群组自有的分类表,`styleid` SMALLINT( 6 ) UNSIGNED NOT NULL DEFAULT ’0′;
    增加字段tnum,群组的主题数,`tnum` INT NOT NULL ;
    增加字段activitynum,群组活动数,`activitynum` INT( 10 ) NOT NULL AFTER `writenum`;
    增加字段pnum,群组的回复数,`pnum` INT( 10 ) UNSIGNED NOT NULL AFTER `tnum` ;
    增加字段photonum,更新群组相片数,`photonum` INT( 10 ) UNSIGNED NOT NULL AFTER `albumnum` ;
    增加字段todaypost,群组的当日发帖数,`todaypost` INT( 11 ) NOT NULL ;
    增加字段writenum,群组记录数,`writenum` INT( 10 ) NOT NULL AFTER `photonum`;

    cnalbum  群组相册
    修改字段aid,相册id增加范围,`aid`int(11) unsigned not null AUTO_INCREMENT;
    增加字段isdefault,默认相册标识字段,`isdefault` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT ’0′;
    增加字段memopen,群组相册是否允许群员上传字段 1:允许 0: 不允许,`memopen` TINYINT(1) NOT NULL DEFAULT ’1′;

    cnphoto  群组相片
    修改字段aid,相册id增加范围,`aid`int(11) unsigned not null AUTO_INCREMENT;

    memberdata  用户基本信息
    增加字段lastmsg,最后更新消息时间,`lastmsg` INT(10) UNSIGNED DEFAULT ’0′ NOT NULL;
    增加字段lastgrab,最后抓取时间,`lastgrab`int(10) unsigned not null default 0;

    argument  群组讨论区信息
    删除字段locked
    增加字段digest,群组自有的精华字段,`digest` TINYINT( 1 ) NOT NULL DEFAULT ’0′;
    增加字段locked,群组自有的锁定字段,`locked` TINYINT( 1 ) NOT NULL DEFAULT ’0′;
    增加字段titlefont,群组自有的加亮字段,`titlefont` VARCHAR( 15 ) NOT NULL ;
    增加字段toolfield,群组帖子管理有效期字段,`toolfield` VARCHAR( 21 ) NOT NULL ;

    增加:
    write_smiles 特殊表情表
    pageinvoke 门户频道模块配置表
    channel 门户频道表
    ms_tasks 消息中心任务表
    area_level 门户权限表
    ms_searchs 消息中心搜索关系表
    ms_attachs 消息中心数据表
    ms_configs 消息配置表
    ms_messages 消息体表
    ms_relations 消息关系表
    ms_replies 消息回复表
    cnlevel 群组等级表结构
    ms_replies 消息回复表
    group_replay 群组回复结构表
    cnstyles 群组自有的分类表
    cwritedata 群组记录表
    active 群组活动
    actmembers 群组活动报名
    actattachs 群组活动附件
    cnskin 群组记录表
    inviterecord 好友邀请宣传奖励记录表
    attention 朋友模板里,我关注的
    privacy 空间隐私表
    space 个人空间信息表

    删除:
    columns 团购活动主题表
    columns_content 团购活动主题表
    block 门户相关元素块,如最新主题等
    stamp 模式下的分类



  • dinamic_sidebar 4 none

©2012 龙哥博客 文章 (RSS) and 评论 (RSS) 加载博客产生 29 个查询,用时 0.375 秒