常用PHP业务逻辑

项目开发中经常用到的业务逻辑代码,总结在此处,备用。

1、加密解密函数:

  1. function encryptDecrypt($key$string$decrypt){
  2.     if($decrypt){
  3.         $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");
  4.         return $decrypted;
  5.     }else{
  6.         $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
  7.         return $encrypted;
  8.     }
  9. }

在使用的时候我们可以为加密的字符串,设置一个加密KEY值,解密的时候传入这个KEY值即可获得密文原文。$decrypt取值0和1时分别对应加密、解密。

 

2、上传图片方向纠正:

由于每个人拍照姿势都不一样,难免有人拍照上传的图片出现倒立的情况,下面这个业务逻辑可以自动纠正上传图片的方向。

  1. $image = imagecreatefromstring(file_get_contents($_FILES['image_upload']['tmp_name']));
  2. $exif = exif_read_data($_FILES['image_upload']['tmp_name']);
  3. if(!emptyempty($exif['Orientation'])) {
  4.     switch($exif['Orientation']) {
  5.         case 8:
  6.             $image = imagerotate($image,90,0);
  7.             break;
  8.         case 3:
  9.             $image = imagerotate($image,180,0);
  10.             break;
  11.         case 6:
  12.             $image = imagerotate($image,-90,0);
  13.             break;
  14.     }
  15. }

3、拆分姓名中的姓氏和名字

  1. /**
  2.  * 拆分姓名(姓氏和名字)
  3.  * @param string $fullname 全名(如:百里屠苏)
  4.  * @return array 一维数组[0=>'姓氏',1=>'名称']
  5.  * @return array
  6.  */
  7. function splitName($fullname){
  8.     $hyphenated = array(
  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.     $vLength = mb_strlen($fullname, 'utf-8');
  34.     $lastname = '';
  35.     $firstname = '';//前为姓,后为名
  36.     if($vLength > 2){
  37.         $preTwoWords = mb_substr($fullname, 0, 2, 'utf-8');//取命名的前两个字,看是否在复姓库中
  38.         if(in_array($preTwoWords$hyphenated)){
  39.             $lastname = $preTwoWords;
  40.             $firstname = mb_substr($fullname, 2, 10, 'utf-8');
  41.         }else{
  42.             $lastname = mb_substr($fullname, 0, 1, 'utf-8');
  43.             $firstname = mb_substr($fullname, 1, 10, 'utf-8');
  44.         }
  45.     }else if($vLength == 2){//全名只有两个字时,以前一个为姓,后一下为名
  46.         $lastname = mb_substr($fullname ,0, 1, 'utf-8');
  47.         $firstname = mb_substr($fullname, 1, 10, 'utf-8');
  48.     }else{
  49.         $lastname = $fullname;
  50.     }
  51.     return array($lastname$firstname);
  52. }

4、打印输出数据到文件

  1. /**
  2.  * 打印输出数据到文件
  3.  * @param mixed $data
  4.  * @param bool $replace
  5.  * @param string|null $pathname
  6.  */
  7. function p($data$replace = false, $pathname = null)
  8. {
  9.     is_null($pathname) && $pathname = RUNTIME_PATH . date('Ymd') . '.txt';
  10.     $str = (is_string($data) ? $data : (is_array($data) || is_object($data)) ? print_r($data, true) : var_export($data, true)) . "\n";
  11.     $replace ? file_put_contents($pathname$str) : file_put_contents($pathname$str, FILE_APPEND);
  12. }

这个函数虽然很小巧,但是在调试一些内部执行数据的时候非常有用,且很方便的输出我们要查看的数据。

5、随机字符生成

  1. /*
  2.  * 随机字符生成
  3.  */
  4. function randStr($len=6,$format='all') {
  5.     switch($format) {
  6.         case 'all':
  7.             $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-@#~'; break;
  8.         case 'char':
  9.             $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-@#~'; break;
  10.         case 'number':
  11.             $chars='0123456789'; break;
  12.         case 'charnum':
  13.             $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  14.             break;
  15.         case 'verify':
  16.             $chars='ABCDEFGHIJKMNPQRSTUVWXYZ23456789';
  17.             break;
  18.     }
  19.     mt_srand();
  20.     $password="";
  21.     while(strlen($password)<$len)
  22.         $password.=substr($chars,(mt_rand()%strlen($chars)),1);
  23.     return $password;
  24. }

6、生成唯一订单号

  1. /*
  2.  * 生成唯一订单号
  3.  */
  4. function CreateOrderId(){
  5.     $order_id_main = date('YmdHis') . rand(10000000,99999999);
  6.     //订单号码主体长度
  7.     $order_id_len = strlen($order_id_main);
  8.     $order_id_sum = 0;
  9.     for($i=0; $i<$order_id_len$i++){
  10.         $order_id_sum += (int)(substr($order_id_main,$i,1));
  11.     }
  12.     //唯一订单号码(YYYYMMDDHHIISSNNNNNNNNCC)
  13.     $order_id = $order_id_main . str_pad((100 - $order_id_sum % 100) % 100,2,'0',STR_PAD_LEFT);
  14.     return $order_id;
  15. }

7、获取毫秒级时间戳。

关于获取毫秒级时间戳其实只需要一行代码,网上很多人专门写了很多函数去处理。因为毫秒级的时间戳是13位,int类会溢出。操作使用时可以以float类型或string类型均可。

  1. $timestamp = substr(microtime(true)*1000,0,13);

8、获取文章中的图片

  1. /*
  2.  * 获取文章图片
  3.  */
  4. function getContentPic($content,$num='1'){
  5.     $pattern="/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/";
  6.     preg_match_all($pattern,htmlspecialchars_decode($content),$match);
  7.     if(!emptyempty($match[1]) && $num == 1){
  8.         return $match[1][0];
  9.     }else{
  10.         return $match[1];
  11.     }
  12.     return '';
  13. }

 

最后更新日期:2020/04/01  波波

 

 

 

波波
你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!