一些php项目中比较通用的php自建函数的详解


Posted in PHP onJune 06, 2013

以下一些php函数是我们it动力最常用的项目开发函数,这些函数还算是在比较多的项目中使用到的,也是比较通用的。
1.请求接口的处理函数

/** 
 * curl访问程序接口 
 * @param string 
 * @return array 
 */  
function getCurlDate($url, $datas, $key) {  
    $datas['time'] = $_SERVER['REQUEST_TIME'] + 300;  
    $post_data['post'] = urlencode(authcode(serialize($datas), "ENCODE", $key));  
//    echo $url;  
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    // 我们在POST数据哦!  
    curl_setopt($ch, CURLOPT_POST, 1);  
    // 把post的变量加上  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);  
    $output = curl_exec($ch);  
 //   dump(curl_error($ch));  
    curl_close($ch);  
    return json_decode($output, true);  
} 

2.获取文件扩展名
/** 
 * @获取文件扩展名 
 * @$pic string 图片路径 
 */  
function get_file_ext($pic) {  
    return substr($pic, strrpos($pic, '.') + 1);  
} 

3.可逆的加密、解密函数
/** 
 * 字符串加密 
 * @param   $string     需加密的字符 
 * @param   $operation  加密或解密 
 * @param   $key        网站加密key,防止破解 
 * @return  string 
 */  
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {  
    $ckey_length = 4;  
    $key = md5($key ? $key : '^www.itokit.com$');  
    $keya = md5(substr($key, 0, 16));  
    $keyb = md5(substr($key, 16, 16));  
    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : '';      $cryptkey = $keya . md5($keya . $keyc);  
    $key_length = strlen($cryptkey);  
    $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;  
    $string_length = strlen($string);  
    $result = '';  
    $box = range(0, 255);  
    $rndkey = array();  
    for ($i = 0; $i <= 255; $i++) {  
        $rndkey[$i] = ord($cryptkey[$i % $key_length]);  
    }  
    for ($j = $i = 0; $i < 256; $i++) {  
        $j = ($j + $box[$i] + $rndkey[$i]) % 256;  
        $tmp = $box[$i];  
        $box[$i] = $box[$j];  
        $box[$j] = $tmp;  
    }  
    for ($a = $j = $i = 0; $i < $string_length; $i++) {  
        $a = ($a + 1) % 256;  
        $j = ($j + $box[$a]) % 256;  
        $tmp = $box[$a];  
        $box[$a] = $box[$j];  
        $box[$j] = $tmp;  
        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));  
    }  
    if ($operation == 'DECODE') {  
        if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) {  
            return substr($result, 26);  
        } else {  
            return '';  
        }  
    } else {  
        return $keyc . str_replace('=', '', base64_encode($result));  
    }  
} 

4.字符串转十六进制
/** 
* 字符串转十六进制 
* @param unknown_type $s 
*/  
function str2hex($s) {  
  $r = "";  
  $hexes = array ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");  
  for ($i=0; $i<strlen($s); $i++)  
  $r .= ($hexes [(ord($s{$i}) >> 4)] . $hexes [(ord($s{$i}) & 0xf)]);  
  return $r;  
}

5.十六进制转字符串
/** 
* 十六进制转字符串 
* @param unknown_type $s 
*/  
function hex2str($s) {  
  $r = "";  
  for ( $i = 0; $i<strlen($s); $i += 2)  
  {  
    $x1 = ord($s{$i});  
    $x1 = ($x1>=48 && $x1<58) ? $x1-48 : $x1-97+10;  
    $x2 = ord($s{$i+1});  
    $x2 = ($x2>=48 && $x2<58) ? $x2-48 : $x2-97+10;  
    $r .= chr((($x1 << 4) & 0xf0) | ($x2 & 0x0f));  
  }  
  return $r;  
} 

6.返回经addslashes处理过的字符串或数组
/** 
* 返回经addslashes处理过的字符串或数组 
* @param $string 需要处理的字符串或数组 
* @return mixed 
*/  
function new_addslashes($string){  
  if(!is_array($string)) return addslashes($string);  
  foreach($string as $key => $val) $string[$key] = new_addslashes($val);  
  return $string;  
}  /**/  
function addslashes_deep($string)  
{  
  return is_array($string) ? array_map('addslashes_deep', $string) : addslashes($string);  
} 

7.返回经stripslashes处理过的字符串或数组
/** 
* 返回经stripslashes处理过的字符串或数组 
* @param $string 需要处理的字符串或数组 
* @return mixed 
*/  
function new_stripslashes($string) {  
  if(!is_array($string)) return stripslashes($string);  
  foreach($string as $key => $val) $string[$key] = new_stripslashes($val);  
  return $string;  
}  
/**/  
function stripslashes_deep($string)  
{  
  return is_array($string) ? array_map('stripslashes_deep', $string) : stripslashes($string);  
} 

8.返回经 htmlspecialchars 处理过的字符串或数组
/** 
* 返回经 htmlspecialchars 处理过的字符串或数组 
* @param $string 需要处理的字符串或数组 
* @return mixed 
*/  
function new_html_special_chars($string) {  
  if(!is_array($string)) return htmlspecialchars($string);  
  foreach($string as $key => $val) $string[$key] = new_html_special_chars($val);  
  return $string;  
} 

9.获取请求ip
/** 
 * 获取请求ip 
 * 
 * @return ip地址 
 */  
function ip() {  
  if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {  
    $ip = getenv('HTTP_CLIENT_IP');  
  } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {  
    $ip = getenv('HTTP_X_FORWARDED_FOR');  
  } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {  
    $ip = getenv('REMOTE_ADDR');  
  } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {  
    $ip = $_SERVER['REMOTE_ADDR'];  
  }  
  return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';  
} 

10.字符截取 支持UTF8/GBK
/** 
* 字符截取 支持UTF8/GBK 
* @param $string 
* @param $length 
* @param $dot 
*/  
function str_cut($string, $length, $dot = '...') {  
  $strlen = strlen($string);  
  if($strlen <= $length) return $string;  
  $string = str_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);  
  $strcut = '';  
  if(strtolower(CHARSET) == 'utf-8') {  
    $length = intval($length-strlen($dot)-$length/3);  
    $n = $tn = $noc = 0;  
    while($n < strlen($string)) {  
      $t = ord($string[$n]);  
      if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {  
        $tn = 1; $n++; $noc++;  
      } elseif(194 <= $t && $t <= 223) {  
        $tn = 2; $n += 2; $noc += 2;  
      } elseif(224 <= $t && $t <= 239) {  
        $tn = 3; $n += 3; $noc += 2;  
      } elseif(240 <= $t && $t <= 247) {  
        $tn = 4; $n += 4; $noc += 2;  
      } elseif(248 <= $t && $t <= 251) {  
        $tn = 5; $n += 5; $noc += 2;  
      } elseif($t == 252 || $t == 253) {  
        $tn = 6; $n += 6; $noc += 2;  
      } else {  
        $n++;  
      }  
      if($noc >= $length) {  
        break;  
      }  
    }  
    if($noc > $length) {  
      $n -= $tn;  
    }  
    $strcut = substr($string, 0, $n);  
    $strcut = str_replace(array('∵', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut);  
  } else {  
    $dotlen = strlen($dot);  
    $maxi = $length - $dotlen - 1;  
    $current_str = '';  
    $search_arr = array('&',' ', '"', "'", '“', '”', '—', '<', '>', '·', '…','∵'); 
    $replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' ');  
    $search_flip = array_flip($search_arr);  
    for ($i = 0; $i < $maxi; $i++) {  
      $current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];  
      if (in_array($current_str, $search_arr)) {  
        $key = $search_flip[$current_str];  
        $current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);  
      }  
      $strcut .= $current_str;  
    }  
  }  
  return $strcut.$dot;  
} 

11.产生随机字符串
/** 
* 产生随机字符串 
* 
* @param        int                $length    输出长度  
* @param        string         $chars     可选的 ,默认为 0123456789 
* @return     string         字符串 
*/  
function random($length, $chars = '0123456789') {  
  $hash = '';  
  $max = strlen($chars) - 1;  
  for($i = 0; $i < $length; $i++) {  
    $hash .= $chars[mt_rand(0, $max)];  
  }  
  return $hash;  
} 

12.将字符串转换为数组
/** 
* 将字符串转换为数组 
* 
* @param  string  $data  字符串 
* @return  array  返回数组格式,如果,data为空,则返回空数组 
*/  
function string2array($data) {  
  if($data == '') return array();  
  eval("\$array = $data;");  
  return $array;  
} 

13.将数组转换为字符串
/** 
* 将数组转换为字符串 
* 
* @param  array  $data    数组 
* @param  bool  $isformdata  如果为0,则不使用new_stripslashes处理,可选参数,默认为1 
* @return  string  返回字符串,如果,data为空,则返回空 
*/  
function array2string($data, $isformdata = 1) {  
  if($data == '') return '';  
  if($isformdata) $data = new_stripslashes($data);  
  return addslashes(var_export($data, TRUE));  
} 

14.转换字节数为其他单位
/** 
* 转换字节数为其他单位 
* 
* 
* @param        string        $filesize        字节大小 
* @return        string        返回大小 
*/  
function sizecount($filesize) {  
        if ($filesize >= 1073741824) {  
                $filesize = round($filesize / 1073741824 * 100) / 100 .' GB';  
        } elseif ($filesize >= 1048576) {  
                $filesize = round($filesize / 1048576 * 100) / 100 .' MB';  
        } elseif($filesize >= 1024) {  
                $filesize = round($filesize / 1024 * 100) / 100 . ' KB';  
        } else {  
                $filesize = $filesize.' Bytes';  
        }  
        return $filesize;  
} 

PHP 相关文章推荐
php 随机排序广告的实现代码
May 09 PHP
php curl的深入解析
Jun 02 PHP
关于crontab的使用详解
Jun 24 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
php实现的日历程序
Jun 18 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
session 加入redis的实现代码
Jul 15 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP7如何开启Opcode打造强悍性能详解
May 11 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 PHP
如何在PHP中使用数组
Jun 09 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 #PHP
探讨PHP调用时间格式的参数详解
Jun 06 #PHP
探讨多键值cookie(php中cookie存取数组)的详解
Jun 06 #PHP
深入密码加salt原理的分析
Jun 06 #PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 #PHP
php定时计划任务的实现方法详解
Jun 06 #PHP
PHP使用DES进行加密与解密的方法详解
Jun 06 #PHP
You might like
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
基于jQuery架构javascript基础体系
2011/01/01 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
django 创建过滤器的实例详解
2017/08/14 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
大学生毕业的自我鉴定
2013/11/13 职场文书
教导处工作制度
2014/01/18 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
就业协议书范本
2014/10/08 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
2015中秋祝酒词
2015/08/12 职场文书
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python