牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP常用的一些屌炸天的技巧(二)

创建时间:2016-11-18 投稿人: 浏览次数:146

导读:大部分有两三年工作经验的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,"/");

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。