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

    xiaoxiao2021-08-21  112

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

        }

        由于文章篇幅原因,今后再慢慢分享给大家!如您有很多不错的小技巧,可在公众号内留言,收到后将立即回复您的信息!感谢您的关注!

    转载请注明原文地址: https://ju.6miu.com/read-676798.html

    最新回复(0)