PHP常用的一些屌炸天的技巧(二)
导读:大部分有两三年工作经验的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,"/");
- 上一篇: 深入理解HashMap
- 下一篇: 让PHP开发者事半功倍的十个技巧