/**
* 将接受的参数进行字符串转义
* @param $data
* @return string
*/
function htmlentities_data($data)
{
return htmlspecialchars($data);
//return htmlentities($data);
}
/**
* 将接受的参数进行反转义
* @param $data
* @return string
*/
function html_entity_decode_data($data)
{
//return html_entity_decode($data);
return htmlspecialchars_decode($data);
}
/**
* 观察数据插入或修改失败原因
* @param $systemmsg model对象
*/
function error_msg($systemmsg)
{
foreach ($systemmsg->getMessages() as $message) {
$data = $this->flashSession->error($message);
var_dump($message);
}
}
/**
* 获取客户端IP地址
* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
* @return mixed
*/
function getClientIp($type = 0)
{
$type = $type ? 1 : 0;
static $ip = NULL;
if ($ip !== NULL) return $ip[$type];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$pos = array_search('unknown', $arr);
if (false !== $pos) unset($arr[$pos]);
$ip = trim($arr[0]);
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// IP地址合法验证
$long = sprintf("%u", ip2long($ip));
$ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
return $ip[$type];
}
/**
* 对象 转 数组
* @param object $obj 对象
* @return array
*/
function object2array($object)
{
if (is_object($object)) {
foreach ($object as $key => $value) {
$array[$key] = $value;
}
} else {
$array = $object;
}
return $array;
}
/**
* 数组 转 对象
* @param object $obj 对象
* @return array
*/
function array2object($array)
{
if (is_array($array)) {
$obj = new StdClass();
foreach ($array as $key => $val) {
$obj->$key = $val;
}
} else {
$obj = $array;
}
return $obj;
}
function arraytoxml($data)
{
$str = '<xml>';
foreach ($data as $k => $v) {
$str .= '<' . $k . '>' . $v . '</' . $k . '>';
}
$str .= '</xml>';
return $str;
}
function xmltoarray($xml)
{
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
$val = json_decode(json_encode($xmlstring), true);
return $val;
}
/**
* post请求
* @param string $param 请求参数
* @param $url //请求地址
* @param string $cert_path //证书地址,绝对地址
* @param string $key_path //证书地址,绝对地址
* @return mixed
*/
function wx_curl($param = "", $url, $cert_path = '', $key_path = '', $ca_path = '')
{
$postUrl = $url;
$curlPost = $param;
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, $postUrl); //抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); // 增加 HTTP Header(头)里的字段
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); // 终止从服务端进行验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if ($cert_path) {
curl_setopt($ch, CURLOPT_SSLCERT, $cert_path); //这个是证书的位置绝对路径
}
if ($key_path) {
curl_setopt($ch, CURLOPT_SSLKEY, $key_path); //这个也是证书的位置绝对路径
}
if ($ca_path) {
curl_setopt($ch, CURLOPT_CAINFO, $ca_path); // CA根证书(用来验证的网站证书是否是CA颁布)
}
$data = curl_exec($ch); //运行curl
print_r($data);
exit;
curl_close($ch);
return $data;
}
function wx_curl2($second = 5, $xml, $url, $config)
{
// 初始化curl
$ch = curl_init();
// 超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// 这里设置代理,如果有的话
// curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
// curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// 设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
// 要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
if ($config) {
//使用证书:cert 与 key 分别属于两个.pem文件
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLCERT, $config['apiclient_cert']);
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEY, $config['apiclient_key']);
curl_setopt($ch, CURLOPT_CAINFO, $config['apiclient_rootca']);
}
// post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
// 运行curl
$data = curl_exec($ch);
// 返回结果
if ($data) {
curl_close($ch);
return $data;
} else {
$error = curl_errno($ch);
echo "curl出错,错误码:$error" . "<br>";
echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html
'>错误原因查询</a></br>";
curl_close($ch);
return false;
}
}
/**
* curl方式访问url
* @param $url 访问url
* @param int $flbg 返回结果是否通过json_decode转换成数组 0 转换 1 不转换
* @param int $type 访问方式 0 get 1 post
* @param array $post_data post访问时传递的数据
* @param array $headers 访问时需要传递的header参数
* @return mixed
*/
function requestUrl($url, $flbg = 0, $type = 0, $post_data = array(), $headers = array())
{
// 初始化一个 cURL 对象
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, $url);
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if (($type == 1) AND (count($post_data) != 0)) { // post请求
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data));
}
// 运行cURL,请求网页
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);
if (!$flbg) {
$data = json_decode($data, true);
}
return $data;
}
function dd($data)
{
var_dump($data);
exit();
}
/**
* 将一个数组根据某一个字段展示出tree结构
* @param $data
* @param $pId
* @param string $parent
* @return array
*/
function getTree($data, $pId, $parent = 'parent_id')
{
$tree = [];
foreach ($data as $k => $v) {
if ($v[$parent] == $pId) { //父亲找到儿子
$v['childs'] = getTree($data, $v['id']);
$tree[] = $v;
//unset($data[$k]);
}
}
unset($data);
return $tree;
}
/**
* [file_upload 文件上传函数,支持单文件,多文件]
* @param string $name input表单中的name
* @param string $save_dir 文件保存路径,相对于当前目录
* @param array $allow_suffix 允许上传的文件后缀
* @return array array() {
* ["status"]=> 全部上传成功为true,全部上传失败为false,部分成功为成功数量
* ["path"]=>array() {已成功的文件路径}
* ["error"]=>array() {失败信息}
* }
*/
function files_upload($name = "photo", $save_dir = "images", $allow_suffix = array('jpg', 'jpeg', 'gif', 'png'))
{
//如果是单文件上传,改变数组结构
if (!is_array($_FILES[$name]['name'])) {
$list = array();
foreach ($_FILES[$name] as $k => $v) {
$list[$k] = array($v);
}
$_FILES[$name] = $list;
}
$response = array();
$response['status'] = array();
$response['path'] = array();
$response['error'] = array();
//判断保存目录是否存在
if (!file_exists($save_dir)) {
//不存在则创建
if (false == mkdir($save_dir, 0777, true)) {
$response['status'] = false;
$response['error'][] = '文件保存路径错误,路径 "' . $save_dir . '" 创建失败';
}
}
$num = count($_FILES[$name]['tmp_name']);
$success = 0;
//循环处理上传
for ($i = 0; $i < $num; $i++) {
//判断是不是post上传
if (!is_uploaded_file($_FILES[$name]['tmp_name'][$i])) {
$response['error'][] = '非法上传,文件 "' . $_FILES[$name]['name'][$i] . '" 不是post获得的';
continue;
}
//判断错误
if ($_FILES[$name]['error'][$i] > 0) {
$response['error'][] = '文件 "' . $_FILES[$name]['name'][$i] . '" 上传错误,error下标为 "' . $_FILES[$name]['error'][$i] . '"';
continue;
}
//获取文件后缀
$suffix = ltrim(strrchr($_FILES[$name]['name'][$i], '.'), '.');
//判断后缀是否是允许上传的格式
if (!in_array($suffix, $allow_suffix)) {
$response['error'][] = '文件 "' . $_FILES[$name]['name'][$i] . '" 为不允许上传的文件类型';
continue;
}
//得到上传后文件名
$new_file_name = date('ymdHis', time()) . '_' . uniqid() . '.' . $suffix;
//拼接完整路径
$new_path = $save_dir . $new_file_name;
//上传文件 把tmp文件移动到保存目录中
if (!move_uploaded_file($_FILES[$name]['tmp_name'][$i], $new_path)) {
$response['error'][] = '文件 "' . $_FILES[$name]['name'][$i] . '" 从临时文件夹移动到保存目录时发送错误';
continue;
}
//返回由图片文件路径组成的数组
$response['path'][] = $save_dir . $new_file_name;
$success++;
}
if (0 == $success) {
$success = false;
} elseif ($success == $num) {
$success = true;
}
$response['status'] = $success;
return $response;
}
/**
* 将一段时间格式转化为数组格式
* @param $limit_time 示例 :$limit_time = '10:30-11:00,3:00-6:00,';
* @return array
*/
function time_explode($limit_time)
{
if (empty($limit_time)) {
return [['start_time' => '', 'end_time' => '']];
}
$limit_time = str_replace(',', ',', $limit_time);
$limit_time = explode(',', $limit_time);
$new_time = [];
foreach ($limit_time as $k => $v) {
if (empty($v)) {
unset($limit_time[$k]);
}
}
foreach ($limit_time as $k => $v) {
$time = explode('-', $v);
if(count($time)==2){
$new_time[$k] = [
'start_time' => $time[0],
'end_time' => $time[1]
];
}
}
return $new_time;
}
function image_text_data($data){
$new_data=[];
if(empty($data)){
return [];
}
foreach ($data as $k => $value){
$new_data[$k]['text']=$value['text'];
$new_data[$k]['img']=$value['img'];
}
return $new_data ;
}
/**
* 检测一个多维数组中是每个数组中否存在指定的下标值
* @param $data 多维数组
* @param $allow_data 检测的下标
*/
function is_set_value($data ,$allow_data){
foreach ($data as $value){
foreach ($allow_data as $vv){
if(!isset($value[$vv])){
echo json_encode(['code' => 'FAIL','msg' => ' data is empty !',]);die();
}
}
}
}
/**
* 传递多个参数,
*/
function re_data(){
$new_data=[];
$args = func_get_args();
for($i=0;$i<func_num_args();$i++) {
foreach ($args[$i] as $value){
$new_data[]=$value ;
}
}
return $new_data ;
}
/**
* 传递二维数组,
* @param $data
*/
function array_com_sum($data){
$new_data=[];
if(count($data)==0){
return $new_data ;
}
foreach ($data[0] as $item){
$new_data[$item]=array_sum(array_column($data,$item));
}
return $new_data ;
}
function empty_array_data_validate($data,$validate){
foreach ($data as $vvv){
foreach ($validate as $value){
if(!isset($vvv[$value]) ){
echo json_encode(['code' => 'FAIl', 'msg' => "{$value} is empty!"]);
exit();
}elseif(empty($vvv[$value]) && $vvv[$value]!=0 ){
echo json_encode(['code' => 'FAIl', 'msg' => "{$value} is empty!"]);
exit();
}
}
}
return true ;
}
function is_empty_array_data($data,$exclude=[])
{ $num = 0;
foreach ($data as $k => $v) {
if ( $v===0 || $v==='0' ||(!empty($v) ) ) {
$num++;
}else{
if(in_array($k,$exclude)){
$num++;
}else{
echo json_encode(['code' => 'FAIl', 'msg' => "{$k} is empty!"]);
exit();
}
}
}
return true ;
}
function is_not_array_error($validata,$array=[],$info='validate'){
if(!in_array($validata,$array)){
echo json_encode(['code' => 'FAIl', 'msg' => "{$info} is not true !"]);
exit();
}
}
//检测传入的值是否为空值
function is_empty_data()
{
$num_info = func_num_args(); //返回传递给该函数参数的个数
$data = func_get_args(); // 返回包含所有参数的数组
$num = 0;
foreach ($data as $k => $v) {
if ( $v===0 || $v==='0' ||(!empty($v) ) ) {
$num++;
}
}
if ($num != $num_info) {
echo json_encode(['code' => 'FAIl', 'msg' => "data is empty!"]);
exit();
} else {
return true;
}
}
function json_to_array($rules){
if (!empty($rules) && gettype($rules) == 'string') {
$rules = json_decode($rules, true);
}
if (!empty($rules) && gettype($rules) == 'object') {
$rules = object_to_array($rules);
}
if (!empty($rules) && gettype($rules) != 'array') {
$rt = array(
'code' => 'FAIL',
'msg' => "data is not valid"
);
echo json_encode($rt);
exit();
}
return $rules ;
}
/**
* 对象转化数组
* @param $obj
* @return array|void
*/
function object_to_array($obj)
{
$obj = (array)$obj;
foreach ($obj as $k => $v) {
if (gettype($v) == 'resource') {
return;
}
if (gettype($v) == 'object' || gettype($v) == 'array') {
$obj[$k] = (array)object_to_array($v);
}
}
return $obj;
}
function echo_json_die($list,$lists,$other=[]){
if(isset($list->items)){
unset($list->items);
}
$rt = [
'code' => 'SUCCESS',
'msg' => 'get data success',
'data'=>array_merge([
'page' => $list,
'lists' => $lists,
'perpages' => [10, 30, 50, 100, 500, 1000],
],$other)
];
echo json_encode($rt);die;
}
/**
* 时间格式转化,解决date('Y-m-d',strtotime($date))时间转换失败的问题
* @param $date 示例 20180504
* @return bool|mixed 2018-05-04
*/
function date_format_transformation($date){
if (strlen($date)!==8){
return '';
}
$date=substr_replace($date,'-',4,0);
$date=substr_replace($date,'-',7,0);
return $date ;
}
/**
* 时间格式转化,解决date('Y-m-d',strtotime($date))时间转换失败的问题
* @param $date 示例 2018-05-04
* @return bool|mixed 20180504
*/
function reversal_date_format_transformation($date){
if (strlen($date)!==10){
return '';
}
return date('Ymd',strtotime($date)) ;
}
/**
* 二维数组根据字段进行排序
* @params array $array 需要排序的数组
* @params string $field 排序的字段
* @params string $sort 排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
*/
function arraySequence($array, $field, $sort = 'SORT_DESC')
{
if(count($array)==0){
return $array ;
}
$arrSort = array();
foreach ($array as $uniqid => $row) {
foreach ($row as $key => $value) {
$arrSort[$key][$uniqid] = $value;
}
}
array_multisort($arrSort[$field], constant($sort), $array);
return $array;
}
function return_page_info($lists,$page,$perpage){
$last_page=ceil(count($lists)/$perpage);
return [
"first"=> 1,
"before"=> ($page==1)?1:$page-1,
"current"=> $page,
"last"=> $last_page,
"next"=>($page+1>$last_page)?$last_page:$page+1,
"total_pages"=> ceil(count($lists)/$perpage),
"total_items"=> count($lists),
"limit"=> $perpage,
];
}
/**
*
*接收头信息
*by 20120829
**/
function em_getallheaders()
{
$headers=[];
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
/**
*
*生成唯一订单号
*
**/
function gen_rand_out_trade_no(){
$a= date('Ymdhis').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
return 'KYBJ_'.$a.rand(1000000,9999999);
}
/**
*
*多维数组转化成一维数组
*
**/
function arrToOne($multi) {
$arr = array();
foreach ($multi as $key => $val) {
if( is_array($val) ) {
$arr = array_merge($arr, arrToOne($val));
} else {
$arr[] = $val;
}
}
return $arr;
}
/**
*
*将字符串类似以下字符串转化为数组格式
*转化为一维数组
*$abc = "a=1&b=2&c=3";
**/
function string2array($abc)
{ //$abc=trim('&',$abc);
$abc=explode('&',$abc);
$ad=array();
foreach ($abc as $k=>$v){
$ad[]=explode('=',$v);
}
$ac=array();
foreach ($ad as $k=>$v){
$ac[]=array($ad[$k][0]=>$ad[$k][1]);
}
$ae=array();
foreach ($ac as $k=>$v){
$ae=array_merge($ae,$ac[$k]);
}
return $ae;
}
PHP个人常用功能封装函数记录(一)
最新推荐文章于 2021-09-26 12:12:05 发布