php 常用自定义,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 .= '

$html .= 'window.onload = function(){'."\r\n";

$html .= 'setTimeout(function(){window.location.reload(true); },1000);'."\r\n";

$html .= '}'."\r\n";

$html .= '';

echo $html;

exit();

}else{ // 讀取圖片一次,針對chrome優化

if($files){

$html .= '

$html .= "\r\n";

$html .= '';

}

}

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})|.{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) == ""){

$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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值