<?php
/**
* Created by PhpStorm.
* User: yjh
* Date: 2018/7/17 0017
* Time: 上午 9:21
*/
//=================================== 目录 start =================================//
/*
一.[将Base64图片转换为本地图片并保存]
二.[打印]
三.[生成随机字符串]
四.[curl请求]
五.[PHP获取文件大小并格式化]
六.[PHP获取文件扩展名]
七.[获取手机号码归属地]
八.[获取客户端真实IP]
九.[返回十三位时间戳、精确到毫秒]
十.[极端情况下使用,如json_decode方法始终无法解析json串的情况]
十一.[将十六进制流$string转换成字符串]
十二.[把返回的数据集转换成树形结构Tree]
十三.[判断输入的字符串是否是一个合法的手机号(仅限中国大陆)]
十四.[隐藏手机号中间四位]
十五.[检查银行卡号是否合法]
十六.[将xml转为array]
十七.[数组转xml字符]
十八.[获取本周所有日期]
*/
//=================================== 目录 end =================================//
/**
* 一.[将Base64图片转换为本地图片并保存]
* @param string [Base64] $image [要保存的Base64]
* @param string $prePath 传入路径前缀
* @return String $imageSrc [图片保存路径]
*/
function base64ImageContent($image, $prePath = 'Upload/tmp/signImage/')
{
$imageName = "25220_" . date("His", time()) . "_" . rand(1111, 9999) . '.png';
if (strstr($image, ",")) {
$image = explode(',', $image);
$image = $image[1];
}
$path = $prePath . date("Ymd", time());
if (!is_dir($path)) { //判断目录是否存在 不存在就创建
mkdir($path, 0777, true);
}
$imageSrc = $path . "/" . $imageName; //图片名字
$r = file_put_contents($imageSrc, base64_decode($image));//返回的是字节数
if (!$r) {
return false;
//echo json_encode(['data'=>null,"code"=>1,"msg"=>"图片生成失败"],JSON_UNESCAPED_UNICODE);
} else {
return $imageSrc;
//echo json_encode(['data'=>1,"code"=>0,"msg"=>"图片生成成功"],JSON_UNESCAPED_UNICODE);
}
}
/**
* 二.[打印]
* @param $var .. 要打印的变量
*/
function pr($var)
{
$template = PHP_SAPI !== 'cli' ? '<pre>%s</pre>' : "\n%s\n";
printf($template, print_r($var, true));
}
/**
* 三.[生成随机字符串]
* @param int $length 字符串的长度,默认16
* @return string $str 字符串
*/
function createNonceStr($length = 16)
{
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
/**
* 四.[curl请求]
* @param string $url
* @return Object $contents
* */
function curl_http($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$contents = curl_exec($ch);
curl_close($ch);
return $contents;
}
/**
* 五.[PHP获取文件大小并格式化]
* @param string $size 需要查询大小的文件路径
* @return string 文件大小
*/
function formatSize($size)
{
$sizes = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
if ($size == 0) {
return ('n/a');
} else {
return (round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i]);
}
}
/**
* 六.[PHP获取文件扩展名]
* @param string $filename 文件完整路径名
* @return string $myExt 得到的后缀名
*/
function getExtension($filename)
{
$myExt = substr($filename, strrpos($filename, '.'));
return str_replace('.', '', $myExt);
}
/**
* 七.[获取手机号码归属地]
* @param $phone [手机号]
* @return string [地址]
*/
function getMobileArea($phone)
{
$sms = array('province' => '', 'supplier' => ''); //初始化变量
//根据淘宝的数据库调用返回值
$url = "http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=" . $phone . "&t=" . time();
$content = file_get_contents($url);
$sms['province'] = substr($content, "56", "4"); //截取字符串
$sms['supplier'] = substr($content, "81", "4");
$att = $sms['province'] . $sms['supplier'];
return $att;
}
/**
* 八.[获取客户端真实IP]
* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
* @param boolean $adv 是否进行高级模式获取(有可能被伪装)
* @return mixed
*/
function getClientIp(int $type = 0, bool $adv = false)
{
$type = $type ? 1 : 0;
static $ip = NULL;
if ($ip !== NULL) return $ip[$type];
if ($adv) {
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'];
}
} 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];
}
/**
* 九.[返回十三位时间戳、精确到毫秒]
* @return string
*/
function getMsectime()
{
list($msec, $sec) = explode(' ', microtime());
$msectime = (string)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
return $msectime;
}
/**
* 十.[极端情况下使用,如json_decode方法始终无法解析json串的情况]
* @param $json
* @return mixed
*/
function json_decode($json)
{
$comment = false;
$length = strlen($json);
$out = '$x=';
for ($i = 0; $i < $length; $i++) {
if (!$comment) {
if (($json[$i] === '{') || ($json[$i] === '['))
$out .= ' array(';
else if (($json[$i] === '}') || ($json[$i] === ']'))
$out .= ')';
else if ($json[$i] === ':')
$out .= '=>';
else $out .= $json[$i];
} else {
$out .= $json[$i];
}
if ($json[$i] === '"' && $json[($i - 1)] !== "\\") {
$comment = !$comment;
}
}
eval($out . ';');
return $x;
}
/**
* 十一.[将十六进制流$string转换成字符串]
* @param string $string 需要转换的变量
* @return string
*/
function fromHexString($string)
{
$buf = "";
for ($i = 0; $i < strlen($string); $i += 2) {
$val = chr(hexdec(substr($string, $i, 2)));
$buf .= $val;
}
return $buf;
}
/**
* 十二.[把返回的数据集转换成树形结构Tree]
* @param array $list 要转换的数据集
* @param string $pid 父级ID键名
* @param string $pk ID键名
* @param string $child 子集键名
* @param int $root 一级菜单的parent_id 的值 (默认 0)
* @return array
*/
function listToTree($list, $pk = 'id', $pid = 'parent_id', $child = 'child', $root = 0)
{
// 创建Tree
$tree = array();
if (is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$pk]] =& $list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] =& $list[$key];
} else {
if (isset($refer[$parentId])) {
$parent =& $refer[$parentId];
$parent[$child][] =& $list[$key];
}
}
}
}
return $tree;
}
/**
* 十三.[判断输入的字符串是否是一个合法的手机号(仅限中国大陆)]
* @param string $string
* @return boolean
*/
function isMobile($string)
{
$len = strlen($string);
if ($len > 11) {
return false;
}
if (preg_match('/^[1]+[3,4,5,7,8]+\d{9}$/', $string)) {
return true;
}
return false;
}
/**
* 十四.[隐藏手机号中间四位]
* @param string $mobile 需要隐藏的手机号
* @return mixed
*/
function hideTel($mobile)
{
return substr_replace($mobile, '****', 3, 4);
}
/**
* 十五.[检查银行卡号是否合法]
* @param string $id_number 需要检查的卡号
* @return bool
*/
function checkIdNumber($id_number)
{
if (preg_match('/^([1-9]{1})(\d{14}|\d{18})$/', $id_number)) {
return true;
} else {
return false;
}
}
/**
* 十六.[将xml转为array]
* @param string $xml xml字符串或者xml文件名
* @param bool $isFile 传入的是否是xml文件名
* @return array 转换得到的数组
*/
function xmlToArray($xml, $isFile = false)
{
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
if ($isFile) {
if (!file_exists($xml)) return false;
$xmlStr = file_get_contents($xml);
} else {
$xmlStr = $xml;
}
$result = json_decode(json_encode(simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $result;
}
/**
* 十七.[数组转xml字符]
* @param array $data 需要转换的数组
* @return string $xml
**/
function arrayToXml($data)
{
if (!is_array($data) || count($data) <= 0) {
return false;
}
$xml = "<xml>";
foreach ($data as $key => $val) {
if (is_numeric($val)) {
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
} else {
$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
}
}
$xml .= "</xml>";
return $xml;
}
/**
* 十八.[获取本周所有日期]
* @param string $time 时间戳
* @param string $format 格式
* @return mixed
*/
function getWeek($time = '', $format = 'Ymd')
{
$time = $time != '' ? $time : time();
//获取当前周几
$week = date('w', $time);
$date = [];
for ($i = 1; $i <= 7; $i++) {
$date[$i] = date($format, strtotime('+' . $i - $week . ' days', $time));
}
return $date;
}