<?php
// 应用公共文件
function xml_to_array2($xml) {
$search = '/<(\w+)\s*?(?:[^\/>]*)\s*(?:\/>|>(.*?)<\/\s*?\\1\s*?>)/s';
$array = array ();
if(preg_match_all($search, $xml, $matches)){
foreach ($matches[1] as $i => $key) {
$value = $matches[2][$i];
if(preg_match_all($search, $value, $_matches)){
$array[$key] = xml_to_array($value);
}else{
if('ITEM' == strtoupper($key)){
$array[] = html_entity_decode($value);
}else{
$array[$key] = html_entity_decode($value);
}
}
}
}
return $array;
}
function xml_to_array($xml){
$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
if(preg_match_all($reg, $xml, $matches)){
$count = count($matches[0]);
for($i = 0; $i < $count; $i++){
$subxml= $matches[2][$i];
$key = $matches[1][$i];
if(preg_match( $reg, $subxml )){
$arr[$key] = xml_to_array($subxml);
}else{
$arr[$key] = $subxml;
}
}
}
return $arr;
}
function postUrl($curlPost,$url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
$return_str = curl_exec($curl);
curl_close($curl);
return $return_str;
}
// =================================================================================
/**
* 匹配出 内容中 上传的图片的 路径
* @param string $content
* @return null
*/
function preg_match_img($content="")
{
// 正则表达式匹配 内容中的图片
preg_match_all('/src=[\"](\/Public\/Uploads\/.*[\.]((jpg)|(png)|(jpeg)|(gif)))[\"]/isU',$content,$r);
$arrimg = null;
if(count($r)>2)
{
if(count($r[1])>0)
{
$arrimg = $r[1];
}
}
return $arrimg;
/* foreach($arrimg as $k=>$v)
{
if(file_exists(".".$v)) {
unlinkFile("." . $v);
}
}*/
}
/**
* 匹配出图片 并删除
* @param string $content
*/
function preg_match_img_delete($content="")
{
preg_match_all('/src=[\"](\/Public\/Uploads\/.*[\.]((jpg)|(png)|(jpeg)|(gif)))[\"]/isU',$content,$r);
$arrimg = null;
if(count($r)>2)
{
if(count($r[1])>0)
{
$arrimg = $r[1];
}
}
foreach($arrimg as $k=>$v)
{
if(file_exists(".".$v)) {
unlinkFile("." . $v);
}
}
}
/**
* 采集 http https
* @param $url
* @return mixed
*/
function mycurl_collect($url) {
$curl = curl_init(); // //启动一个CURL会话 ... 创建一个新cURL资源 初始化一个新的会话,返回一个cURL句柄
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查,0表示阻止对证书的合法性的检查。---https
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);// 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:')); // --- https
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HTTPGET, 1); // curl_setopt($curl, CURLOPT_HEADER,1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //false 时 curl_exec 就直接在浏览器中上输出了
$temp = curl_exec($curl); // 抓取URL并把它传递给浏览器
curl_close($curl);
return $temp;
}
/**
* 取得IP 所在 地址区域 sina
* @param string $ip
* @return mixed
*/
function getIPtoarea_sina($ip = '') {
$url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=" . $ip;
$json = mycurl_collect($url);
$json = json_decode($json, true);
return $json;
}
/**
* 取得IP 所在 地址区域 taobao
* @param string $ip
* @return mixed
*/
function getIPtoarea_taobao($ip = "") {
$url = "http://ip.taobao.com/service/getIpInfo.php?ip=" . $ip;
$json = mycurl_collect($url);
$json = json_decode($json, true);
return $json;
}
/* * 取得外网IP
* @return string
*/
function getIP_wide_area() {
$url = "http://1212.ip138.com/ic.asp";
$r = mycurl_collect($url);
$r = iconv('gb2312', 'utf-8', $r);
preg_match_all('/[\[]([\d]{1,3}[.][\d]{1,3}[.][\d]{1,3}[.][\d]{1,3})[\]]/is', $r, $r2);
if (isset($r2[1][0])) {
return $r2[1][0];
}
return '';
}
/**
* 返回当前域名
* @return mixed
*/
function getServerName() {
// echo $_SERVER['SERVER_NAME']." -- ". $_SERVER['HTTP_HOST'];
return $_SERVER['HTTP_HOST'];
}
/**
* 生成随机数和字母
* @param $len
* @param null $chars
* @return string
*/
function getRandomString($len, $chars = null) {
if (is_null($chars)) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
}
mt_srand(10000000 * (double) microtime());
for ($i = 0, $str = '', $lc = strlen($chars) - 1; $i < $len; $i++) {
$str .= $chars[mt_rand(0, $lc)];
}
return $str;
}
// 验证 QQ
function isQQ($str) {
if (!preg_match('/^[1-9][0-9]{4,14}$/is', $str)) {
return false;
}
return true;
}
function isEmail($email)
{
if(!preg_match('/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/',$email))
{
return false;
}
return true;
}
function isPhone($phone)
{
if (!preg_match('/^1[3|4|5|8][0-9]\d{4,8}$/', $phone)) {
return false ;
}
return true ;
}
function isTel($tel)
{
if(!preg_match('/^((([\(]\d{3,4}[\)])|(\d{3,4}))(-)?)?\d{7,14}$/',$tel))
{
return false;
}
return true;
}
/**
* @param $arrnormkey 验证的键名数组
* @param $arrparameter 被验证的 数组
*/
function parameterComplete($arrnormkey , $arrparameter)
{
$b = true;
foreach($arrnormkey as $k=>$v )
{
if(!array_key_exists($v,$arrparameter))
{
$b=false;
}
else
{
unset($arrparameter[$v]);//
}
}
if(count($arrparameter)>0)
{ // 存在非法参数
$b = false ;
}
return $b ;
}
/**
* @param $where 条件数组
* @param $startTime 开始时间
* @param $endTime 结束时间
* @param $field 时间字段
*/
function CreateWhereTime(&$where,$startTime,$endTime,$field)
{
$startTime = setTimeStart($startTime);
$endTime = setTimeEnd($endTime);
if($startTime!="")
{
$where[$field] = array('EGT',$startTime);
}
if($endTime!="")
{
$where[$field] = array('ELT',$endTime);
}
if($startTime!="" && $endTime!="")
{
$where[$field] = array('between',array($startTime,$endTime));
}
}
/**
* 2015-06-27
* 过滤需要以外的字段
* @param array $data 原数据,二维数组
* @param array $allowed 被允许的字段
* @return array
*/
function LimitFields($data=array(),$allowed=array())
{
if(!is_array($data) || !is_array($allowed))
{
return array();
}
$newarray = array();
foreach($allowed as $k=>$v)
{
if(isset($data[$v]))
{
$newarray[$v] = trim($data[$v]);
}
else
{
$newarray[$v]="";
}
}
return $newarray ;
}
/**
* 2015-07-08
* 取得访问的 Marking 标识 组成部分(当前模块名 ,当前控制器名 ,当前操作名)
* @return string
*/
function myGetMarking()
{//AaaBbbCcc
// return ucfirst( strtolower( MODULE_NAME)) . ucfirst(strtolower(CONTROLLER_NAME)) . ucfirst(strtolower(ACTION_NAME)) ;
return ucfirst( strtolower( request()->module())) . ucfirst(strtolower(request()->controller())) . ucfirst(strtolower(request()->action())) ;
}
/**
* 2015-07-23
* 取得访问的 Marking 标识 组成部分(当前模块名 ,当前控制器名 ,无当前操作名)
* @return string
*/
function GetMarking2()
{
return ucfirst( strtolower( request()->module())) . ucfirst(strtolower(request()->controller())) ;
}
/**
* 2015-07-14
* 传入 类名 和 方法名 创建 Marking 标识
* @param $className
* @param $functionName
*/
function myCreatMarking($className,$functionName='')
{
return ucfirst(strtolower(request()->module())) . ucfirst(strtolower($className)) . ucfirst(strtolower($functionName));
}
/**
* 2015-07-18
* 取得 当前 模块 控制 方法 组成的路由 url
* @param array $arr
* @return string
*/
function getUrlmvc()
{
$str = '/'. request()->module().'/' . request()->controller().'/' . request()->action().'/' ;
return $str ;
}
/**
* 2015-07-08 后台 用
* @param $status 状态码(ok = 200, error = 300, timeout = 301)
* @param $message 信息
* @param int $isclose 0 否(false) ,1 是(true)
* @param string $refreshType 要刷新的类型 tabid , dialogid ,divid ReFreshType::
* @param string $refreshID 要刷新的 ID
* @param string $forwardurl 跳转到某个url。
* @param string $forwardConfirm 跳转url前的确认提示信息。
*/
function myThrowMessage($status,$message,$isclose=0,$refreshType='',$refreshID='',$forwardurl='',$forwardConfirm='')
{
$arr = array("statusCode"=>$status,"message"=>$message,"closeCurrent"=>$isclose);
if(trim($forwardurl)!='')
{
$arr['forward']=$forwardurl;
}
if(trim($forwardConfirm)!='')
{
$arr['forwardConfirm']=$forwardConfirm;
}
if($refreshType!='' && $refreshID!='')
{
$arr["$refreshType"]=$refreshID;
}
echo json_encode($arr);
exit();
}
/** 2015-07-18
* 从多少条开始读取
* @param int $page 读取第多少页的数据
* @param int $pageSize 每页大小
* @return int
*/
function setLimitStart($page=1,$pageSize=0)
{
if($page<1){ $page =1;}
if($pageSize==0)
{
$pageSize = \Home\Common\ReadConfig::getPageSize();
}
return ($page-1)*$pageSize;
}
/**
* 2015-07-20
* 生成 【开始时间】 格式不对时返回 空
* @param $strTime
* @return int|string
*/
function setTimeStart($strTime)
{
if( preg_match('/[\d]{4}[-][\d]{2}[-][\d]{2}/ism',$strTime,$t)==true)
{
return strtotime($t[0]." 00:00:00");
}
else{ return '';}
}
/**
* 2015-07-20
* 生成 【结束时间】 格式不对时返回 空
* @param $strTime
* @return int|string
*/
function setTimeEnd($strTime)
{
if( preg_match('/[\d]{4}[-][\d]{2}[-][\d]{2}/ism',$strTime,$t)==true)
{
return strtotime($t[0]." 23:59:59");
}
else{ return '';}
}
/**
*2015-07-22
* 验证是不是 整数
* @param $str
* @return bool
*/
function reg_IsInt($str)
{
if(preg_match('/^[\d]{1,}$/',$str))
{
return true;
}return false ;
}
/**
* 打印后退出
* @param $arr
*/
function pp($arr="")
{
echo "<pre>";
print_r($arr);
echo "</pre>";
exit();
}
/**
* 打印不退出
* @param $arr
*/
function pp2($arr)
{
echo "<pre>";
print_r($arr);
echo "</pre>";
}
/**
* 判断是不是 手机
* @return bool
*/
function ismobile() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
return true;
//此条摘自TPM智能切换模板引擎,适合TPM开发
if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
return true;
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset ($_SERVER['HTTP_VIA']))
//找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false;
//判断手机发送的***端标志,兼容性有待提高
if (isset ($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array(
'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile'
);
//从HTTP_USER_AGENT中查找手机浏览器的关键字
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
return true;
}
}
//协议法,因为有可能不准确,放到最后判断
if (isset ($_SERVER['HTTP_ACCEPT'])) {
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
return true;
}
}
return false;
}
/**
* 删除文件
*
* @param string $aimUrl
* @return boolean
*/
/*function unlinkFile($aimUrl) {
if (file_exists($aimUrl)) {
unlink($aimUrl);
return true;
} else {
return false;
}
}*/
/**
* 建立文件夹
*
* @param string $aimUrl
* @return viod
*/
/*function createDir($aimUrl)
{
$aimUrl = str_replace('', '/', $aimUrl);
$aimDir = '';
$arr = explode('/', $aimUrl);
$result = true;
foreach ($arr as $str) {
$aimDir .= $str . '/';
if (!file_exists($aimDir)) {
$result = mkdir($aimDir);
}
}
return $result;
}*/
/******************************************************************************/
/**
* 列表 生成结束
*/
function chtmlend()
{
ob_clean();//清除之前输出的 内容
echo '<htmlend>';
}
/**
* 写入文件
* @param type $file
* @param type $content
*/
function write_file($file,$content)
{
if(!file_exists($file))
{
createFile($file);
}
$fp = fopen($file, 'w+');
fwrite($fp, $content );
fclose($fp);
}
/**
* 写入缓存 php文件
* @param type $file
* @param type $content
*/
function write_php($file,$content)
{
if(!file_exists(".".$file))
{
createFile(".".$file);
}
$fp = fopen(".".$file, 'w+');
fwrite($fp,"<?php \r\n\r\n return " . var_export($content, true) ." ; " );
fclose($fp);
}
/**
* 读取缓存的 php
*/
function read_php($file)
{
return include_once '.'.$file;
}
/******* ------ 以下 文件操作 ------- ******/
/**
* 读取文件列表
* @param type $dir 目录
* @param type $extension 文件扩展名
* @param type $maxnum 取多读取多少个
* @return string
*/
function getFile($dir,$extension=".",$maxnum=100)
{
$fileArray[]=NULL;
if (false != ($handle = opendir ( $dir ))) {
$i=0;
while ( false !== ($file = readdir ( $handle )) ) {
//去掉"“.”、“..”以及带“.xxx”后缀的文件
if ($file != "." && $file != ".."&&strpos($file,$extension))
{
$fileArray[$i]=$file;
if($i>$maxnum){
break;
}
$i++;
}
}
//关闭句柄
closedir ( $handle );
}
return $fileArray;
}
/**
* 建立文件夹
*
* @param string $aimUrl
* @return viod
*/
function createDir($aimUrl) {
$aimUrl = str_replace('', '/', $aimUrl);
$aimDir = '';
$arr = explode('/', $aimUrl);
$result = true;
foreach ($arr as $str) {
$aimDir .= $str . '/';
if (!file_exists($aimDir)) {
$result = mkdir($aimDir);
}
}
return $result;
}
/**
* 建立文件
*
* @param string $aimUrl
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function createFile($aimUrl, $overWrite = false) {
if (file_exists($aimUrl) && $overWrite == false) {
return false;
} elseif (file_exists($aimUrl) && $overWrite == true) {
unlinkFile($aimUrl);
}
$aimDir = dirname($aimUrl);
createDir($aimDir);
touch($aimUrl);
return true;
}
/**
* 移动文件夹
*
* @param string $oldDir
* @param string $aimDir
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function moveDir($oldDir, $aimDir, $overWrite = false) {
$aimDir = str_replace('', '/', $aimDir);
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';
$oldDir = str_replace('', '/', $oldDir);
$oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir . '/';
if (!is_dir($oldDir)) {
return false;
}
if (!file_exists($aimDir)) {
createDir($aimDir);
}
@ $dirHandle = opendir($oldDir);
if (!$dirHandle) {
return false;
}
while (false !== ($file = readdir($dirHandle))) {
if ($file == '.' || $file == '..') {
continue;
}
if (!is_dir($oldDir . $file)) {
moveFile($oldDir . $file, $aimDir . $file, $overWrite);
} else {
moveDir($oldDir . $file, $aimDir . $file, $overWrite);
}
}
closedir($dirHandle);
return rmdir($oldDir);
}
/**
* 移动文件
*
* @param string $fileUrl
* @param string $aimUrl
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function moveFile($fileUrl, $aimUrl, $overWrite = false) {
if (!file_exists($fileUrl)) {
return false;
}
if (file_exists($aimUrl) && $overWrite = false) {
return false;
} elseif (file_exists($aimUrl) && $overWrite = true) {
unlinkFile($aimUrl);
}
$aimDir = dirname($aimUrl);
createDir($aimDir);
rename($fileUrl, $aimUrl);
return true;
}
/**
* 删除文件夹
*
* @param string $aimDir
* @return boolean
*/
function unlinkDir($aimDir) {
$aimDir = str_replace('', '/', $aimDir);
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';
if (!is_dir($aimDir)) {
return false;
}
$dirHandle = opendir($aimDir);
while (false !== ($file = readdir($dirHandle))) {
if ($file == '.' || $file == '..') {
continue;
}
if (!is_dir($aimDir . $file)) {
unlinkFile($aimDir . $file);
} else {
unlinkDir($aimDir . $file);
}
}
closedir($dirHandle);
return rmdir($aimDir);
}
/**
* 删除文件
*
* @param string $aimUrl
* @return boolean
*/
function unlinkFile($aimUrl) {
if (file_exists($aimUrl)) {
unlink($aimUrl);
return true;
} else {
return false;
}
}
/**
* 复制文件夹
*
* @param string $oldDir
* @param string $aimDir
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function copyDir($oldDir, $aimDir, $overWrite = false) {
$aimDir = str_replace('', '/', $aimDir);
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';
$oldDir = str_replace('', '/', $oldDir);
$oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir . '/';
if (!is_dir($oldDir)) {
return false;
}
if (!file_exists($aimDir)) {
createDir($aimDir);
}
$dirHandle = opendir($oldDir);
while (false !== ($file = readdir($dirHandle))) {
if ($file == '.' || $file == '..') {
continue;
}
if (!is_dir($oldDir . $file)) {
copyFile($oldDir . $file, $aimDir . $file, $overWrite);
} else {
copyDir($oldDir . $file, $aimDir . $file, $overWrite);
}
}
return closedir($dirHandle);
}
/**
* 复制文件
*
* @param string $fileUrl
* @param string $aimUrl
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function copyFile($fileUrl, $aimUrl, $overWrite = false) {
if (!file_exists($fileUrl)) {
return false;
}
if (file_exists($aimUrl) && $overWrite == false) {
return false;
} elseif (file_exists($aimUrl) && $overWrite == true) {
unlinkFile($aimUrl);
}
$aimDir = dirname($aimUrl);
createDir($aimDir);
copy($fileUrl, $aimUrl);
return true;
}
/**
* 循环创建目录
* @param type $dir
* @param type $mode
* @return boolean
*/
//function mk_dir($dir, $mode = 0755)
//{
// if (is_dir($dir) || @mkdir($dir,$mode)) return true;
// if (!mk_dir(dirname($dir),$mode)) return false;
// return @mkdir($dir,$mode);
//}
// **************************************************************
/**
* 打印输出数据到文件
* @param type $data 需要打印的数据
* @param type $replace 是否要替换打印
* @param string $pathname 打印输出文件位置
* @author Anyon Zou <cxphp@qq.com>
*/
function p2f($data, $replace = false, $pathname = NULL) {
is_null($pathname) && $pathname = RUNTIME_PATH . date('Ymd') . '_print.txt';
$model = $replace ? FILE_APPEND : FILE_USE_INCLUDE_PATH;
if (is_array($data)) {
file_put_contents($pathname, print_r($data, TRUE), $model);
} else {
file_put_contents($pathname, $data, $model);
}
}
/**
* 处理插件钩子
* @param string $hook 钩子名称
* @param mixed $params 传入参数
* @return void
* @author Anyon Zou <cxphp@qq.com>
*/
function hook($hook, $params = array()) {
\Think\Hook::listen($hook, $params);
}
/**
* 简单对称加密算法之加密
* @param String $string 需要加密的字串
* @param String $skey 加密EKY
* @return String 加密后的字符串
* @author Anyon Zou <cxphp@qq.com>
*/
function encode($string = '', $skey = 'ThinkCMF') {
$skey = str_split(base64_encode($skey));
$strArr = str_split(base64_encode($string));
$strCount = count($strArr);
foreach ($skey as $key => $value) {
$key < $strCount && $strArr[$key].=$value;
}
return str_replace('=', 'ThinkCMF', join('', $strArr));
}
/**
* 简单对称加密算法之解密
* @param String $string 需要解密的字串
* @param String $skey 解密KEY
* @return String 解密后的字符串
* @author Anyon Zou <cxphp@qq.com>
*/
function decode($string = '', $skey = 'ThinkCMF') {
$skey = str_split(base64_encode($skey));
$strArr = str_split(str_replace('ThinkCMF', '=', $string), 2);
$strCount = count($strArr);
foreach ($skey as $key => $value) {
if ($key < $strCount && $strArr[$key][1] === $value) {
$strArr[$key] = $strArr[$key][0];
} else {
break;
}
}
return base64_decode(join('', $strArr));
}
/**********************************************************************************************************/
/**
* 快速时间格式生成
* @param type $time 时间载
* @param type $format 时间格式
* @return type 格式化后的时间
*/
function toDate($time = null, $format = 'Y-m-d H:i:s') {
is_null($time) && $time = time();
return date($format, $time);
}
<?php
// 应用公共文件
function xml_to_array2($xml) {
$search = '/<(\w+)\s*?(?:[^\/>]*)\s*(?:\/>|>(.*?)<\/\s*?\\1\s*?>)/s';
$array = array ();
if(preg_match_all($search, $xml, $matches)){
foreach ($matches[1] as $i => $key) {
$value = $matches[2][$i];
if(preg_match_all($search, $value, $_matches)){
$array[$key] = xml_to_array($value);
}else{
if('ITEM' == strtoupper($key)){
$array[] = html_entity_decode($value);
}else{
$array[$key] = html_entity_decode($value);
}
}
}
}
return $array;
}
function xml_to_array($xml){
$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
if(preg_match_all($reg, $xml, $matches)){
$count = count($matches[0]);
for($i = 0; $i < $count; $i++){
$subxml= $matches[2][$i];
$key = $matches[1][$i];
if(preg_match( $reg, $subxml )){
$arr[$key] = xml_to_array($subxml);
}else{
$arr[$key] = $subxml;
}
}
}
return $arr;
}
function postUrl($curlPost,$url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
$return_str = curl_exec($curl);
curl_close($curl);
return $return_str;
}
// =================================================================================
/**
* 匹配出 内容中 上传的图片的 路径
* @param string $content
* @return null
*/
function preg_match_img($content="")
{
// 正则表达式匹配 内容中的图片
preg_match_all('/src=[\"](\/Public\/Uploads\/.*[\.]((jpg)|(png)|(jpeg)|(gif)))[\"]/isU',$content,$r);
$arrimg = null;
if(count($r)>2)
{
if(count($r[1])>0)
{
$arrimg = $r[1];
}
}
return $arrimg;
/* foreach($arrimg as $k=>$v)
{
if(file_exists(".".$v)) {
unlinkFile("." . $v);
}
}*/
}
/**
* 匹配出图片 并删除
* @param string $content
*/
function preg_match_img_delete($content="")
{
preg_match_all('/src=[\"](\/Public\/Uploads\/.*[\.]((jpg)|(png)|(jpeg)|(gif)))[\"]/isU',$content,$r);
$arrimg = null;
if(count($r)>2)
{
if(count($r[1])>0)
{
$arrimg = $r[1];
}
}
foreach($arrimg as $k=>$v)
{
if(file_exists(".".$v)) {
unlinkFile("." . $v);
}
}
}
/**
* 采集 http https
* @param $url
* @return mixed
*/
function mycurl_collect($url) {
$curl = curl_init(); // //启动一个CURL会话 ... 创建一个新cURL资源 初始化一个新的会话,返回一个cURL句柄
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查,0表示阻止对证书的合法性的检查。---https
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);// 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:')); // --- https
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HTTPGET, 1); // curl_setopt($curl, CURLOPT_HEADER,1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //false 时 curl_exec 就直接在浏览器中上输出了
$temp = curl_exec($curl); // 抓取URL并把它传递给浏览器
curl_close($curl);
return $temp;
}
/**
* 取得IP 所在 地址区域 sina
* @param string $ip
* @return mixed
*/
function getIPtoarea_sina($ip = '') {
$url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=" . $ip;
$json = mycurl_collect($url);
$json = json_decode($json, true);
return $json;
}
/**
* 取得IP 所在 地址区域 taobao
* @param string $ip
* @return mixed
*/
function getIPtoarea_taobao($ip = "") {
$url = "http://ip.taobao.com/service/getIpInfo.php?ip=" . $ip;
$json = mycurl_collect($url);
$json = json_decode($json, true);
return $json;
}
/* * 取得外网IP
* @return string
*/
function getIP_wide_area() {
$url = "http://1212.ip138.com/ic.asp";
$r = mycurl_collect($url);
$r = iconv('gb2312', 'utf-8', $r);
preg_match_all('/[\[]([\d]{1,3}[.][\d]{1,3}[.][\d]{1,3}[.][\d]{1,3})[\]]/is', $r, $r2);
if (isset($r2[1][0])) {
return $r2[1][0];
}
return '';
}
/**
* 返回当前域名
* @return mixed
*/
function getServerName() {
// echo $_SERVER['SERVER_NAME']." -- ". $_SERVER['HTTP_HOST'];
return $_SERVER['HTTP_HOST'];
}
/**
* 生成随机数和字母
* @param $len
* @param null $chars
* @return string
*/
function getRandomString($len, $chars = null) {
if (is_null($chars)) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
}
mt_srand(10000000 * (double) microtime());
for ($i = 0, $str = '', $lc = strlen($chars) - 1; $i < $len; $i++) {
$str .= $chars[mt_rand(0, $lc)];
}
return $str;
}
// 验证 QQ
function isQQ($str) {
if (!preg_match('/^[1-9][0-9]{4,14}$/is', $str)) {
return false;
}
return true;
}
function isEmail($email)
{
if(!preg_match('/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/',$email))
{
return false;
}
return true;
}
function isPhone($phone)
{
if (!preg_match('/^1[3|4|5|8][0-9]\d{4,8}$/', $phone)) {
return false ;
}
return true ;
}
function isTel($tel)
{
if(!preg_match('/^((([\(]\d{3,4}[\)])|(\d{3,4}))(-)?)?\d{7,14}$/',$tel))
{
return false;
}
return true;
}
/**
* @param $arrnormkey 验证的键名数组
* @param $arrparameter 被验证的 数组
*/
function parameterComplete($arrnormkey , $arrparameter)
{
$b = true;
foreach($arrnormkey as $k=>$v )
{
if(!array_key_exists($v,$arrparameter))
{
$b=false;
}
else
{
unset($arrparameter[$v]);//
}
}
if(count($arrparameter)>0)
{ // 存在非法参数
$b = false ;
}
return $b ;
}
/**
* @param $where 条件数组
* @param $startTime 开始时间
* @param $endTime 结束时间
* @param $field 时间字段
*/
function CreateWhereTime(&$where,$startTime,$endTime,$field)
{
$startTime = setTimeStart($startTime);
$endTime = setTimeEnd($endTime);
if($startTime!="")
{
$where[$field] = array('EGT',$startTime);
}
if($endTime!="")
{
$where[$field] = array('ELT',$endTime);
}
if($startTime!="" && $endTime!="")
{
$where[$field] = array('between',array($startTime,$endTime));
}
}
/**
* 2015-06-27
* 过滤需要以外的字段
* @param array $data 原数据,二维数组
* @param array $allowed 被允许的字段
* @return array
*/
function LimitFields($data=array(),$allowed=array())
{
if(!is_array($data) || !is_array($allowed))
{
return array();
}
$newarray = array();
foreach($allowed as $k=>$v)
{
if(isset($data[$v]))
{
$newarray[$v] = trim($data[$v]);
}
else
{
$newarray[$v]="";
}
}
return $newarray ;
}
/**
* 2015-07-08
* 取得访问的 Marking 标识 组成部分(当前模块名 ,当前控制器名 ,当前操作名)
* @return string
*/
function myGetMarking()
{//AaaBbbCcc
// return ucfirst( strtolower( MODULE_NAME)) . ucfirst(strtolower(CONTROLLER_NAME)) . ucfirst(strtolower(ACTION_NAME)) ;
return ucfirst( strtolower( request()->module())) . ucfirst(strtolower(request()->controller())) . ucfirst(strtolower(request()->action())) ;
}
/**
* 2015-07-23
* 取得访问的 Marking 标识 组成部分(当前模块名 ,当前控制器名 ,无当前操作名)
* @return string
*/
function GetMarking2()
{
return ucfirst( strtolower( request()->module())) . ucfirst(strtolower(request()->controller())) ;
}
/**
* 2015-07-14
* 传入 类名 和 方法名 创建 Marking 标识
* @param $className
* @param $functionName
*/
function myCreatMarking($className,$functionName='')
{
return ucfirst(strtolower(request()->module())) . ucfirst(strtolower($className)) . ucfirst(strtolower($functionName));
}
/**
* 2015-07-18
* 取得 当前 模块 控制 方法 组成的路由 url
* @param array $arr
* @return string
*/
function getUrlmvc()
{
$str = '/'. request()->module().'/' . request()->controller().'/' . request()->action().'/' ;
return $str ;
}
/**
* 2015-07-08 后台 用
* @param $status 状态码(ok = 200, error = 300, timeout = 301)
* @param $message 信息
* @param int $isclose 0 否(false) ,1 是(true)
* @param string $refreshType 要刷新的类型 tabid , dialogid ,divid ReFreshType::
* @param string $refreshID 要刷新的 ID
* @param string $forwardurl 跳转到某个url。
* @param string $forwardConfirm 跳转url前的确认提示信息。
*/
function myThrowMessage($status,$message,$isclose=0,$refreshType='',$refreshID='',$forwardurl='',$forwardConfirm='')
{
$arr = array("statusCode"=>$status,"message"=>$message,"closeCurrent"=>$isclose);
if(trim($forwardurl)!='')
{
$arr['forward']=$forwardurl;
}
if(trim($forwardConfirm)!='')
{
$arr['forwardConfirm']=$forwardConfirm;
}
if($refreshType!='' && $refreshID!='')
{
$arr["$refreshType"]=$refreshID;
}
echo json_encode($arr);
exit();
}
/** 2015-07-18
* 从多少条开始读取
* @param int $page 读取第多少页的数据
* @param int $pageSize 每页大小
* @return int
*/
function setLimitStart($page=1,$pageSize=0)
{
if($page<1){ $page =1;}
if($pageSize==0)
{
$pageSize = \Home\Common\ReadConfig::getPageSize();
}
return ($page-1)*$pageSize;
}
/**
* 2015-07-20
* 生成 【开始时间】 格式不对时返回 空
* @param $strTime
* @return int|string
*/
function setTimeStart($strTime)
{
if( preg_match('/[\d]{4}[-][\d]{2}[-][\d]{2}/ism',$strTime,$t)==true)
{
return strtotime($t[0]." 00:00:00");
}
else{ return '';}
}
/**
* 2015-07-20
* 生成 【结束时间】 格式不对时返回 空
* @param $strTime
* @return int|string
*/
function setTimeEnd($strTime)
{
if( preg_match('/[\d]{4}[-][\d]{2}[-][\d]{2}/ism',$strTime,$t)==true)
{
return strtotime($t[0]." 23:59:59");
}
else{ return '';}
}
/**
*2015-07-22
* 验证是不是 整数
* @param $str
* @return bool
*/
function reg_IsInt($str)
{
if(preg_match('/^[\d]{1,}$/',$str))
{
return true;
}return false ;
}
/**
* 打印后退出
* @param $arr
*/
function pp($arr="")
{
echo "<pre>";
print_r($arr);
echo "</pre>";
exit();
}
/**
* 打印不退出
* @param $arr
*/
function pp2($arr)
{
echo "<pre>";
print_r($arr);
echo "</pre>";
}
/**
* 判断是不是 手机
* @return bool
*/
function ismobile() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
return true;
//此条摘自TPM智能切换模板引擎,适合TPM开发
if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
return true;
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset ($_SERVER['HTTP_VIA']))
//找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false;
//判断手机发送的***端标志,兼容性有待提高
if (isset ($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array(
'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile'
);
//从HTTP_USER_AGENT中查找手机浏览器的关键字
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
return true;
}
}
//协议法,因为有可能不准确,放到最后判断
if (isset ($_SERVER['HTTP_ACCEPT'])) {
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
return true;
}
}
return false;
}
/**
* 删除文件
*
* @param string $aimUrl
* @return boolean
*/
/*function unlinkFile($aimUrl) {
if (file_exists($aimUrl)) {
unlink($aimUrl);
return true;
} else {
return false;
}
}*/
/**
* 建立文件夹
*
* @param string $aimUrl
* @return viod
*/
/*function createDir($aimUrl)
{
$aimUrl = str_replace('', '/', $aimUrl);
$aimDir = '';
$arr = explode('/', $aimUrl);
$result = true;
foreach ($arr as $str) {
$aimDir .= $str . '/';
if (!file_exists($aimDir)) {
$result = mkdir($aimDir);
}
}
return $result;
}*/
/******************************************************************************/
/**
* 列表 生成结束
*/
function chtmlend()
{
ob_clean();//清除之前输出的 内容
echo '<htmlend>';
}
/**
* 写入文件
* @param type $file
* @param type $content
*/
function write_file($file,$content)
{
if(!file_exists($file))
{
createFile($file);
}
$fp = fopen($file, 'w+');
fwrite($fp, $content );
fclose($fp);
}
/**
* 写入缓存 php文件
* @param type $file
* @param type $content
*/
function write_php($file,$content)
{
if(!file_exists(".".$file))
{
createFile(".".$file);
}
$fp = fopen(".".$file, 'w+');
fwrite($fp,"<?php \r\n\r\n return " . var_export($content, true) ." ; " );
fclose($fp);
}
/**
* 读取缓存的 php
*/
function read_php($file)
{
return include_once '.'.$file;
}
/******* ------ 以下 文件操作 ------- ******/
/**
* 读取文件列表
* @param type $dir 目录
* @param type $extension 文件扩展名
* @param type $maxnum 取多读取多少个
* @return string
*/
function getFile($dir,$extension=".",$maxnum=100)
{
$fileArray[]=NULL;
if (false != ($handle = opendir ( $dir ))) {
$i=0;
while ( false !== ($file = readdir ( $handle )) ) {
//去掉"“.”、“..”以及带“.xxx”后缀的文件
if ($file != "." && $file != ".."&&strpos($file,$extension))
{
$fileArray[$i]=$file;
if($i>$maxnum){
break;
}
$i++;
}
}
//关闭句柄
closedir ( $handle );
}
return $fileArray;
}
/**
* 建立文件夹
*
* @param string $aimUrl
* @return viod
*/
function createDir($aimUrl) {
$aimUrl = str_replace('', '/', $aimUrl);
$aimDir = '';
$arr = explode('/', $aimUrl);
$result = true;
foreach ($arr as $str) {
$aimDir .= $str . '/';
if (!file_exists($aimDir)) {
$result = mkdir($aimDir);
}
}
return $result;
}
/**
* 建立文件
*
* @param string $aimUrl
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function createFile($aimUrl, $overWrite = false) {
if (file_exists($aimUrl) && $overWrite == false) {
return false;
} elseif (file_exists($aimUrl) && $overWrite == true) {
unlinkFile($aimUrl);
}
$aimDir = dirname($aimUrl);
createDir($aimDir);
touch($aimUrl);
return true;
}
/**
* 移动文件夹
*
* @param string $oldDir
* @param string $aimDir
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function moveDir($oldDir, $aimDir, $overWrite = false) {
$aimDir = str_replace('', '/', $aimDir);
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';
$oldDir = str_replace('', '/', $oldDir);
$oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir . '/';
if (!is_dir($oldDir)) {
return false;
}
if (!file_exists($aimDir)) {
createDir($aimDir);
}
@ $dirHandle = opendir($oldDir);
if (!$dirHandle) {
return false;
}
while (false !== ($file = readdir($dirHandle))) {
if ($file == '.' || $file == '..') {
continue;
}
if (!is_dir($oldDir . $file)) {
moveFile($oldDir . $file, $aimDir . $file, $overWrite);
} else {
moveDir($oldDir . $file, $aimDir . $file, $overWrite);
}
}
closedir($dirHandle);
return rmdir($oldDir);
}
/**
* 移动文件
*
* @param string $fileUrl
* @param string $aimUrl
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function moveFile($fileUrl, $aimUrl, $overWrite = false) {
if (!file_exists($fileUrl)) {
return false;
}
if (file_exists($aimUrl) && $overWrite = false) {
return false;
} elseif (file_exists($aimUrl) && $overWrite = true) {
unlinkFile($aimUrl);
}
$aimDir = dirname($aimUrl);
createDir($aimDir);
rename($fileUrl, $aimUrl);
return true;
}
/**
* 删除文件夹
*
* @param string $aimDir
* @return boolean
*/
function unlinkDir($aimDir) {
$aimDir = str_replace('', '/', $aimDir);
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';
if (!is_dir($aimDir)) {
return false;
}
$dirHandle = opendir($aimDir);
while (false !== ($file = readdir($dirHandle))) {
if ($file == '.' || $file == '..') {
continue;
}
if (!is_dir($aimDir . $file)) {
unlinkFile($aimDir . $file);
} else {
unlinkDir($aimDir . $file);
}
}
closedir($dirHandle);
return rmdir($aimDir);
}
/**
* 删除文件
*
* @param string $aimUrl
* @return boolean
*/
function unlinkFile($aimUrl) {
if (file_exists($aimUrl)) {
unlink($aimUrl);
return true;
} else {
return false;
}
}
/**
* 复制文件夹
*
* @param string $oldDir
* @param string $aimDir
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function copyDir($oldDir, $aimDir, $overWrite = false) {
$aimDir = str_replace('', '/', $aimDir);
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';
$oldDir = str_replace('', '/', $oldDir);
$oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir . '/';
if (!is_dir($oldDir)) {
return false;
}
if (!file_exists($aimDir)) {
createDir($aimDir);
}
$dirHandle = opendir($oldDir);
while (false !== ($file = readdir($dirHandle))) {
if ($file == '.' || $file == '..') {
continue;
}
if (!is_dir($oldDir . $file)) {
copyFile($oldDir . $file, $aimDir . $file, $overWrite);
} else {
copyDir($oldDir . $file, $aimDir . $file, $overWrite);
}
}
return closedir($dirHandle);
}
/**
* 复制文件
*
* @param string $fileUrl
* @param string $aimUrl
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function copyFile($fileUrl, $aimUrl, $overWrite = false) {
if (!file_exists($fileUrl)) {
return false;
}
if (file_exists($aimUrl) && $overWrite == false) {
return false;
} elseif (file_exists($aimUrl) && $overWrite == true) {
unlinkFile($aimUrl);
}
$aimDir = dirname($aimUrl);
createDir($aimDir);
copy($fileUrl, $aimUrl);
return true;
}
/**
* 循环创建目录
* @param type $dir
* @param type $mode
* @return boolean
*/
//function mk_dir($dir, $mode = 0755)
//{
// if (is_dir($dir) || @mkdir($dir,$mode)) return true;
// if (!mk_dir(dirname($dir),$mode)) return false;
// return @mkdir($dir,$mode);
//}
// **************************************************************
/**
* 打印输出数据到文件
* @param type $data 需要打印的数据
* @param type $replace 是否要替换打印
* @param string $pathname 打印输出文件位置
* @author Anyon Zou <cxphp@qq.com>
*/
function p2f($data, $replace = false, $pathname = NULL) {
is_null($pathname) && $pathname = RUNTIME_PATH . date('Ymd') . '_print.txt';
$model = $replace ? FILE_APPEND : FILE_USE_INCLUDE_PATH;
if (is_array($data)) {
file_put_contents($pathname, print_r($data, TRUE), $model);
} else {
file_put_contents($pathname, $data, $model);
}
}
/**
* 处理插件钩子
* @param string $hook 钩子名称
* @param mixed $params 传入参数
* @return void
* @author Anyon Zou <cxphp@qq.com>
*/
function hook($hook, $params = array()) {
\Think\Hook::listen($hook, $params);
}
/**
* 简单对称加密算法之加密
* @param String $string 需要加密的字串
* @param String $skey 加密EKY
* @return String 加密后的字符串
* @author Anyon Zou <cxphp@qq.com>
*/
function encode($string = '', $skey = 'ThinkCMF') {
$skey = str_split(base64_encode($skey));
$strArr = str_split(base64_encode($string));
$strCount = count($strArr);
foreach ($skey as $key => $value) {
$key < $strCount && $strArr[$key].=$value;
}
return str_replace('=', 'ThinkCMF', join('', $strArr));
}
/**
* 简单对称加密算法之解密
* @param String $string 需要解密的字串
* @param String $skey 解密KEY
* @return String 解密后的字符串
* @author Anyon Zou <cxphp@qq.com>
*/
function decode($string = '', $skey = 'ThinkCMF') {
$skey = str_split(base64_encode($skey));
$strArr = str_split(str_replace('ThinkCMF', '=', $string), 2);
$strCount = count($strArr);
foreach ($skey as $key => $value) {
if ($key < $strCount && $strArr[$key][1] === $value) {
$strArr[$key] = $strArr[$key][0];
} else {
break;
}
}
return base64_decode(join('', $strArr));
}
/**********************************************************************************************************/
/**
* 快速时间格式生成
* @param type $time 时间载
* @param type $format 时间格式
* @return type 格式化后的时间
*/
function toDate($time = null, $format = 'Y-m-d H:i:s') {
is_null($time) && $time = time();
return date($format, $time);
}