分类: PHP

php date(“Y-m-d”, strtotime(“-1 month”) 获取上月的bug

2016 年 5 月 31 日 at 下午 3:50分类:PHP

php中用date(“Y-m-d”, strtotime(“-1 month”) 此方法得到上个月的时间是不准确的 。例如当前日期为  2016年5月31日 获取上个月的时间输出就是2016年5月1日 因此 使用的时候不能这么写 。

php bug描述  链接地址 https://bugs.php.net/bug.php?id=27793

此处列出了3种 大同小异

echo date(‘Y-m-d’,strtotime(‘midnight first day of -1 month’));

echo date(‘Y-m-d’,strtotime(date(‘Y-m-01′)-86400);

echo date(‘Y-n’,(time()-(date(‘d’)*3600*24)));

xhprof 插件编译安装及使用

2015 年 6 月 24 日 at 下午 5:46分类:PHP

1. wget http://pecl.php.net/get/xhprof-0.9.4.tgz
2. tar zxvf xhprof-0.9.4.tgz
3. cd xhprof-0.9.4/extension
4. /usr/local/php/bin/phpize
5. ./configure –with-php-config=/usr/local/php/bin/php-config
6. 在php.ini 中增加
[xhprof]
extension=xhprof.so;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
;xhprof.output_dir=
xhprof.output_dir=/tmp/xhprof

7. 重启服务 查看phpinfo
8. cp -r xhprof_lib xhprof_html 两个文件夹到网站根目录 建立 777权限 /tmp/xhprof
9. yum install graphviz-gd
10.访问此路径能看到相关的信息。

按照实例配置点击查看图片后,发现提示错误
编辑php.ini 修改disable_functions exec system poct_open (xhprof里面)

在命令行下运行PHP脚本带参数的方法

2015 年 1 月 22 日 at 下午 3:26分类:PHP

var_dump($argv);
exit;

保存上面代码为test.php 文件中,
在linux 命令行运行:/usr/local/php/bin/php /data/manager/www/test.php 22 3 “aaa”
输出:
Array
( [0] => test.php
[1] => 22
[2] => 3
[3] => aaa
)
正如你可以从输出的结果看到的,传递给test.php的值会自动地作为数组元素出现在$argv里。$argv的第一个值是脚本名称。

用户一般等级计算方法

2014 年 9 月 28 日 at 下午 3:27分类:PHP

1代表星星,2代表月亮,4代表太阳,
如果等级为7的时候 输出 一个太阳 一个月亮一个星星,
如果等级为3的时候输出输出一个月亮 一个星星
如果为12的时候 输出3个太阳 ,
按此规则求显示方法

 
php实现方法:

1
2
3
4
5
6
7
8
$rank = array(4, 2, 1);
$scroe = 12;
foreach($rank as $k=>$v){
	$res[$v] = floor($scroe / $v);
	$scroe = $scroe % $v;
}
var_dump($res);
exit;

javascript 实现方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function star(num){
	var newnum=num;
	if(newnum/4>=1){
		for(var i=0;i<(newnum/4);i++){
			console.log('太阳');
			newnum-=4;
		};	
		star(newnum);	
	}else if(newnum/2>=1){
		for(var i=0;i<(newnum/2);i++){
			console.log('月亮');
			newnum-=2;
		};	
		star(newnum);		
	}else if(newnum>=1){
		for(var i=0;i<newnum;i++){
			console.log('星星');
			newnum-=1;
		};
		star(newnum);			
	};
};
star(7);

php 截取中文字符串函数

2014 年 6 月 23 日 at 下午 3:07分类:PHP

这个只支持utf8字符串截取

1
2
3
4
5
6
7
8
9
10
11
12
<?php
/**
 * php截取中文字符串utf8
 * @author zhang
 * @param string $str 需要截取的字符串原文
 * @param int $start  开始位置
 * @param int $len    截取长度
 */
function utf8_substr($str,$from,$len) {
	return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s','$1',$str);
}
?>

php运算

2013 年 8 月 31 日 at 下午 10:56分类:PHP

第一段程序:

1
2
3
4
$a=1;
$b=&$a;
$c =(++$a)+($a++);
echo $c; // $c=5;

第二段程序:

1
2
3
$a=1;
$c=(++$a)+($a++);
echo $c; //$c=4;

两端程序的输出结果有所不同 第一为5;第二个为4;
解析第一段程序的执行顺序
++$a;$a等于2; 同时被$b引用;此时b等于2;
$a++时;$a等于2;被$b引用过后变成了3;此时$b等于3;
(详见php手册递增运算符的解释)

第二段程序也就是没有被引用过所以$a++的表达式 还是为2;故第二段程序输出为4;
以上内容如有不对 请留言说明 谢谢。

php获取中文字符串首字母函数

2013 年 7 月 16 日 at 下午 6:31分类: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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function chineseFirst($str)
{
 
	$str= iconv("UTF-8","gb2312", $str);	//如果程序是gbk的,此行就要注释掉
 
	//判断字符串是否全都是中文
	if (preg_match("/^[\x7f-\xff]/", $str))
	{
		$fchar=ord($str{0});   
        if($fchar>=ord("A") and $fchar<=ord("z") )return strtoupper($str{0});
        $a = $str; 
        $val=ord($a{0})*256+ord($a{1})-65536;
        if($val>=-20319 and $val<=-20284)return "A";   
        if($val>=-20283 and $val<=-19776)return "B";   
        if($val>=-19775 and $val<=-19219)return "C";   
        if($val>=-19218 and $val<=-18711)return "D";   
        if($val>=-18710 and $val<=-18527)return "E";   
        if($val>=-18526 and $val<=-18240)return "F";   
        if($val>=-18239 and $val<=-17923)return "G";   
        if($val>=-17922 and $val<=-17418)return "H";
        if($val>=-17417 and $val<=-16475)return "J";                 
        if($val>=-16474 and $val<=-16213)return "K";                 
        if($val>=-16212 and $val<=-15641)return "L";                 
        if($val>=-15640 and $val<=-15166)return "M";                 
        if($val>=-15165 and $val<=-14923)return "N";                 
        if($val>=-14922 and $val<=-14915)return "O";                 
        if($val>=-14914 and $val<=-14631)return "P";                 
        if($val>=-14630 and $val<=-14150)return "Q";                 
        if($val>=-14149 and $val<=-14091)return "R";                 
        if($val>=-14090 and $val<=-13319)return "S";                 
        if($val>=-13318 and $val<=-12839)return "T";                 
        if($val>=-12838 and $val<=-12557)return "W";                 
        if($val>=-12556 and $val<=-11848)return "X";                 
        if($val>=-11847 and $val<=-11056)return "Y";                 
        if($val>=-11055 and $val<=-10247)return "Z";
	} else
	{
		return false;
	}
 
}

php 连接 sqlserver2005教程(sqlsrv扩展)

2013 年 4 月 22 日 at 下午 4:10分类:PHP

本人环境Apache:2.2.21 php:5.3.10 操作系统windows xp service pack 3

使用的是Microsoft Drivers for PHP for SQL Server的扩展包做连接。

1.下载Microsoft Drivers for PHP for SQL Server 扩展包  它分为2.0和3.0版

本。(本人使用的是2.0版本)

这个扩展包对电脑的操作系统有要求,对应的系统使用对应的版本。

3.0  所支持的操作系统
Windows Server 2008 R2 SP1
Windows Vista SP2
Windows Server 2008 SP2
Windows 7 SP1

2.0 所支持的操作系统
Windows Server 2003 Service Pack 1
Windows XP Service Pack 3
Windows Vista Service Pack 1 or later
Windows Server 2008
Windows Server 2008 R2
Windows 7

所以本次实例使用的是 2.0  里面php_sqlsrv_53_ts_vc9.dll 扩展 ;

2.将php_sqlsrv_53_ts_vc9.dll文件复制到php的扩展文件夹 (一般的都在

php/ext文件夹下面);
3.将此php_sqlsrv_53_ts_vc9.dll文件拷贝到系统所在盘的system32中;
4.打开php.ini文件,在extension=php_mysql.dll 下面一行添加

extension=php_sqlsrv_53_ts_vc9.dll  之后重启apache。
5.测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$serverName = "127.0.0.1";
$uid = "sa";
$pwd = "000";
$db  = "php555";
 
$connectionInfo = array(
"UID"=$uid,"PWD"=$pwd,"Database"=$db
);
 
$conn = sqlsrv_connect( $serverName, $connectionInfo);
 
if( $conn === false )
{
echo "Unable to connect.";
die(var_dump( sqlsrv_errors(), true));
}else{
echo "sqlserver连接成功!!!";
}

6.运行上边代码会提示您以下内容
Unable to connect.
array(2) { [0]=> array(6) { [0]=> string(5) “IMSSP” ["SQLSTATE"]=>

string(5) “IMSSP” [1]=> int(-49) ["code"]=> int(-49) [2]=> string(390)

“This extension requires either the Microsoft SQL Server 2008 Native

Client (SP1 or later) or the Microsoft SQL Server 2008 R2 Native Client

ODBC Driver to communicate with SQL Server. Neither of those ODBC

Drivers are currently installed. Access the following URL to download

the Microsoft SQL Server 2008 R2 Native Client ODBC driver for x86:

http://go.microsoft.com/fwlink/?LinkId=163712″ ["message"]=> string

(390) “This extension requires either the Microsoft SQL Server 2008

Native Client (SP1 or later) or the Microsoft SQL Server 2008 R2 Native

Client ODBC Driver to communicate with SQL Server. Neither of those

ODBC Drivers are currently installed. Access the following URL to

download the Microsoft SQL Server 2008 R2 Native Client ODBC driver for

x86: http://go.microsoft.com/fwlink/?LinkId=163712″ } [1]=> array(6) {

[0]=> string(5) “IM002″ ["SQLSTATE"]=> string(5) “IM002″ [1]=> int(0)

["code"]=> int(0) [2]=> string(71) “[Microsoft][ODBC 驱动程序管理器] 未

发现数据源名称并且未指定默认驱动程序” ["message"]=> string(71)

“[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程

序” } } bool(true)

7.点击http://go.microsoft.com/fwlink/?LinkId=163712 这个链接 进入下载驱

动程序包就可以了,X86 Package(sqlncli.msi) 。安装的时候有可能某些软件会影响到安装,导致安装失败,

建议您关掉没用的程序。

8.之后再运行第5步代码; 提示:”sqlserver连接成功!!!” 。
9.具体的sqlsrv的函数就不做介绍了 在扩展包里面有手册,手册里面有详细介绍。

(转载请注明出处,谢谢)