作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论

为文件名添加诸如_thumb这样的标记
程序中经常会遇到这种情况,当你为图片生成缩略图时,往往需要保留原来的名字,而在其中插个thumb之类的字符,例如:原文件为test.jpg,生成缩略图的文件往往是test.thumb.jpg或者test_thumb.jpg这样。怎么样往里面插这样的字符呢?
  插入这样的字符有几种方法:

    $orig_filename = 'test.jpg';
    $exp_str = '_thumb';

    //first
    $file_ext = strRchr( $orig_filename, '.' );
    $fst_file = preg_replace( "/(".$file_ext.")$/", $exp_str . $file_ext , $orig_filename  );

    //second
    $orig_info = pathinfo( $orig_filename );
    $scd_file = $orig_info['filename'] . $exp_str . $orig_info['extension'];
    //第三种用substr的我就不写了。。懒啊
作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论

通过秒数获得具体时间

function formattime($num,$arr=array())
{
        if($num>=86400){
                //包含天
                $arr["day"] = sprintf('%d',($num/86400));
                $num -= $arr['day']*86400;
                if($num){
                        return formattime($num,$arr);
                }else{
                        return $arr;
                }
        }elseif($num>=3600){
                //小时
                $arr["hour"] = sprintf("%d",($num/3600));
                $num -= $arr['hour']*3600;
                return formattime($num,$arr);
        }elseif($num>=60){
                //分
                $arr["minute"] = sprintf("%d",($num/60));
                $arr["second"] = sprintf("%d",$num-$arr['minute']*60);
                return $arr;
        }elseif($num<60){
                $arr["second"] = $num;
                return $arr;
        }
}
//我们输入3600那么结果是1小时
//我们输入3601那么是1小时1秒
//我们输入60那么显示1分钟
//等等。有兴趣的朋友可以把这玩意扩展到月甚至年之类的
//用法,返回一个数组
print_R(formattime('3601'));
作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论

拖动div效果函数
说明:
两个参数
第一个事元素id或者元素本身
第二个是可选参数,0或1,表示层是否随滚动条的滚动一起运动

function drag(o,s)
{
      if (typeof o == "string") o = document.getElementById(o);
      o.orig_x = parseInt(o.style.left) - document.body.scrollLeft;
      o.orig_y = parseInt(o.style.top) - document.body.scrollTop;
      o.orig_index = o.style.zIndex;
      //author: www.longbill.cn
      o.onmousedown = function(a)
      {
            this.style.cursor = "move";
            this.style.zIndex = 10000;
            var d=document;
            if(!a)a=window.event;
            var x = a.clientX+d.body.scrollLeft-o.offsetLeft;
            var y = a.clientY+d.body.scrollTop-o.offsetTop;
            
            d.ondragstart = "return false;"
            d.onselectstart = "return false;"
            d.onselect = "document.selection.empty();"
                        
            if(o.setCapture)
                  o.setCapture();
            else if(window.captureEvents)
                  window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP); 

            d.onmousemove = function(a)
            {
                  if(!a)a=window.event;
                  o.style.left = a.clientX+document.body.scrollLeft-x;
                  o.style.top = a.clientY+document.body.scrollTop-y;
                  o.orig_x = parseInt(o.style.left) - document.body.scrollLeft;
                  o.orig_y = parseInt(o.style.top) - document.body.scrollTop;
            } 

            d.onmouseup = function()
            {
                  if(o.releaseCapture)
                        o.releaseCapture();
                  else if(window.captureEvents)
                        window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
                  d.onmousemove = null;
                  d.onmouseup = null;
                  d.ondragstart = null;
                  d.onselectstart = null;
                  d.onselect = null;
                  o.style.cursor = "normal";
                  o.style.zIndex = o.orig_index;
            }
      }
      
      if (s)
      {
            var orig_scroll = window.onscroll?window.onscroll:function (){};
            window.onscroll = function ()
            {
                  orig_scroll();
                  o.style.left = o.orig_x + document.body.scrollLeft;
                  o.style.top = o.orig_y + document.body.scrollTop;
            }
      }
}
作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论

本来是想获取百度今日热门关键字,然后入库来自己调用,当然关键字每天只需更新一次即可。因为不能直接缓存成文件,而是先入库(更新配置信息)后,再从库里读出网站的配置信息后再缓存成文件,所以不需要用到FOPEN等函数。于是想到假定有个文件(锁),当这个锁的修改时间过了一天,我们就更新,反之则不更新。

$upTime = 3600;//自定义更新周期
if(!file_exists('update.lock') || time()-filemtime('update.lock')>$upTime)
{
        $update = true;
        touch('update.lock');//没有此文件时会自动生成
}else{
        $update = false;
}
if($update){updateSeoKeywords();}

用后发现效率还是挺高的,主要就是刷新更改了一下文件的时间。没有冗余的操作

function updateSeoKeywords()
{
        global $db;
        $fd = file_get_contents('http://top.baidu.com/index_more.html');
        $fd = iconv("GBK","UTF-8",$fd);
        $startpos = strpos($fd, '十大电视节目风云榜') + strlen('十大电视节目风云榜');
        $endpos = strpos($fd, '</table>', $startpos);//截取标记
        $book_intro = trim(substr($fd, $startpos, $endpos - $startpos));
        preg_match_all("/\"_blank\"> (.*)<\/a>/", $book_intro, $c);
        //$carr = array_slice($c[1], 0, 4);//取前4个
        $SeoKeywords = implode(",",$c[1]);
        $db->query("REPLACE INTO `config` (`name`,`value`) values ('seokeyword','$SeoKeywords'),('seotitle','$SeoKeywords')");
        updatecachefile('config');
}
作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论

之后对正则匹配出来的结果进行处理。最后只将计算结果入库

$dir    = "logs";
$handle = opendir($dir);
while (false !== ($fname = readdir($handle))) {
        if ($fname != ".." && $fname != ".") {
                $fd     = fopen("$dir/$fname","r");
                while ($str = fgets($fd)){
                        $match  = "/([0-9.]*) \- \- \[([A-Za-z0-9:\/]*) \+[0-9]{4}\] \"GET \/(.*) HTTP\/1.1\" ([0-9-]+) ([0-9-]*)/siU";
                        preg_match($match,$str,$matches);

                        $ip        = $matches[1];
                        $gettime   = $matches[2];
                        $url       = $matches[3];
}
作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论

AJAX的实现
ajax本身的操作过程无外是:

1.构建一个xmlHTTP对像
注意:xmlHttp_vers 应该从版本高的往版本低的写,这样建立对像的数据调用的是你机子上安装过的最高版本的MSXML2.XmlHttp
2.通过xmlHTTP的同步或是异步方式发送数据(大部分都是异步方式)
这里主要是调用xmlHttp的open方法和send方法来处理
xmlHTTP的方法可以到www.xmlhttp.cn查看(我以前发过一个chm的,但因为版权被村长删除啦,谁要是想要,回信,我发一下)
3.如果是异步方式检查xmlHttp的状态变化
当状态改变时会调用onreadystatechange属性指定的回调函数showData,来来检查状态变化
xmlHTTP.readyState 和xmlHTTP.status 可以去查手册,看一下就知道
4.当状态变到readyState==4,而且status==200说明发送数据成功
5.这时候再通过javascript处理xmlHTTP的responseText或是responseXml(这两者是同时存在的)
到这里就一次xmlhttp发送异步调用数据也就算完成啦

<html>
<head>
<title>
ajax
</title>
<script language="javascript">
function createRequest(){
        if(typeof XMLHttpRequest!="undefined")        {
                return new XMLHttpRequest();
        }else if(typeof ActiveXObject!="undefined"){
                var xmlHttp_ver  = false;
                var xmlHttp_vers = ["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
                if(!xmlHttp_ver){
                        for(var i=0;i<xmlHttp_vers.length;i++){
                                try{
                                        new ActiveXObject(xmlHttp_vers[i]);
                                        xmlHttp_ver = xmlHttp_vers[i];
                                        break;
                                }catch(oError){;}
                        }
                }
                if(xmlHttp_ver){
                        return new ActiveXObject(xmlHttp_ver);
                }else{
                        throw new Error("Could not create XML HTTP Request.");
                }
        }else{
                throw new Error("Your browser doesn't support an XML HTTP Request.");
        }
}

var xmlHttp;

function sendPostRequest()
{   
                     xmlHttp = createRequest();
        var shownum=document.getElementById("shownum").value;// html页面中一个id为shownum的input表单
        var url = "show.php";//要发送到的URL
        var queryString = "shownum" + "=" + shownum;
        //向服务端发送请求
        xmlHttp.open("post", url, true);//这里的第三个参数为true为异步方式处理
        xmlHttp.onreadystatechange = showData;//异步方式处理,当状态改变时会调用onreadystatechange属性指定的回调函数showData
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");//这一句是用post方法发送的时候必须写的
        xmlHttp.send(queryString);//发送你构建成的数据,如果为“get”方法时,这里可以写成xmlHttp.send(NULL);
}
function showData()
{
        var msg=document.getElementById("status");
                     //第4步
        if(xmlHttp.readyState==4)
        {
                if(xmlHttp.status==200)
                {
                //只有当readyState为4并且status为200时,才表示符合要求
                                                               //下面这一句话,就相当于上面说的第5步,处理返回的结果
                        msg.innerHTML =  xmlHttp.responseText;
                }
        }
        else
        {
                switch(xmlHttp.readyState)
                {
                case 0:
                        msg.innerHTML="未初始化...";
                        break;
                case 1:
                        msg.innerHTML="加载中...";
                        break;
                case 2:
                        msg.innerHTML="连接完成...";
                        break;
                case 3:
                        msg.innerHTML="交换数据...";
                        break;
                default:
                        break;
                }
        }
}

</script>
</head>
<body>
<div>要发送的数据:<input name="shownum" id="shownum" type="text"><input type="button" name="search" value="发送" onClick="sendPostRequest()"></div>
<div id="status"></div>
</body>
</html>

同一目录下要有一个show.php
内容为

<?php
$shownum = $_POST["shownum"];
echo $shownum;
?>
作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论

简单的php取GB2312编码字符串首字母的方法

<?php
$dict=array(
'a'=>0xB0C4,
'b'=>0xB2C0,
'c'=>0xB4ED,
'd'=>0xB6E9,
'e'=>0xB7A1,
'f'=>0xB8C0,
'g'=>0xB9FD,
'h'=>0xBBF6,
'j'=>0xBFA5,
'k'=>0xC0AB,
'l'=>0xC2E7,
'm'=>0xC4C2,
'n'=>0xC5B5,
'o'=>0xC5BD,
'p'=>0xC6D9,
'q'=>0xC8BA,
'r'=>0xC8F5,
's'=>0xCBF9,
't'=>0xCDD9,
'w'=>0xCEF3,
'x'=>0xD188,
'y'=>0xD4D0,
'z'=>0xD7F9,
);
//取GB2312字符串首字母,原理是GBK汉字是按拼音顺序编码的.
function get_letter($input)
{
        global $dict;
        $str_1 = substr($input, 0, 1);
        if ($str_1 >= chr(0x81) && $str_1 <= chr(0xfe))        {
                $num = hexdec(bin2hex(substr($input, 0, 2)));
                foreach ($dict as $k=>$v){
                        if($v>=$num)
                        break;
                }
                return $k;
        }
        else{
                return $str_1;
        }
}

echo get_letter('中');
echo get_letter('华');
echo get_letter('人');
echo get_letter('民');
echo get_letter('共');
echo get_letter('和');
echo get_letter('国');
echo get_letter('万岁');
echo get_letter('c');
echo get_letter('h');
echo get_letter('i');
echo get_letter('n');
echo get_letter('a');
/**/
?>
作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论

php缓存类

 Class Cls_cache
{
var $dir='cache';//缓存目录
var $auto = true;//是否自动删除过时缓寸,如果缓存文件 大、多 不建议这样做
var $file_list;//文件名
var $dir_name;//目录绝对路径;
var $code = "<?php exit;?>";//加入的代码
var $cache_time = "3600";//缓存时间,默认1小时
        function __construct()
        {
                //class start;
                //建立目录
                $dir = $this->dir;
                $dir = explode("/",$dir);
                foreach($dir as $a)
                {
					///	$temp = ($i == '0') ? $a : ("/".$a);
					    $temp =	 $a;
                        if(!is_dir($temp))
                        {
                                mkdir($temp);
                        };
                   //     $i++;
                }
                //自动清除过期缓存文件
                if($this->auto==true){$this->auto();}
                //读取目录文件
                $this->read_file();
        }
        function read_file()
        {//得到格式 fil1|fil2|fil3|fil4....
                $dir_name = realpath($this->dir);
                $this->dir_name = $dir_name;
                $dir = opendir($dir_name);//打开目录
                while ($file_name = readdir($dir))
                {
                        if(($file_name!=".")&&($file_name!=".."))
                        {
                                $file_list =$file_name."|";
                        }
                }
                $file_list = substr($file_list,0,(strlen($file_list)-1));
                closedir($dir);
                $this->file_list = $file_list;
                return $file_list;
        }
        function read($strname)
        {//read('index.php?page=1');
                $strname = md5(trim($strname));
                $list = $this->file_list;
                $re = "/(".$strname.")_([0-9]*)_([0-9]*)[a-zA-Z0-9\.]*/i";
                if(preg_match($re,$list,$match))
                {//找到文件
                        $file = $this->dir_name."\\".$match[0];
                        if($match[2]>$match[3]){unlink($file);return false;}
                        $content = file_get_contents($file);
                        $content = substr($content,strlen($this->code),(strlen($content)-strlen($this->code)));
                        return $content;
                }
        }
        function write($strname,$content,$cache_time='')
        {
                $strname = md5(trim($strname));
                $list = $this->file_list;
                $time = explode(" ",microtime());
                $time = $time[1];
                if(!$cache_time){$cache_time = $this->cache_time;}
                $cache_time += $time;
                $re = "/(".$strname.")_([0-9]*)_([0-9]*)[a-zA-Z0-9\.]*/i";
                if(preg_match($re,$list,$match))
                {//找到文件
                        $re_file = $this->dir_name."\\".$strname."_".$time."_".$cache_time.".php";
                        $file = $this->dir_name."\\".$match[0];
                        rename($file,$re_file);
                        $content = $this->code.$content;
                        $content = file_put_contents($re_file,$content);
                        $this->read_file();
                        return true;
                }
                else
                {
                        $file = $this->dir_name."\\".$strname."_".$time."_".$cache_time.".php";
                        $content = $this->code.$content;
                        file_put_contents($file,$content);
                        $this->read_file();
                }
        }
        function delete($strname)
        {
                $strname = md5(trim($strname));
                $list = $this->file_list;
                $re = "/(".$strname.")_([0-9]*)_([0-9]*)[a-zA-Z0-9\.]*/i";
                if(preg_match($re,$list,$match))
                {//找到文件
                        $file = $this->dir_name."\\".$match[0];
                        unlink($file);
                        $this->read_file();
                        return true;
                }else{return false;}
        }
        function auto()
        {//功能自动清除过期缓存文件
                $list = $this->read_file();
                $re = "/([a-zA-Z0-9]*)_([0-9]*)_([0-9]*)[a-zA-Z0-9\.]*/i";
                if(preg_match_all($re,$list,$match))
                {
                        for($i=0;$i<=(count($match[0])-1);$i++)
                        {
                                $file = $this->dir_name."\\".$match[0][$i];
                                if($match[2][$i]>$match[3][$i]){@unlink($file);$this->read_file();}
                        }
                }
        }
}
//测试代码
$cache = New Cls_cache;
$list =  $cache->file_list;
$cache->write('content','我是最好的哈哈');
echo $cache->read('content');
作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论

终极版B:cURL

<?php

$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);
?>

这东西效率比纯粹的方法高不少.
由于它不是核心自带的东西,所以不做过多讨论

作者:AngryFox 分类: Uncategorized July 23rd, 2011 暂无评论
1、同时更新a表与b表

UPDATE a ,b
SET b.v=2,a.v='p'
WHERE a.id=1 and b.id=a.id

2、同时删除两个表的记录
DELETE a,b
FROM a,b
WHERE a.id=b.id and a.id=1