一些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 MemCached 高级缓存应用代码
Aug 05 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
PHP创建桌面快捷方式的实例代码
Feb 17 PHP
thinkphp的c方法使用示例
Feb 24 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
PHP implode()函数用法讲解
Mar 08 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
Apr 14 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
php Try Catch异常测试
2009/03/01 PHP
基于php下载文件的详解
2013/06/02 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
php生成RSS订阅的方法
2015/02/13 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
js控制div及网页相关属性的代码
2009/12/19 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
JS实现星星海特效
2019/12/24 Javascript
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
JavaScript中交换值的10种方法总结
2020/08/18 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
超市中秋节促销方案
2014/03/21 职场文书
街道务虚会发言材料
2014/10/20 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
督导岗位职责
2015/02/04 职场文书
教师节寄语2015
2015/03/23 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android