导读:大部分有两三年工作经验的PHPer,都必定积累了不少在日常开发中使用的小技巧。从前端,接口开发,团队编程规范,模块化和前辈们分享的个人经验中总结出一些小技巧。这些技能都能大大地提高我们日常开发的效率,提升我们的代码质量,更能让你省下了很多看看书,看看博客,找妹子聊聊天的时间。以下是我个人从工作经验中总结的一些编程小技巧,其中可能也会包括一些前辈们分享的经验,如有更好的实现方法,可以留言分享一下您的宝贵经验,在下一次分享或者后续遍中进而补充。
继上一篇接着分享屌炸天的小技巧,哈哈,不用客气,都收下吧!
11.已过去时间计算(如发布的这篇文章已过去2分钟,也可理解为在2分钟之前发布的)
function nicetime($date){
if(empty($date)) { return "No date provided"; }
$periods = array("秒", "分钟", "小时", "天", "周", "月", "年", "decade");
$lengths = array("60","60","24","7","4.35","12","10");
$now = time();
$unix_date = $date; // check validity of date
if($now-$unix_date > 86400*7-1){
return 'error';
}
if(empty($unix_date)) { return "Bad date"; } // is it future date or past date
if($now > $unix_date) {
$difference = $now - $unix_date; $tense = "之前";
} else {
$difference = $unix_date - $now; $tense = "from now";
}
for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if($difference != 1) { $periods[$j].=""; }
return "$difference$periods[$j]{$tense}";
}
12.定义通用报错响应码列表
function getErrorList(){
return array(
0=>array("en"=>"Failed", "zh"=>"失败"),
1=>array("en"=>"Success", "zh"=>"成功"),
/*
|--------------------------------------------------------------------------
| 系统级错误
|--------------------------------------------------------------------------
|
| 系统级错误
|
*/
10001=>array("en"=>"System error", "zh"=>"系统错误"),
10002=>array("en"=>"Service unavailable", "zh"=>"服务暂停"),
10003=>array("en"=>"Remote service error", "zh"=>"远程服务错误"),
10004=>array("en"=>"IP limit", "zh"=>"IP限制"),
10005=>array("en"=>"Param error", "zh"=>"参数错误"),
10006=>array("en"=>"Illegal request", "zh"=>"非法请求"),
10007=>array("en"=>"Request api not found", "zh"=>"接口不存在"),
10008=>array("en"=>"HTTP method error", "zh"=>"请求方式错误"),
10009=>array("en"=>"Request body length over limit", "zh"=>"请求长度超过限制"),
10010=>array("en"=>"Invalid user", "zh"=>"不合法的用户"),
10011=>array("en"=>"User requests out of rate limit", "zh"=>"用户请求频次超过上限"),
10012=>array("en"=>"Request timeout", "zh"=>"请求超时"),
/*
|--------------------------------------------------------------------------
| 服务级错误
|--------------------------------------------------------------------------
|
| 服务级错误
| 2[级别]01[模块]01[错误编号]
|
*/
//20000 - 20099 Common error 公共错误
20001=>array("en"=>"Unknown error", "zh"=>"未知错误"),
20002=>array("en"=>"DB error", "zh"=>"数据库错误"),
20003=>array("en"=>"Object already exists", "zh"=>"记录已存在"),
/*
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
| 业务级错误
| 3[级别]01[模块]01[错误编号]
|
*/
);
}
13. 定义响应数据规范(语言:zh[中文简体]、en[英文],要结合getErrorList())
/**
* @param int/string $code 状态码
* @param null $msg 提示信息
* @param array $data 数据
* 使用: return responses('10005');
* return responses('10005','参数错误',$this->errorMsg());
* return responses('10005','参数错误',array(),'www.baidu.com');
* return responses('1','获取数据成功',array(),'',2);
*/
function responses( $code, $msg = NULL, $data = array(), $uri = NULL,$page=false) {
$code = (int)$code;
if( null == $msg ) {
$errList = getErrorList();
if( !array_key_exists( $code, $errList ) ) {
return 'key not exist in config';
}
$msg = $errList[ $code ][ "zh" ];
}
$ret = array(
'status' => $code,
'info' => "{$msg}",
);
if( NULL != $data ) {
$ret[ 'data' ] = $data;
}
if( NULL != $uri ) {
$ret[ 'uri' ] = $uri;
}
if( NULL != $page ) {
$ret[ 'pageInfo' ] = $page;
}
return $ret;
}
14.获取真实IP地址
function getIp(){
$onlineip='';
if(getenv('HTTP_CLIENT_IP')&&strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')){
$onlineip=getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')&&strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')){
$onlineip=getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')&&strcasecmp(getenv('REMOTE_ADDR'),'unknown')){
$onlineip=getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')){
$onlineip=$_SERVER['REMOTE_ADDR'];
}
return $onlineip;
}
15.单点登录
/**
* 点单登录
* @param Cache $cache
* @param $source
* @param $key
* @param $user
* @return string
*/
private function getTicketUrl(Cache $cache,$source,$key,$user)
{
$ticket = md5(time()+$key);
$cache::put($ticket, $user, 120);
$url = $source . '?ticket=' . $ticket;
return $url;
}
16.加密密码
function encryptPassword($password, $salt){
$password = strtolower($password);
$password = sha1($password.$salt);
return $password;
}
17.打野函数@从小到大排序
protected function getsort($arr){
$len=count($arr);
for ($i=0; $i < $len-1; $i++) {
for ($j=$i+1; $j < $len ; $j++) {
if($arr[$i]>$arr[$j]){
$mid=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$mid;
}
}
}
return $arr;
}
18.获取文件目录中的文件名
protected function getdir($path,$save=false){
$arr=array();
if(is_dir($path)){
$path=str_replace('\\', '/', $path);
$path=rtrim($path,'/');
$dir = opendir($path);
$ar=array('.','..');
while(($file=readdir($dir))!==false){
if(!in_array($file,$ar)){
if($save){
$save=rtrim($save,'/');
//$save=ltrim($save,'/');
$arr[]=$save.'/'.$file;
}else{
$arr[]=$file;
}
}
}
closedir($dir);
}
return $arr;
}
19. 时间戳解析今日描红
/**
* @param array $str 时间戳
*/
function todayTime($str) {
//今日
$today = date('y/m/d');
//时间戳y/m/d
$newtoday = date('y/m/d', $str);
//数据类型检测
if ($today == $newtoday) {
return "<font color='red'>" . date('y/m/d H:i:s', $str) . "</font>";
} else {
return date('y/m/d H:i:s', $str);
}
}
20.中英文字符截取成数组
function mb_str_split ($string, $len=1) {
$start = 0;
$strlen = mb_strlen($string);
while ($strlen) {
$array[] = mb_substr($string,$start,$len,"utf8");
$string = mb_substr($string, $len, $strlen,"utf8");
$strlen = mb_strlen($string);
}
return $array;
}
21.过滤危险字符
function filter($str) {
$newstr=mysql_escape_string($str);
$arr=array('ﭐٍّ',' ॗ','ض','ﭐٍ','ॗ','ﭐ ٍّ');
$newstr=str_replace($arr,'',$newstr);
return $newstr;
}
由于文章篇幅原因,今后再慢慢分享给大家!如您有很多不错的小技巧,可在公众号内留言,收到后将立即回复您的信息!感谢您的关注!