• php 常用自定义函数


    php 常用自定义函数

    文件类

    获取某个tp根目录下面的某个目录

    //获取uploads 文件夹路径
    function uploads_path(){
        return dirname(__DIR__).DIRECTORY_SEPARATOR.'uploads/';
    }
    

    获取文件路径不带扩展名

    //获取文件路径不带扩展名
    function getPathClearExt($path){
    	return substr($path,0, strripos($path,'.'));
    }
    

    获取文件路径文件名

    function getFileName($path){
    	return substr($path,strripos($path,'/') + 1 );
    }
    

    获取文件路径扩展名

    function getExt($path){
    	return substr($path,strripos($path,'.') + 1 );
    }
    

    删除某个目录下的文件

    /**
     * 删除某个目录下的文件
     *
     * 主要用来删除上传文件的临时文件
     */
    function deleteFile($path){
        //如果是目录则继续
        if(is_dir($path)){
            //扫描一个文件夹内的所有文件夹和文件并返回数组
            $p = scandir($path);
            foreach($p as $val){
                //排除目录中的.和..
                if($val !="." && $val !=".."){
                    //如果是目录则递归子目录,继续操作
                    if(is_dir($path.$val)){
                        //子目录中操作删除文件夹和文件
                        deleteFile($path.$val.'/');
                        //目录清空后删除空文件夹
                        @rmdir($path.$val.'/');
                    }else{
                        //如果是文件直接删除
                        unlink($path.$val);
                    }
                }
            }
        }
    }
    

    读取文件夹下所有文件

    /**
     * 读取文件夹下所有文件
     * @param $folder
     * @return mixed
     */
    function scanfiles($dir){
        $arr = array();
        //列出文件下的目录
        $hander = scandir($dir);
        //遍历文件夹下所有文文件
        foreach ($hander as $v) {
            //判断文件夹下是否还有文件夹需要遍历
            if (is_dir($dir . '/' . $v) && $v != "." && $v != "..") {
                //有二级文件夹
                return false;
                //递归调用
                $arr[$v] = scanfiles($dir . '/' . $v);
            }else{
                //排除  "." " .."
                if($v != "." && $v != ".."){
                    //文件存入
                    $arr[]=$v;
                }
            }
        }
        return $arr;
    }
    

    读取文件内容至字符串中,同时去除换行、行首行尾空格

    /**
    * 读取文件内容至字符串中,同时去除换行、行首行尾空格
    * @param string $filePath
    * @return string|string[]|null
    */
    function readFileAndTrim($filePath = ''){
        if(empty($filePath)){
        	return '文件路径为空';
        }
    	return preg_replace('/((s)*(
    )+(s)*)/i',',',file_get_contents($filePath));
    }
    

    随机数

    任意字符随机

    /**
     * 随机生成id,默认10位,不要O,o,0
     * @param integer $length 生成id的位数
     * @return string 生成的随机id
     */
    function getRandomChar($length = 10){
        // 密码字符集,可任意添加你需要的字符
        //$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        $chars = 'ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz123456789';
        $str = "";
        for ( $i = 0; $i < $length; $i++ ){
            $str .= $chars[ mt_rand(0, strlen($chars) - 1) ];
        }
        return $str ;
    }
    

    随机验证码

    /**
     * @param int $len 生成随机数长度,默认为6
     * @return string
     */
    //随机数
    function getRandomCode($length = 6) {
        //取10的长度减1次方的值,例:length为6 10的5次方 100000
        $min = pow(10 , ($length - 1));
        //取10的长度次方的值,例:length为6 10的6次方减1 999999
        $max = pow(10, $length) - 1;
        //获取并返回该范围的数
        return mt_rand($min, $max);
    }
    

    字符串类

    将id分割为2位一组的数组

    /**
     * 将id分割为2位一组的数组
     * @param [type] $str  要分割的字符串
     * @return array
     */
    function stringToArray($str = null){
        if($str === null){
            return false;
        }
        $arr = array();
        for($i = 0, $j = 0; $i < strlen($str); $i+=2,$j++){
            $arr[$j] = substr($str,$i,2);
        }
        return $arr;
    }
    

    字符串编码转换

    /**
     * 对数据进行编码转换
     * @param array/string $data 数组
     * @param string $output 转换后的编码
     * Created on 2016-7-13
     */
    function array_iconv($data, $output = 'utf-8') {
        $encode_arr = array('UTF-8','ASCII','GBK','GB2312','BIG5','JIS','eucjp-win','sjis-win','EUC-JP');
        $encoded = mb_detect_encoding($data, $encode_arr);
        if (!is_array($data)) {
            return mb_convert_encoding($data, $output, $encoded);
        }
        else {
            foreach ($data as $key=>$val) {
                $key = array_iconv($key, $output);
                if(is_array($val)) {
                    $data[$key] = array_iconv($val, $output);
                } else {
                    $data[$key] = mb_convert_encoding($data, $output, $encoded);
                }
            }
            return $data;
        }
    }
    

    请求参数字符串转数组

    /* 将一个字符串转变成键值对数组
     * @param    : string str 要处理的字符串 $str ='name=123&sex=1&num=12';
     * @param    : string sp 键值对分隔符
     * @param    : string kv 键值分隔符
     * @return    : array*/
    function str2arr ($str,$sp="&",$kv="=")
    {
        $arr = str_replace(array($kv,$sp),array('"=>"','","'),'array("'.$str.'")');
        eval("$arr"." = $arr;");   // 把字符串作为PHP代码执行
        return $arr;
    }
    

    判断类

    判断一个字符串是否是颜色值

     /**
     * 判断字符串是否是颜色值,如:#FFFFFF
     * @param $str
     * @return bool
     */
    function isColor($str){
        $match = '/^#([0-9a-fA-F]{6})$/';
        if(preg_match($match, $str)){
            return true;
        }
        return false;
    }
    

    数组类

    对象转数组

    /**
     * 对象转换成数组
     * @param $obj
     */
    function objToArray($obj)
    {
        return json_decode(json_encode($obj), true);
    }
    

    对象数组自定义排序

     usort($result, function ($object1, $object2){
     //倒叙
     	return $object1->create_time < $object2->create_time;
     });
    

    删除关联数组的空值

    /**
     * 删除数组中value为空的
     */
    function delArrayEmptyValue($array = []){
        foreach ($array as $key => $value) {
            if(!isset($value) || empty($value)){
                unset($array[$key]);
            }
        }
        return $array;
    }
    

    过滤数组中的空值和重复值

    function filterEmptyRepeatValue($arr = array()){
        $tmpArr = array();
        foreach ($arr as $key => $value) {
            if(!empty($value) && !in_array($value, $tmpArr)){
                array_push($tmpArr, $value);
            }
        }
        return $tmpArr;
    }
    

    数组转请求参数字符串

    也可以使用http_build_query()

    /**
     * 数组转请求参数字符串
     * @param $array 要处理的数组
     * @return string 如:name=123&sex=1&num=12
     */
    function arrayToString($array){
        $string = [];
        if($array && is_array($array)){
            foreach ($array as $key=> $value){
                $string[] = $key.'='.$value;
            }
        }
        return implode('&',$string);
    }
    

    SHA256WithRSA签名和验签

    生成签名

    //生成 sha256WithRSA 签名
    function getSign($content, $privateKey){
        $privateKey = "-----BEGIN RSA PRIVATE KEY-----
    " .
            wordwrap($privateKey, 64, "
    ", true) .
            "
    -----END RSA PRIVATE KEY-----";
    
        $key = openssl_get_privatekey($privateKey);
        openssl_sign($content, $signature, $key, "SHA256");
        openssl_free_key($key);
        $sign = base64_encode($signature);
        return $sign;
    }
    

    验证签名

    //验证 sha256WithRSA 签名
    function verify($content, $sign, $publicKey){
    
        $publicKey = "-----BEGIN PUBLIC KEY-----
    " .
        wordwrap($publicKey, 64, "
    ", true) .
        "
    -----END PUBLIC KEY-----";
    
        $key = openssl_get_publickey($publicKey);
        $ok = openssl_verify($content,base64_decode($sign), $key, 'SHA256');
        openssl_free_key($openssl_public_key);
        return $ok;
    }
    

    zip压缩与解压

    压缩

    /**
     * 压缩文件
     * @param array $files 待压缩文件 array('d:/test/1.txt','d:/test/2.jpg');【文件地址为绝对路径】
     * @param string $filePath 输出文件路径 【绝对文件地址】 如 d:/test/new.zip
     * @return string|bool
     */
    function zip($files, $filePath)
    {
        //检查参数
        if (empty($files) || empty($filePath)) {
            return false;
        }
    
        //压缩文件
        $zip = new ZipArchive();
        $zip->open($filePath, ZipArchive::CREATE);
        foreach ($files as $key => $file) {
            //检查文件是否存在
            if (!file_exists($file)) {
                return false;
            }
            $zip->addFile($file, basename($file));
        }
        $zip->close();
    
        return true;
    }
    

    解压

    注意:最好使用winrar 工具压缩的压缩包,其他的压缩包工具解压出来文件名会乱码

    /**
     * zip解压方法
     * @param string $filePath 压缩包所在地址 【绝对文件地址】d:/test/123.zip
     * @param string $path 解压路径 【绝对文件目录路径】d:/test
     * @return bool
     */
    function unzip($filePath, $path)
    {
        if (empty($path) || empty($filePath)) {
            return false;
        }
    
        $zip = new ZipArchive();
    
        if ($zip->open($filePath) === true) {
            $zip->extractTo($path);
            $zip->close();
            return true;
        } else {
            return false;
        }
    }
    

    图片类

    图片转Base64编码

    /**
     * 获取图片的Base64编码(不支持url)
     *
     * @param $img_file 传入本地图片地址
     *
     * @return string
     */
    function imgToBase64($img_file) {
    
        $img_base64 = '';
        if (file_exists($img_file)) {
            $app_img_file = $img_file; // 图片路径
            $img_info = getimagesize($app_img_file); // 取得图片的大小,类型等
    
            //echo '<pre>' . print_r($img_info, true) . '</pre><br>';
            $fp = fopen($app_img_file, "r"); // 图片是否可读权限
    
            if ($fp) {
                $filesize = filesize($app_img_file);
                $content = fread($fp, $filesize);
                $file_content = chunk_split(base64_encode($content)); // base64编码
                switch ($img_info[2]) {           //判读图片类型
                    case 1: $img_type = "gif";
                        break;
                    case 2: $img_type = "jpg";
                        break;
                    case 3: $img_type = "png";
                        break;
                }
    
                $img_base64 = 'data:image/' . $img_type . ';base64,' . $file_content;//合成图片的base64编码
    
            }
            fclose($fp);
        }
    
        return $img_base64; //返回图片的base64
    }
    

    时间类

    求两个日期之间相差的天数

    	/**
         * 求两个日期之间相差的天数
         * (针对1970年1月1日之后,求之前可以采用泰勒公式)
         * @param string $day1
         * @param string $day2
         * @return number
         */
        function diffBetweenTwoDays($day1, $day2)
        {
            $second1 = strtotime($day1);
            $second2 = strtotime($day2);
    
            if ($second1 < $second2) {
                $tmp = $second2;
                $second2 = $second1;
                $second1 = $tmp;
            }
            return ($second1 - $second2) / 86400;
        }
    
        $day1 = "2020-11-12 14:24:00";
        //当前时间
        $day2 =  date('Y-m-d H:i:s',strtotime('now'));
        //向上取整
        $diff = ceil(diffBetweenTwoDays($day1, $day2));
        echo $diff . "
    ";
    
  • 相关阅读:
    Android碰撞检测——Region碰撞检查
    游戏音乐MediaPlayer和SoundPool常用的一些方法
    游戏框架SurfaceView的简单运用
    Android碰撞检测——矩形检查
    View框架下实现角色的上下左右移动
    数据库导出到Excel前后端代码
    jQuery打印插件PrintArea实现
    showModalDialog 传值及刷新
    文件夹中文件夹(文件)按时间排序,读取最新的文件夹(文件)
    .NET分布式开发报错:“与基础事务管理器的通信失败”的解决方法
  • 原文地址:https://www.cnblogs.com/makalochen/p/13053781.html
Copyright © 2020-2023  润新知