存档

‘PHP’ 分类的存档

mysql 查询当天、本周、上周、本月、上个月份的数据

2011年8月5日 admin 没有评论

查询当天的记录

select * from hb_article_view where TO_DAYS(hb_AddTime) = TO_DAYS(NOW())

查询当前这周的数据
SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,’%Y-%m-%d’)) = YEARWEEK(now());

查询上周的数据
SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,’%Y-%m-%d’)) = YEARWEEK(now())-1;

查询当前月份的数据
select name,submittime from enterprise where date_format(submittime,’%Y-%m’)=date_format(now(),’%Y-%m’)

查询距离当前现在6个月的数据
select name,submittime from enterprise where submittime between date_sub(now(),interval 6 month) and now();

查询上个月的数据
select name,submittime from enterprise where date_format(submittime,’%Y-%m’)=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),’%Y-%m’)

select * from `user` where DATE_FORMAT(pudate,’%Y%m’) = DATE_FORMAT(CURDATE(),’%Y%m’) ;

select * from user where WEEKOFYEAR(FROM_UNIXTIME(pudate,’%y-%m-%d’)) = WEEKOFYEAR(now())

select *
from user
where MONTH(FROM_UNIXTIME(pudate,’%y-%m-%d’)) = MONTH(now())

select *
from [user]
where YEAR(FROM_UNIXTIME(pudate,’%y-%m-%d’)) = YEAR(now())
and MONTH(FROM_UNIXTIME(pudate,’%y-%m-%d’)) = MONTH(now())

select *
from [user]
where pudate between 上月最后一天
and 下月第一天

分类: PHP 标签:

PHP 中文字符串截取方法汇总

2011年3月7日 admin 1 条评论

PHP 截取字符串代码

通过指定编码进行字符串截取:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * @todo 中文截取,支持gb2312,gbk,utf-8,big5
 *
 * @param string $str 要截取的字串
 * @param int $start 截取起始位置
 * @param int $length 截取长度
 * @param string $charset utf-8|gb2312|gbk|big5 编码
 * @param $suffix 是否加尾缀
 */
function CsubStrPro($str, $start = 0, $length, $charset = "utf-8", $suffix = true)
{
    if (function_exists ( "mb_substr" ))
        return mb_substr ( $str, $start, $length, $charset );
 
    $re ['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
    $re ['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
    $re ['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
    $re ['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
    preg_match_all ( $re [$charset], $str, $match );
    $slice = join ( "", array_slice ( $match [0], $start, $length ) );
    if ($suffix)
        return $slice . "…";
 
    return $slice;
}

2:自动识别 GBK 和UTF-8 编码的字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function cutStr($sourcestr, $cutstart=0, $cutlength) {
    $returnstr = '';
    $i = 0;
    $n = 0;
    $str_length = strlen ( $sourcestr ); //字符串的字节数
    while ( ($n < $cutlength) and ($i <= $str_length) ) {
        $temp_str = substr ( $sourcestr, $i, 1 );
        $ascnum = Ord ( $temp_str ); //得到字符串中第$i位字符的ascii码
        if ($ascnum >= 224) //如果ASCII位高与224,
        {
            $returnstr = $returnstr . substr ( $sourcestr, $i, 3 ); //根据UTF-8编码规范,将3个连续的字符计为单个字符
            $i = $i + 3; //实际Byte计为3
            $n ++; //字串长度计1
        }
        elseif ($ascnum >= 192) //如果ASCII位高与192,
        {
            $returnstr = $returnstr . substr ( $sourcestr, $i, 2 ); //根据UTF-8编码规范,将2个连续的字符计为单个字符
            $i = $i + 2; //实际Byte计为2
            $n ++; //字串长度计1
        }
        elseif ($ascnum >= 65 && $ascnum <= 90) //如果是大写字母,
        {
            $returnstr = $returnstr . substr ( $sourcestr, $i, 1 );
            $i = $i + 1; //实际的Byte数仍计1个
            $n ++; //但考虑整体美观,大写字母计成一个高位字符
        }
        else //其他情况下,包括小写字母和半角标点符号,
        {
            $returnstr = $returnstr . substr ( $sourcestr, $i, 1 );
            $i = $i + 1; //实际的Byte数计1个
            $n = $n + 0.5; //小写字母和半角标点等与半个高位字符宽...
        }
    }
    if ($str_length > $i) {
        $returnstr = $returnstr . "..."; //超过长度时在尾处加上省略号
    }
    return $returnstr;
}
分类: PHP 标签: ,

PHP将汉字转化成拼音的函数(用于取首字母索引或按字母排序中文)

2011年2月23日 admin 没有评论

PHP将汉字转化成拼音的函数(用于取首字母索引或按字母排序中文)
阅读全文…

分类: PHP 标签: , , ,

ThinkPHP海量数据分表机制详细代码及说明

2011年2月23日 admin 没有评论

应用ThinkPHP内置的分表算法处理百万级用户数据.

数据表:
house_member_0
house_member_1
house_member_2
house_member_3

模型:

1
2
3
4
5
6
7
8
9
10
class MemberModel extends AdvModel {
 
    protected $partition = array('field'=>'username','type'=>'id','num'=>'4');
 
    public function getDao($data=array()) {
        $data = empty($data) ? $_POST : $data;
        $table = $this->getPartitionTableName($data);
        return $this->table($table);
    }
}

阅读全文…

分类: PHP 标签: , ,

PHP获取当前页面url

2011年2月23日 admin 没有评论
1
2
3
4
5
6
7
8
9
function get_url() { 
	if (!isset($_SERVER['REQUEST_URI'])) {  
		$url = $_SERVER['REQUEST_URI'];      
		}else{ 
			$url = $_SERVER['SCRIPT_NAME'];     
			$url .= (!empty($_SERVER['QUERY_STRING'])) ? '?' . $_SERVER['QUERY_STRING'] : '';           
			}    
			return $url;
	}

此函数返回正在执行的文件名信息。
当前 url:”http://”.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']

获取URL相关的服务器环境变量:
1,$_SERVER["QUERY_STRING"]
说明:查询(query)的字符串

2,$_SERVER["REQUEST_URI"]
说明:访问此页面所需的URI

3,$_SERVER["SCRIPT_NAME"]
说明:包含当前脚本的路径

4,$_SERVER["PHP_SELF"]
说明:当前正在执行脚本的文件名

实例:
1,http://www.wenan8.com/ (直接打开主页)
结果:
$_SERVER["QUERY_STRING"] = “”
$_SERVER["REQUEST_URI"] = “/”
$_SERVER["SCRIPT_NAME"] = “/index.php”
$_SERVER["PHP_SELF"] = “/index.php”

2,http://www.wenan8.com/?s=55 (附带查询)
结果:
$_SERVER["QUERY_STRING"] = “s=55″
$_SERVER["REQUEST_URI"] = “/?s=55″
$_SERVER["SCRIPT_NAME"] = “/index.php”
$_SERVER["PHP_SELF"] = “/index.php”

3,http://www.wenan8.com/index.php?s=55&l=wenan
结果:
$_SERVER["QUERY_STRING"] = “s=55&l=wenan”
$_SERVER["REQUEST_URI"] = “/index.php?s=55&l=wenan”
$_SERVER["SCRIPT_NAME"] = “/index.php”
$_SERVER["PHP_SELF"] = “/index.php”

$_SERVER["QUERY_STRING"]获取查询语句,实例中可知,获取的是?后面的值
$_SERVER["REQUEST_URI"] 获取http://www.wenan8.com后面的值,包括/
$_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php
$_SERVER["PHP_SELF"] 当前正在执行脚本的文件名

分类: PHP 标签: ,

PHP中使用JSON

2011年1月19日 admin 没有评论

目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。

从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。

一、json_encode()

该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:

      $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
 
      echo json_encode($arr);

结果为

      {"a":1,"b":2,"c":3,"d":4,"e":5}

再看一个对象转换的例子:

      $obj->body = 'another post';
 
      $obj->id = 21;
 
      $obj->approved = true;
 
      $obj->favorite_count = 1;
 
      $obj->status = NULL;
 
      echo json_encode($obj);

结果为

      {
        "body":"another post",
 
        "id":21,
 
        "approved":true,
 
        "favorite_count":1,
 
        "status":null
      }

阅读全文…

分类: PHP 标签: , , ,

DIRECTORY_SEPARATOR 与PATH_SEPARATOR

2011年1月18日 admin 没有评论

1.DIRECTORY_SEPARATOR

DIRECTORY_SEPARATOR:路径分隔符,linux上就是’/’ . windows上是’\’;

2.PATH_SEPARATOR

PATH_SEPARATOR是一个常量,include多个路径使用,在win下,要include多个路径的话,用”;”(分号)隔开,但在 linux下使用”:”(冒号)隔开的。在Linux系统中是一个” : “号,Windows上是一个”;”号。编写程序时最好用常量 PATH_SEPARATOR 代替,否则如果系统从linux移植到win系统或反过来移植会出错

分类: PHP 标签: , ,

PHP利用门户网站API转换IP地址到真实地址

2011年1月14日 admin 没有评论

腾讯,网易,新浪,搜狐都提供了IP地址转换为实际地址的接口.
腾讯:http://fw.qq.com/ipaddress 返回格式为 javascript格式对象. 形如: var IPData = new Array(“124.204.70.160″,”",”北京市”,”");
可以在页面中引入js文件 直接调用。


1
2
<script language="javascript" type="text/javascript" src="http://fw.qq.com/ipaddress"  charset="gb2312"> </script>
<script>document.write("你的IP是:"+IPData[0]+",来自:"+IPData[2]);</script>

搜狐: http://pv.sohu.com/cityjson 也是浏览器 js 调用的。返回 var returnCitySN = {“cip”: “124.204.70.160″, “cid”: “110000″, “cname”: “北京市”}; 的格式。

新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
返回
var remote_ip_info = {“ret”:1,”start”:”124.205.0.0″,”end”:”124.205.136.255″,”country”:”\u4e2d\u56fd”,”province”:”\u5317\u4eac”,”city”:”\u5317\u4eac”,”district”:”",”isp”:”\u7535\u4fe1\u901a”,”type”:”",”desc”:”"};

新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=124.204.70.160

网易有道IP地址查询:http://www.youdao.com/smartresult-xml/search.s?type=ip&q=124.204.70.160

注: JavaScript调用还是PHP调用都要转换一下编码,不然得到的是乱码。
阅读全文…

分类: PHP 标签: , ,

PHP+AJAX 实现星级评分(百度文库评分)

2011年1月11日 admin 1 条评论

好多网站都有评分模块,百度文库,淘宝评价等,现以百度文库为例,简单实现一个基于jQuery的AJAX评分程序。

HTML代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div id="header">
 
</div>
 
<div id="main">
  <p><span id="s" class="s"></span><span id="g" class="g"></span></p>
  <div class="rate">
 
     <div class="big_rate">
        <span rate="很差" rscore="2" title="www.shaiblog.com 博客导航">&nbsp;</span>
        <span rate="较差" rscore="4" title="www.shaiblog.com 博客导航">&nbsp;</span>
        <span rate="还行" rscore="6" title="www.shaiblog.com 博客导航">&nbsp;</span>
        <span rate="推荐" rscore="8" title="www.shaiblog.com 博客导航">&nbsp;</span>
        <span rate="力荐" rscore="10" title="www.shaiblog.com 博客导航">&nbsp;</span>
        <div style="width:45px;" class="big_rate_up"></div>
     </div>
     <p><span id="q" class="q"></span></p>
     <div id="my_rate"></div>
  </div>
</div>

阅读全文…

分类: PHP 标签: , , , ,

PHP实现时间转换函数

2011年1月7日 admin 1 条评论

之前写过一篇 《将文字表述的时间 转化为相应的时间》 是将文字描述的时间转换为 相应时间, 现在是将时间转换为文字描述。

我在微博或其他一些论坛等发帖子后,会看到发表时间显示为“刚刚”、“1分钟前”、“昨天8:00”等,而不是显示具体日期和时间。

将介绍如何实现基于时间轴的时间的转换。
time():返回当前的 Unix 时间戳

date():格式化一个本地时间/日期。

应用举例:

date(“Y-m-d H:i:s”,time());

格式化当前时间,输出:2011-01-07 15:27:35

strtotime():将任何英文文本的日期时间描述解析为 Unix 时间戳。

应用举例:

echo strtotime(“+1 day”), “\n”;

输出1天前的时间戳:1294474872

date_default_timezone_set():设定要用的默认时区。

一般我们设置北京时间:date_default_timezone_set(“PRC”);

理解上面几个函数后我们来写时间轴函数:

该函数的原理就是将系统当前时间与目标时间比较,得到一个差值,再将差值与时间范围(转换成秒)比较,根据其处在时间轴的范围输出不同的结果(如:5分钟前)。为了便于计算,我们将时间都转换成Unix时间戳。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function tranTime($time) { 
    $rtime = date("m-d H:i",$time); 
    $htime = date("H:i",$time); 
 
    $time = time() - $time; 
 
    if ($time < 60) { 
        $str = '刚刚'; 
    } 
    elseif ($time < 60 * 60) { 
        $min = floor($time/60); 
        $str = $min.'分钟前'; 
    } 
    elseif ($time < 60 * 60 * 24) { 
        $h = floor($time/(60*60)); 
        $str = $h.'小时前 '.$htime; 
    } 
    elseif ($time < 60 * 60 * 24 * 3) { 
        $d = floor($time/(60*60*24)); 
        if($d==1) 
           $str = '昨天 '.$rtime; 
        else 
           $str = '前天 '.$rtime; 
    } 
    else { 
        $str = $rtime; 
    } 
    return $str; 
}
分类: PHP 标签: ,