isJson
function isJson($string) { json_decode($string); return (json_last_error() == JSON_ERROR_NONE); }
PHP中URL中特殊字符引起的问题(+,\,=)
rawurldecode(urlencode(urldecode($sign))));
获取当前Server的IP
$serverHostIp = gethostbyname(php_uname('n'));
报错设置
ini_set("display_errors", TRUE); error_reporting(E_ALL ^ E_NOTICE);
把字符串或者数组转化成UTF8
/** * @desc 把字符串或者数组转化成UTF8 * @param unknown $var * @throws Exception * @return multitype:string |string */ function utf8($var) { if (is_array($var)) { $data = array(); foreach ($var as $k => $v) { $data[utf8($k)] = utf8($v); } return $data; } else { if (function_exists('mb_convert_encoding')) { return mb_convert_encoding($var, 'UTF-8', 'GBK'); } else if (function_exists('iconv')) { return iconv('GBK', 'UTF-8', $var); } else { throw new Exception('don\'t support charset convert!'); } } }
把php 数据写入到php文件
/** * @desc 把php 数据写入到php文件 * @param array $data * @param string $file php文件名 */ function writeToPHP($data,$file){ if(strpos($file, '.php') === false) $file = $file.'.php'; file_exists($file) or touch($file); $str = var_export($data,TRUE); $str = "<?php\r\n return ".$str.";\r\n"; file_put_contents($file, $str); }
获取csv 文件的内容
/** * @desc 获取csv 文件的内容 * @param string $file_name 要写入的文件名 * @param number $priKey 主键 已什么为主键 * @param string $recursion 是否 递归(王朝球员的等级和突破都 有多条数据) * @return array $data 数组 */ function getData($file_name,$priKey=0,$recursion = false){ $baseDataHandle = fopen($file_name, "r"); $data = array(); $keys = fgetcsv($baseDataHandle); $keys = fgetcsv($baseDataHandle);//第二次是对应的键值 while (!feof($baseDataHandle)) { $tmp_value = fgetcsv($baseDataHandle); $tmp_data = array_combine($keys, $tmp_value); if($recursion){ $data[$tmp_value[$priKey]][] = $tmp_data; } else { $data[$tmp_value[$priKey]] = $tmp_data; } } fclose($baseDataHandle); return $data; }
获取CSV文件指定字段
/** * @desc 获取CSV文件 * @param unknown $file_name * @param unknown $need_keys * @return multitype:number multitype: string |multitype:number string multitype:multitype:unknown */ function getCsvData($file_name,$need_keys){ setlocale(LC_ALL,array('zh_CN.gbk','zh_CN.gb2312','zh_CN.gb18030')); //linux中文乱码 $baseDataHandle = fopen($file_name, "r"); $data = array(); //第一步 :获取首行title 里面所有的key $first_line_keys = fgetcsv($baseDataHandle); //第二步 :检查所需要的need_keys 是否都存在当前csv中 foreach ($need_keys as $need_key=>$need_value){ if(!in_array($need_key, $first_line_keys)){ $msg = "必填字段【".$need_key."】不在上传CSV文件中,请确认首行标题!"; return array( 'ret' =>-1, 'msg' =>$msg, 'data'=>array(), ); } } //第三步 获取所有的数据 while (!feof($baseDataHandle)) { $tmp_value = fgetcsv($baseDataHandle); if($tmp_value){ $tmp_data = array_combine($first_line_keys, $tmp_value); //把第一行的键作为键跟 以后的record合并 $data[] = $tmp_data; } } fclose($baseDataHandle); //第四步 重新格式化 need_keys 中的数据 $backData = array(); foreach ($data as $key=>$value){ $tmp_record = array(); foreach ($value as $s_key=>$s_value){ // 4.1 获取当前字段的对应key if(isset($need_keys[$s_key])){//如果需求字段在其中 $tmp_record[$need_keys[$s_key]] = $s_value; } } $backData[] = $tmp_record; } return array( 'ret'=>0, 'msg'=>'ok', 'data'=>$backData ); }
php分类数组或者树状数组结构
$baseArray = array( array('id'=>1,'parent'=>0,'name'=>'我是爷爷'), array('id'=>2,'parent'=>1,'name'=>'我是爹'), array('id'=>3,'parent'=>2,'name'=>'我是我'), array('id'=>4,'parent'=>3,'name'=>'我是儿子'), array('id'=>5,'parent'=>4,'name'=>'我是孙子'), array('id'=>6,'parent'=>2,'name'=>'我是兄弟'), ); $treeData = array(); foreach ($baseArray as $key=>$value){ if($value['parent'] == '0'){ $value['sons'] = getSons($value['id'],$baseArray); $treeData[] = $value; } } function getSons($parent_id,$baseArray){ $sons = array(); foreach ($baseArray as $key=>$value){ if($value['parent'] == $parent_id){ //$sons[] = getSons($value['id'], $baseArray); $sons[] = $value; } } if(!empty($sons)){ foreach ($sons as $key=>&$value){ $value['sons'] = getSons($value['id'], $baseArray);; } } return $sons; } echo '<pre>'; print_r($treeData);
获取参数过滤防止注入
function I($name,$filter=true) { if($name == 'callback'){ header('Content-Type: json'); if(!preg_match('/^[a-z0-9A-Z_\.\%]*$/', $_REQUEST[$name])){ return 'callback'; } } if(isset($_REQUEST[$name])){ if(is_array($_REQUEST[$name])){ return filterArray($_REQUEST[$name],$filter); } else { if($filter == true){ return addslashes(htmlentities($_REQUEST[$name])); } else { return $_REQUEST[$name]; } } } else { return null; } } function amsOutPut($iRet,$sMsg,$jData = array()){ $array = array(); $array['iRet'] = $iRet; $array['sMsg'] = $sMsg; $array['jData'] = array_merge($array,$jData); $array = utf8($array); if(I('callback')){ echo I('callback')."(".json_encode($array).")"; }else{ echo json_encode($array); } die; }
curl_post curl_get
<?php /** * Send a POST requst using cURL * @param string $url to request * @param array $post values to send * @param array $options for cURL * @return string */ function curl_post($url, array $post = NULL, array $options = array()) { $defaults = array( CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_URL => $url, CURLOPT_FRESH_CONNECT => 1, CURLOPT_RETURNTRANSFER => 1, CURLOPT_FORBID_REUSE => 1, CURLOPT_TIMEOUT => 4, CURLOPT_POSTFIELDS => http_build_query($post) ); $ch = curl_init(); curl_setopt_array($ch, ($options + $defaults)); if( ! $result = curl_exec($ch)) { trigger_error(curl_error($ch)); } curl_close($ch); return $result; } /** * Send a GET requst using cURL * @param string $url to request * @param array $get values to send * @param array $options for cURL * @return string */ function curl_get($url, array $get = NULL, array $options = array()) { $defaults = array( CURLOPT_URL => $url. (strpos($url, '?') === FALSE ? '?' : ''). http_build_query($get), CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_TIMEOUT => 4 ); $ch = curl_init(); curl_setopt_array($ch, ($options + $defaults)); if( ! $result = curl_exec($ch)) { trigger_error(curl_error($ch)); } curl_close($ch); return $result; }
GBKUTF8互换
function GBKtoUTF8($str) { if (is_array($str)) { foreach ($str as &$value) { $value = GBKtoUTF8($value); } return $str; } elseif (is_string($str) && mb_detect_encoding($str, 'UTF-8', true) === false) { $str = iconv("GBK", "UTF-8//IGNORE", $str); return $str; } else { return $str; } } /** * @brief UTF8转GBK,传入的数据可为数组或字符串 * 数组则继续解析到字符串 * @param $str 字符串或数组 * @return 转码后字符串或数组 */ function UTF8toGBK($str) { if (is_array($str)) { foreach ($str as &$value) { $value = UTF8toGBK($value); } return $str; } elseif (is_string($str) && mb_detect_encoding($str, 'UTF-8', true) !== false) { $str = iconv("UTF-8", "GBK//IGNORE", $str); return $str; } else { return $str; } }
常用的api接口返回格式化函数
function fmtData($iRet, $sMsg = null, $data = [], $cached = false) { if ($sMsg === null) { if ($iRet >= 0) { $sMsg = 'ok'; } else { $sMsg = '系统繁忙,请稍候重试!'; } } $data = [ 'iRet' => $iRet, 'sMsg' => $sMsg, 'jData' => $data ]; if ($cached !== false) { $data['cached'] = $cached; } return GBKtoUTF8($data); }