my php clsss list
2010-06-10 | millken Posted On :


  <pre style="background:none repeat scroll 0 0 #F3F3F3;border:1px solid #CCCCCC;padding:9px;word-wrap:word-break;font-size:12px !important;font-family:monospace !important;margin:0;">

  </pre>
class pages_class {
    public $count;      #结果总数
    public $page;       #当前页
    public $pagesize;   #每页结果数
    public $baseurl;    #url
    public $result;     #结果数组集
    public $max;   #最大记录数
    private $permalink ; #是否固定链接

    #构造函数,初始化变量
    function __construct( $count , $page , $pagesize ,  $baseurl = false, $max = 0 )
    {
        $this->count     = $count;
        $this->page      = max(intval($page),1);
        $this->pagesize  = $pagesize;
        $this->permalink = false;
        $this->baseurl   = $baseurl ? $baseurl : $this->__geturl();
        $this->max = max(0, $max);
        $this->pagecount = ($this->max>0 && ceil($this->count/$this->pagesize)>$this->max)?$this->max:ceil($this->count/$this->pagesize);
    }

    #获得当前url
    function __geturl()
    {
        $permalink = URL_REWREITE_MODE;
        if ( $permalink && 'search' !== $GLOBALS['router']->getController() ) {
            $this->permalink = true;
            $link = preg_replace("~(\/)page/\d+~i", "", $_SERVER['REQUEST_URI']);
        }else{
            $link = preg_replace('/((\?)p=\d+[&])|(&p=\d+|(&))|(\?p=\d+$)/eis','"\\2\\4"',$_SERVER['REQUEST_URI']);
        }
        return $link;
    }

    #获得分页列表
    function get_list()
    {
        $this->result['count'] = $this->count;
        $this->result['page'] = $this->page;
        $this->result['pagesize'] = $this->pagesize;
        $this->result['pagecount'] = $this->pagecount;
        if($this->result['pagecount']<=1) //只有一页以下
        {
            $this->result['pagelist'] = 0;
        }
        else //一页以上
        {
            #前一页,第一页的算法
            $this->result['first'] = ($this->page == 1) ? 0 : 1;
            $this->result['firsturl'] = $this->baseurl . ($this->permalink? '/page/1':'&p=1');
            $this->result['pre'] = ($this->page > 1) ? ($this->page - 1) : 0;
            $this->result['preurl'] = $this->baseurl . ($this->permalink? '/page/':'&p=') . $this->result['pre'];
            #后一页,最后一页的算法
            $this->result['next'] = ($this->page >= $this->pagecount ) ? 0 : $this->page + 1;
            $this->result['nexturl'] = $this->baseurl . ($this->permalink? '/page/':'&p=') . $this->result['next'];
            $this->result['last'] = ($this->page >= $this->pagecount ) ? 0 : $this->pagecount;
            $this->result['lasturl'] = $this->baseurl . ($this->permalink? '/page/':'&p=') . $this->result['last'];



            #起始
            $pagearray = array();
            $start =max( floor(($this->page-1)/10),0)*10+1;
            for($i=0;$i<($this->pagecount<10?$this->pagecount :10) ;$i++)
            {
                if( ($start+$i) <= $this->result['pagecount'])
                {
                    $pagearray[$i]['page'] = $start+$i;
                }
                if( ($start+$i) != $this->page )
                {
                    $pagearray[$i]['url'] = $this->baseurl . ($this->permalink? '/page/':'&p='). ($start+$i);
                }
            }
            #分页导航列表
            $this->result['pagelist'] = $pagearray;
            $this->result['baseurl'] = $this->baseurl;
        }
        return $this->result;
    }
}

评论: 0 引用:0
sourcecode list
2010-06-09 | millken Posted On :


短网址算法

function shorturl($input) {
  $base32 = array (
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
    'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
    'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
    'y', 'z', '0', '1', '2', '3', '4', '5'
    );
 
  $hex = md5($input);
  $hexLen = strlen($hex);
  $subHexLen = $hexLen / 8;
  $output = array();
 
  for ($i = 0; $i < $subHexLen; $i++) {
    $subHex = substr ($hex, $i * 8, 8);
    $int = 0x3FFFFFFF & (1 * ('0x'.$subHex));
    $out = '';
 
    for ($j = 0; $j < 6; $j++) {
      $val = 0x0000001F & $int;
      $out .= $base32[$val];
      $int = $int >> 5;
    }
 
    $output[] = $out;
  }
 
  return $output;
}


//返回指定长度的随机字串
function m_rand($len=8){
        $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
        $max = strlen($chars) - 1;
        $hash = '';
        for ($i = 0; $i < $len; ++$i)
                $hash .= $chars[mt_rand(0,$max)];
        return $hash;
}





评论: 0 引用:0
CACert:免费的数字证书组织
2009-05-14 | millken Posted On : 资讯|Information

众所周知,在中国想给自己申请一份电子邮件证书或者给自己的网站、服务器申请一个SSL证书是很不容易的,你每年都得给CA(证书颁发验证组织)缴纳不少的证书申请费。每个网民都能拿到数字证书那是可望不可即的……
但是现在不同了,我们有了CAcert。国外一个免费的数字证书颁发组织,你可以免费注册成为用户,申领个人证书和服务器证书等。证书被各种浏览器、邮件客户端所支持。

就像他们主页所宣传的那样:
我们已经等了很久,但是我们没有白等,我们终于可以以合理的价格得到安全了--免费的!
多少年来,各安全认证机构都要向我们收取大量金钱。他们所作的根本不值这个价钱,我们没有必要为安全花这么多钱。
网站提供简体中文版本(在网站右侧的“翻译”菜单下选择),虽然汉化的不是很完全。但是主要的内容基本上都可以理解。

申 请证书的步骤很简单,首先你需要访问CAcert.org,在右侧选择安装根证书,下载完毕根证书导入到你的浏览器或邮件客户端等需要使用证书的软件中。 然后点击加入,写一张注册表。稍后你填写的邮箱将会收到验证邮件,验证完毕就可以去他们的主页登陆了(我的帐号 - Password Login)。登陆成功你就可以申请免费的数字证书了,注册完毕后请别忘了备份。

虽然该组织颁发的证书目前来说不是很权威,但是起码给了大家一个选择。相信不久的将来免费的证书会被大众认可……

访问:http://www.cacert.org/

标签: , , 评论: 0 引用:0
PHP版PING函数,可用来检测对方主机是否在线
2009-05-07 | millken Posted On : 代码|Code

function ping($host) {
$package = "\x08\x00\x19\x2f\x00\x00\x00\x00\x70\x69\x6e\x67";

/* create the socket, the last '1' denotes ICMP */
$socket = socket_create(AF_INET, SOCK_RAW, 1);
/* set socket receive timeout to 1 second */
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 0, "usec" => 1000));

/* connect to socket */
socket_connect($socket, $host, null);

/* record start time */
$start_time = microtime(true);
socket_send($socket, $package, strlen($package), 0);

if(@socket_read($socket, 255)) {
$end_time = microtime(true);
$total_time = $end_time - $start_time;
return $total_time;
} else {
return false;
}

socket_close($socket);
}


标签: , 评论: 1 评论 引用:0
Linux SVN的安装使用笔记
2009-04-24 | millken Posted On : 代码|Code

SVN简介、下载、安装

SVN简介

The goal of the Subversion project is to build a version control system that is a compelling replacement for CVS in the open source community. The software is released under an Apache/BSD-style open source license.

SVN是一个版本控制软件,类似CVS,但是SVN的的有点是开源的,而且SVN的版本控制能力给CVS还要强多。

SVN可以用于项目管理,还可以用于版本同步,功能可是十分强呢:)

下载:http://subversion.tigris.org

当前日期稳定版SVN1.32http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz

安装:

解压:#: tar zxvf subversion-1.3.2.tar.gz

依次输入./configure , make , make install 进行编译安装完成。

开启SVN服务:svnserve -d

检测服务是否开启:netstat -ntlp如果看到3690的端口正常开放了,证明SVN启动了。
正式使用:
首先我们得建立一个SVN的项目,一般人都认为建立项目就只需要一个文件,在我第一次使用SVN之前都有这样的看法,SVN建立项目需要建立文件夹

建立项目命令:svnadmin create project_name project_name 为你的project名字,可以任意取。
建 立完毕后,project_name是一个文件夹,进入文件夹,可以看到一个conf的文件夹。进入文件夹可以看到2个文件(如果没有passwd文件, 可以用vi创建),编辑 svnserve.conf 把anon-access = read ,auth_access = write
还有password-db = passwd 的注释去掉,还有[general]的注释也要去掉。
vi passwd文件,如果是新文件,则输入:
[user]
your_name = your_password
这里设置的your_name是你的用户名,your_password是你的密码,这个是访问SVN必要的通行证。


好了,现在终于把准备功夫做完了,下面可以正是使用了。
首先找到你的项目源代码文件夹,使用下面命令:
cd your project
in your project dircetory
use:svn co /home/project_name --username = your_name --password=your_password

好了,现在你可以在客户机上使用以下命令获得你想要的项目源代码文件
svn co svn://home/project_name --username=your_name --password = your_password

把增加的svn文件添加入svn库:
svn add /home/your_project/*.* --username=your_name --password = your_password

提交文件:
svn commit /home/your_project/*.* --username=your_name --password=your_password

更新文件:svn update /home/your_project/*.* --username=your_name --password=your_password

当然你可以编辑一个脚本文件来一次完成所有的操作:
vi svnupdate.sh

#!/bin/sh
svn add /home/your_project/*.* --username=your_name --password = your_password
svn commit /home/your_project/*.* --username=your_name --password=your_password
svn update /home/your_project/*.* --username=your_name --password=your_password

chmod +x svnupdate.sh

Finish

标签: , 评论: 0 引用:0
GOOGLE的FTP
2009-01-14 | millken Posted On : 资讯|Information

连接到        uploads.google.com, 端口 21 (#1)
解析主机为:       72.14.243.49
已连接.  正等待响应.            
220 FTP server ready.
USER millken
331 Password required for millken.
PASS xxxxxx
230 User millken logged in.  Access restrictions apply.
SYST
215 UNIX Type: L8
PWD
257 "/" is current directory.
TYPE A
200 Type set to A.
PORT 10,87,1,181,5,24
200 PORT command successful.
LIST -al
150 Opening ASCII mode data connection for directory listing.
226 Transfer complete.
传输完成:      121 字节 共  0.016 秒 (  7.56 KB/s)


标签: , 评论: 0 引用:0
LINUX下的数据库备份
2009-01-06 | millken Posted On : 代码|Code

    一般重要的数据库或数据表都需要及时备份,光备份到自身所在服务器是不行的,如果服务器一旦崩溃,拿不到备份文件也是竹篮打水一场空。所以在备份到本地服务器的同时,还应备份到其他的备用服务器里。

   于是新建一个whmysqlbackup.sh ,内容为:

#################Script Start###################
#Tish script backup the mysqldatebase
#!/bin/bash
Backupfile=WHDB-$(date +%m-%d-%y-%H)
archive=${1:-$Backupfile}
tar cvf - /var/lib/mysql/wh/wh_sku.* > /var/www/html/DBbackup/$archive.tar
cd /var/www/html/DBbackup
gzip $archive.tar
echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."

scp $archive.tar.gz root@172.16.1.6:/whdb/

##################Script end######################

该段脚本表明备份数据库wh里的wh_sku这个表打包压缩到/var/www/html/Dbbackup里,同时上传到172.16.1.6这个服务器。

脚本写好后,可用sh whmysqlbackup.sh命令测试该脚本,若无误,会同时在两个服务器里出现备份包。

后面的就是用调用计划任务功能来完成每天备份:
crontab -e
加入
59 23 * * *  sh /root/whmysqlbackup.sh
表示每天23:59执行一次脚本
保存重启服务
service crond restart

标签: , , 评论: 0 引用:0