php 常用自定义方法

来源:互联网 发布:midi键盘软件 编辑:程序博客网 时间:2024/05/20 04:26

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">'."\r\n";        $html .= 'window.onload = function(){'."\r\n";        $html .= 'setTimeout(function(){window.location.reload(true); },1000);'."\r\n";        $html .= '}'."\r\n";        $html .= '</script>';        echo $html;        exit();    }else{  // 讀取圖片一次,針對chrome優化        if($files){            $html .= '<script type="text/javascript">'."\r\n";            $html .= "<!--\r\n";            for($i=0,$max=count($files); $i<$max; $i++){                $html .= 'var force_reload_file_'.$i.' =new Image()'."\r\n";                $html .= 'force_reload_file_'.$i.'.src="'.$files[$i].'"'."\r\n";            }            $html .= "-->\r\n";            $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;}

11.删除空目录及空子目录

/** 删除所有空目录* @param String $path 目录路径*/function rm_empty_dir($path){    if($handle = opendir($path)){        while(($file=readdir($handle))!==false){     // 遍历文件夹            if($file!='.' && $file!='..'){                $curfile = $path.'/'.$file;          // 当前目录                if(is_dir($curfile)){                // 目录                    rm_empty_dir($curfile);          // 如果是目录则继续遍历                    if(count(scandir($curfile))==2){ // 目录为空,=2是因为. 和 ..存在                        rmdir($curfile);             // 删除空目录                    }                }            }        }        closedir($handle);    }}

12.unicode转中文

/* unicode 转 中文* @param  String $str unicode 字符串* @return String*/function unescape($str) {    $str = rawurldecode($str);    preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);    $ar = $r[0];    foreach($ar as $k=>$v) {        if(substr($v,0,2) == "%u"){            $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));        }elseif(substr($v,0,3) == "&#x"){            $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));        }elseif(substr($v,0,2) == "&#") {            $ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));        }    }    return join("",$ar);}





原创粉丝点击