zoukankan      html  css  js  c++  java
  • php 常用自定义方法

    1.月份显示

    /** 月份顯示
    *   @param  int    $m       1-12
    *   @param  int    $type    0:long 1:short(default) 2:chinese
    *   @return String
    */
    function format_month($m, $type=0){
        $month = array(
                    array('', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
                    array('', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'),
                    array('', '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月')
                );
        return $month[$type][$m];
    }

    2.过滤字符串,保留UTF8字母数字中文及部分符号

    /** 過濾字符串,保留UTF8字母數字中文及部份符號
    *   @param  String  $ostr
    *   @return String
    */
    function filter_utf8_char($ostr){
        preg_match_all('/[x{FF00}-x{FFEF}|x{0000}-x{00ff}|x{4e00}-x{9fff}]+/u', $ostr, $matches);
        $str = join('', $matches[0]);
        if($str==''){   //含有特殊字符需要逐個處理
            $returnstr = '';
            $i = 0;
            $str_length = strlen($ostr);
            while ($i<=$str_length){
                $temp_str = substr($ostr, $i, 1);
                $ascnum = Ord($temp_str);
                if ($ascnum>=224){
                    $returnstr = $returnstr.substr($ostr, $i, 3);
                    $i = $i + 3;
                }elseif ($ascnum>=192){
                    $returnstr = $returnstr.substr($ostr, $i, 2);
                    $i = $i + 2;
                }elseif ($ascnum>=65 && $ascnum<=90){
                    $returnstr = $returnstr.substr($ostr, $i, 1);
                    $i = $i + 1;
                }elseif ($ascnum>=128 && $ascnum<=191){ // 特殊字符
                    $i = $i + 1;
                }else{
                    $returnstr = $returnstr.substr($ostr, $i, 1);
                    $i = $i + 1;
                }
            }
            $str = $returnstr;
            preg_match_all('/[x{FF00}-x{FFEF}|x{0000}-x{00ff}|x{4e00}-x{9fff}]+/u', $str, $matches);
            $str = join('', $matches[0]);
        }
        return $str;
    }

    3.二进制流生成文件

    /** 二进制流生成文件
    *   $_POST 无法解释二进制流,需要用到 $GLOBALS['HTTP_RAW_POST_DATA'] 或 php://input
    *   $GLOBALS['HTTP_RAW_POST_DATA'] 和 php://input 都不能用于 enctype=multipart/form-data
    *   @param    String    $file   要生成的文件路径
    *   @return   boolean
    */
    function binary_to_file($file){
        $content = $GLOBALS['HTTP_RAW_POST_DATA'];  // 需要php.ini设置
        if(empty($content)){
            $content = file_get_contents('php://input');    // 不需要php.ini设置,内存压力小
        }
        $ret = file_put_contents($file, $content, true);
        return $ret;
    }

    4.强制更新图片缓存

    /** 強制更新圖片緩存
    *   @param Array $files 要更新的圖片
    *   @param int $version 版本
    */
    function force_reload_file($files=array(), $version=0){
        $html = '';
        if(!isset($_COOKIE['force_reload_page_'.$version])){ // 判斷是否已更新過
            setcookie('force_reload_page_'.$version, true, time()+2592000);
            $html .= '<script type="text/javascript">'."
    ";
            $html .= 'window.onload = function(){'."
    ";
            $html .= 'setTimeout(function(){window.location.reload(true); },1000);'."
    ";
            $html .= '}'."
    ";
            $html .= '</script>';
            echo $html;
            exit();
        }else{  // 讀取圖片一次,針對chrome優化
            if($files){
                $html .= '<script type="text/javascript">'."
    ";
                $html .= "<!--
    ";
                for($i=0,$max=count($files); $i<$max; $i++){
                    $html .= 'var force_reload_file_'.$i.' =new Image()'."
    ";
                    $html .= 'force_reload_file_'.$i.'.src="'.$files[$i].'"'."
    ";
                }
                $html .= "-->
    ";
                $html .= '</script>';
            }
        }
        return $html;
    }

    5.文件转base64 与 base64转文件

    /** 文件转base64输出
    * @param  String $file 文件路径
    * @return String base64 string
    */
    function fileToBase64($file){
        $base64_file = '';
        if(file_exists($file)){
            $mime_type = mime_content_type($file);
            $base64_data = base64_encode(file_get_contents($file));
            $base64_file = 'data:'.$mime_type.';base64,'.$base64_data;
        }
        return $base64_file;
    }
    
    
    /** base64转文件输出
    * @param  String $base64_data base64数据
    * @param  String $file        要保存的文件路径
    * @return boolean
    */
    function base64ToFile($base64_data, $file){
        if(!$base64_data || !$file){
            return false;
        }
        return file_put_contents($file, base64_decode($base64_data), true);
    }

    6.16进制颜色转10进制颜色

    /** 16进制颜色转10进制颜色,例#FF0000转rgb(255, 0, 0);
    * @param  String $hexcolor
    * @return Array
    */
    function hex2rgb($hexcolor){
        $color = str_replace('#', '', $hexcolor);
        if (strlen($color) > 3) {
            $rgb = array(
                'r' => hexdec(substr($color, 0, 2)),
                'g' => hexdec(substr($color, 2, 2)),
                'b' => hexdec(substr($color, 4, 2))
            );
        } else {
            $r = substr($color, 0, 1) . substr($color, 0, 1);
            $g = substr($color, 1, 1) . substr($color, 1, 1);
            $b = substr($color, 2, 1) . substr($color, 2, 1);
            $rgb = array(
                'r' => hexdec($r),
                'g' => hexdec($g),
                'b' => hexdec($b)
            );
        }
        return $rgb;
    }

    7.获取两时间段相差时间

    /** 获取两时间段相差时间
    * @param datetime $starttime
    * @param datetime $endtime
    * @return String
    */
    function diff_time($starttime, $endtime){
        $diff = abs(strtotime($starttime) - strtotime($endtime));
        $days = (int)($diff/86400);
        $hours = (int)($diff/3600);
    
        if($days>0){
            $ret = $days.' 天';
        }elseif($hours>0){
            $ret = $hours.' 小时';
        }else{
            $ret = '不足1小时';
        }
        return $ret;
    }

    8.延时输出内容

    /** 延时输出内容
    * @param int $sec 秒数,可以是小数例如 0.3
    */
    function cache_flush($sec=2){
        ob_flush();
        flush();
        usleep($sec*1000000);
    }

    9.使用异或(xor)+key加密解密文件

    /** 文件加密,使用key与原文异或(XOR)生成密文,解密则再执行一次异或即可
    * @param String $source 要加密或解密的文件
    * @param String $dest   加密或解密后的文件
    * @param String $key    密钥
    */
    function file_encrypt($source, $dest, $key){
    	if(file_exists($source)){
    		
    		$content = '';          // 处理后的字符串
    		$keylen = strlen($key); // 密钥长度
    		$index = 0;
    
    		$fp = fopen($source, 'rb');
    
    		while(!feof($fp)){
    			$tmp = fread($fp, 1);
    			$content .= $tmp ^ substr($key,$index%$keylen,1);
    			$index++;
    		}
    
    		fclose($fp);
    
    		return file_put_contents($dest, $content, true);
    
    	}else{
    		return false;
    	}
    }

    10.获取文件或文件夹的拥有者,组用户,及权限

    /** 获取文件或文件夹的拥有者,组用户,及权限
    * @param  String $filename
    * @return Array
    */
    function file_attribute($filename){
    
        if(!file_exists($filename)){
            return false;
        }
    
        $owner = posix_getpwuid(fileowner($filename));
        $group = posix_getpwuid(filegroup($filename));
        $perms = substr(sprintf('%o',fileperms($filename)),-4);
    
        $ret = array(
            'owner' => $owner['name'],
            'group' => $group['name'],
            'perms' => $perms
        );
    
        return $ret;
    
    }





  • 相关阅读:
    myDOM
    13模块
    12异常
    11面向对象
    10文件操作
    蓝桥杯心得
    生物芯片-2014国赛Java语言C组四题
    奇妙的数字-2015省赛C语言A组第三题
    方程整数解-2015省赛C语言A组第一题
    机器人数目-2015决赛Java语言C组第一题
  • 原文地址:https://www.cnblogs.com/fdipzone/p/3715079.html
Copyright © 2011-2022 走看看