欢迎您光临买源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点,服务永无止境!

分享一些常用的PHP业务逻辑代码

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

1、加密解密函数:

function encryptDecrypt($key, $string, $decrypt){
    if($decrypt){
        $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");
        return $decrypted;
    }else{
        $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
        return $encrypted;
    }
}

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

2、上传图片方向纠正:

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

$image = imagecreatefromstring(file_get_contents($_FILES['image_upload']['tmp_name']));
$exif = exif_read_data($_FILES['image_upload']['tmp_name']);
if(!emptyempty($exif['Orientation'])) {
    switch($exif['Orientation']) {
        case 8:
            $image = imagerotate($image,90,0);
            break;
        case 3:
            $image = imagerotate($image,180,0);
            break;
        case 6:
            $image = imagerotate($image,-90,0);
            break;
    }
}

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

/**
 * 拆分姓名(姓氏和名字)
 * @param string $fullname 全名(如:百里屠苏)
 * @return array 一维数组[0=>'姓氏',1=>'名称']
 * @return array
 */
function splitName($fullname){
    $hyphenated = array(
        '百里','北堂','北野','北宫','辟闾',
        '淳于','成公','陈生','褚师','城池',
        '端木','东方','东郭','东野','东门','第五','大狐','段干','段阳','第二','东宫',
        '公孙','公冶','公羊','公良','公西','公孟','公伯','公析','公肩','公坚','公乘','公皙','公户','公广','公仪','公祖','公玉','公仲','公上','公门','公山','高堂','高阳','郭公','谷梁','毌将','毌丘','单于','叱干','叱利','车非',
        '独孤','大野','独吉','达奚','东里',
        '哥舒','贯丘',
        '皇甫','黄龙','胡母','何阳','赫连','呼延','贺兰','贺若','黑齿','斛律','斛粟',
        '夹谷','九方','即墨','吉胡',
        '可频',
        '梁丘','闾丘','洛阳','陵尹','冷富','龙丘','令狐',
        '慕容','万俟','抹捻',
        '纳兰','南荣',
        '南宫','南郭','女娲','南伯','南容','南门','南野',
        '欧阳','欧侯',
        '濮阳','普周','仆固','仆散','蒲察',
        '青阳','漆雕','亓官','渠丘','屈突','屈卢','钳耳',
        '壤驷','汝嫣',
        '上官','少室','少叔','司徒','司马','司空','司寇','士孙','申屠','申徒','申鲜','申叔','夙沙','叔先','叔仲','叔孙','侍其','是云','索卢','厍狄',
        '澹台','太史','太叔','太公','屠岸','唐古','拓跋','同蹄','秃发',
        '闻人','巫马','微生','王孙','无庸','完颜',
        '夏侯','西门','信平','鲜于','轩辕','相里','新垣','徐离姓',
        '羊舌','羊角','延陵','於陵','伊祁','吾丘','乐正','宇文','尉迟','耶律',
        '诸葛','颛孙','仲孙','仲长','钟离','宗政','主父','中叔','左人','左丘','宰父','长儿','仉督','长孙','子车','子书','子桑'
    );
    $vLength = mb_strlen($fullname, 'utf-8');
    $lastname = '';
    $firstname = '';//前为姓,后为名
    if($vLength > 2){
        $preTwoWords = mb_substr($fullname, 0, 2, 'utf-8');//取命名的前两个字,看是否在复姓库中
        if(in_array($preTwoWords, $hyphenated)){
            $lastname = $preTwoWords;
            $firstname = mb_substr($fullname, 2, 10, 'utf-8');
        }else{
            $lastname = mb_substr($fullname, 0, 1, 'utf-8');
            $firstname = mb_substr($fullname, 1, 10, 'utf-8');
        }
    }else if($vLength == 2){//全名只有两个字时,以前一个为姓,后一下为名
        $lastname = mb_substr($fullname ,0, 1, 'utf-8');
        $firstname = mb_substr($fullname, 1, 10, 'utf-8');
    }else{
        $lastname = $fullname;
    }
    return array($lastname, $firstname);
}

4、打印输出数据到文件

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

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

5、随机字符生成

/*
 * 随机字符生成
 */
function randStr($len=6,$format='all') {
    switch($format) {
        case 'all':
            $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-@#~'; break;
        case 'char':
            $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-@#~'; break;
        case 'number':
            $chars='0123456789'; break;
        case 'charnum':
            $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
            break;
        case 'verify':
            $chars='ABCDEFGHIJKMNPQRSTUVWXYZ23456789';
            break;
    }
    mt_srand();
    $password="";
    while(strlen($password)<$len)
        $password.=substr($chars,(mt_rand()%strlen($chars)),1);
    return $password;
}

6、PHP生成唯一订单号

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

7、获取毫秒级时间戳。

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

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

8、获取文章中的图片

/*
 * 获取文章图片
 */
function getContentPic($content,$num='1'){
    $pattern="/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/";
    preg_match_all($pattern,htmlspecialchars_decode($content),$match);
    if(!emptyempty($match[1]) && $num == 1){
        return $match[1][0];
    }else{
        return $match[1];
    }
    return '';
}

 

免责声明:
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

买源码 » 分享一些常用的PHP业务逻辑代码

发表评论