randomnum();
}
/**
* 获取地址错误
*/
function urlErr(){
//jsonp回调参数,必需
$callback = isset($_GET['callback']) ? trim($_GET['callback']) : '';
$jsonData["dataToken"]["timestamp"]="";
$jsonData["dataToken"]["token"]="";
$jsonData["dataToken"]["id"]="";
$jsonData["dataToken"]["status"]=0;
$jsonData["dataToken"]["info"]="验证失败";
$jsonData["dataInfo"]["status"]="0";
$jsonData["dataInfo"]["info"]="非法访问";
$jsonData["dataInfo"]["data"]="";
//返回格式,有回调或没有回调两种方式
if($callback){
echo $callback . '(' .json_encode($jsonData) .')'; //返回格式,回调来jsonp 必需 json 数据
}else{
echo json_encode($jsonData); //返回格式,必需 json 数据
}
}
function array_multi2single($array)
{
static $result_array=array();
foreach($array as $key=>$value)
{
if(is_array($value))
{
$this->array_multi2single($value);
}
else
$result_array[]=$value;
}
return $result_array;
}
/**
* 将多维数组转为一维数组
* @author echo
* @param array $arr
* @return array
*/
function ArrMd2Ud($arr) {
#将数值第一元素作为容器,作地址赋值。
$ar_room = &$arr[key($arr)];
#第一容器不是数组进去转呀
if (!is_array($ar_room)) {
#转为成数组
$ar_room = array($ar_room);
}
#指针下移
next($arr);
#遍历
while (list($k, $v) = each($arr)) {
#是数组就递归深挖,不是就转成数组
$v = is_array($v) ? call_user_func(__FUNCTION__, $v) : array($v);
#递归合并
$ar_room = array_merge_recursive($ar_room, $v);
#释放当前下标的数组元素
unset($arr[$k]);
}
return $ar_room;
}
/**
* 获取客户端IP地址
* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
* @param boolean $adv 是否进行高级模式获取(有可能被伪装)
* @return mixed
*/
function ip($type = 0,$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];
}
//用php从身份证中提取生日,包括15位和18位身份证
function getIDCardInfo($IDCard){
$result['error']=0;//0:未知错误,1:身份证格式错误,2:无错误
$result['flag']='';//0标示成年,1标示未成年
$result['tdate']='';//生日,格式如:2012-11-15
if(!eregi("^[1-9]([0-9a-zA-Z]{17}|[0-9a-zA-Z]{14})$",$IDCard)){
$result['error']=1;
return $result;
}else{
if(strlen($IDCard)==18){
$tyear=intval(substr($IDCard,6,4));
$tmonth=intval(substr($IDCard,10,2));
$tday=intval(substr($IDCard,12,2));
if($tyear>date("Y")||$tyear<(date("Y")-100)){
$flag=0;
}elseif($tmonth<0||$tmonth>12){
$flag=0;
}elseif($tday<0||$tday>31){
$flag=0;
}else{
$tdate=$tyear."-".$tmonth."-".$tday."";
if((time()-mktime(0,0,0,$tmonth,$tday,$tyear))>18*365*24*60*60){
$flag=0;
}else{
$flag=1;
}
}
}elseif(strlen($IDCard)==15){
$tyear=intval("19".substr($IDCard,6,2));
$tmonth=intval(substr($IDCard,8,2));
$tday=intval(substr($IDCard,10,2));
if($tyear>date("Y")||$tyear<(date("Y")-100)){
$flag=0;
}elseif($tmonth<0||$tmonth>12){
$flag=0;
}elseif($tday<0||$tday>31){
$flag=0;
}else{
$tdate=$tyear."-".$tmonth."-".$tday."";
if((time()-mktime(0,0,0,$tmonth,$tday,$tyear))>18*365*24*60*60){
$flag=0;
}else{
$flag=1;
}
}
}
}
$result['error']=2;//0:未知错误,1:身份证格式错误,2:无错误
$result['isAdult']=$flag;//0标示成年,1标示未成年
$result['birthday']=$tdate;//生日日期
return $result;
}
/**
* 发送HTTP状态
* @param integer $code 状态码
* @return void
*/
function send_http_status($code) {
static $_status = array(
// Informational 1xx
100 => 'Continue',
101 => 'Switching Protocols',
// Success 2xx
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
// Redirection 3xx
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Moved Temporarily ', // 1.1
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
// 306 is deprecated but reserved
307 => 'Temporary Redirect',
// Client Error 4xx
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Timeout',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large',
414 => 'Request-URI Too Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
// Server Error 5xx
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported',
509 => 'Bandwidth Limit Exceeded'
);
if(isset($_status[$code])) {
header('HTTP/1.1 '.$code.' '.$_status[$code]);
// 确保FastCGI模式下正常
header('Status:'.$code.' '.$_status[$code]);
}
}
function think_filter(&$value){
// TODO 其他安全过滤
// 过滤查询特殊字符
if(preg_match('/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN)$/i',$value)){
$value .= ' ';
}
}
// 不区分大小写的in_array实现
function in_array_case($value,$array){
return in_array(strtolower($value),array_map('strtolower',$array));
}
/**
* 对用户的密码进行加密
* @param $password
* @param $encrypt //传入加密串,在修改密码时做认证
* @return array/password
*/
function password($password, $encrypt='') {
$pwd = array();
$pwd['encrypt'] = $encrypt ? $encrypt : getRandChar();
$pwd['password'] = md5(md5(trim($password)).$pwd['encrypt']);
return $encrypt ? $pwd['password'] : $pwd;
}
/**
* 生成随机字符串
* @param string $lenth 长度
* @return string 字符串
*/
function randomstr($lenth = 6) {
return random($lenth, '123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ');
}
/**
* 生成随机数字串
* @param string $lenth 长度
* @return string 字符串
*/
function randomnum() {
$str = null;
$strPol = "0123456789";
$max = strlen($strPol)-1;
for($i=0;$i<6;$i++){
$str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数
}
return $str;
}
function getRandChar($length=6){
$str = null;
$strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
$max = strlen($strPol)-1;
for($i=0;$i<$length;$i++){
$str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数
}
return $str;
}
function post_check($post)
{
if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开
{
$post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
}
$post = str_replace("_", "\_", $post); // 把 '_'过滤掉
$post = str_replace("%", "\%", $post); // 把' % '过滤掉
$post = nl2br($post); // 回车转换
$post= htmlspecialchars($post); // html标记转换
return $post;
}
/**
* 发送get请求
* @param string $url 请求地址
* @param array $post_data post键值对数据
* @return string
*/
function send_get($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec($ch);
return $result;
}
/**
* 发送post请求
* @param string $url 请求地址
* @param array $post_data post键值对数据
* @return string
*/
function send_post($url, $post_data) {
$postdata = http_build_query($post_data);
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type:application/x-www-form-urlencoded',
'content' => $postdata,
'timeout' => 15 * 60 // 超时时间(单位:s)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
return $result;
}
/**
* php异步请求
* $args array[
* "host":主机
* "url":地址
* "method":方法
* "data":数据
* ]
*/
function asyn_request($args) {
$host = $args["host"] ? $args["host"] : "localhost";//主机
$method = $args["method"] == "POST" ? "POST" : "GET";//方法
$url = $args["url"] ? $args["url"] : "http://".$host ;//地址
$data = is_array($args["data"]) ? $args["data"] : array();//请求参数
$fp = @fsockopen($host,80,$errno,$errstr,30);
//错误
if(!$fp){echo"$errstr ($errno)
\n";exit;}
$qstr = http_build_query($data);//请求参数
$params.= $method == "GET" ? "GET {$url}?{$qstr} HTTP/1.1\r\n" : "POST {$url} HTTP/1.1\r\n";
$params.= "Host: ".$host."\r\n";
$params.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5\r\n";
$params.= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$params.= "Accept-Language: zh-cn,zh;q=0.5\r\n";
$params.= "Accept-Encoding: gzip,deflate\r\n";
$params.= "Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7\r\n";
$params.= "Keep-Alive: 300\r\n";
$params.= "Connection: keep-alive\r\n";
$params.= "Content-Type: application/x-www-form-urlencoded\r\n";
$params.= "Content-Length: ".strlen($qstr)."\r\n\r\n";
$params.= $method == "GET" ? null :$qstr;
//file_put_contents("C:\\http.txt",$params);
fwrite($fp, $params);
fclose($fp);
/* $args["host"] = "localhost";//主机
$args["url"] = "http://localhost/test/socket/doing.php";//异步执行的脚本
$args["method"] = "POST";//请求方式
$args["data"] = array("a"=>"中","b"=>"国");//参数
asyn_request($args);*/
}
//发送XML返回数据
function sendDataByCurl($url,$data){
//Log::posthis("QuerySchedule:req2\r\n"."*a".call_user_func(array($_ENV["commonClass"],"timestamp")));
$header[] = "Content-type: text/xml"; //定义content-type为xml,注意是数组
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_TIMEOUT,60); //定义超时3秒钟
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
//Log::posthis("QuerySchedule:req2\r\n"."*b".call_user_func(array($_ENV["commonClass"],"timestamp")));
if(curl_errno($ch)){
Log::cur_err(curl_error($ch));
}
curl_close($ch);
//Log::posthis("QuerySchedule:req2\r\n"."*c".call_user_func(array($_ENV["commonClass"],"timestamp")));
Log::posthis($url.$data);
try{
$xml = simplexml_load_string($response);
header("Content-Type: text/html; charset=UTF-8");
if($xml) {
Log::gethis($response);
} else {
Log::xmlerr($response);
}
} catch(exception $e){
Log::xmltc($e);
}
return $xml;
}
//发送XML返回数据
function sendDataByCurlStr($url,$data){
$header[] = "Content-type: text/xml"; //定义content-type为xml,注意是数组
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_TIMEOUT,60); //定义超时3秒钟
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
if(curl_errno($ch)){
Log::cur_err(curl_error($ch));
}
curl_close($ch);
Log::posthis($url.$data);
try{
$response= simplexml_load_string($response);
header("Content-Type: text/html; charset=UTF-8");
if($response) {
Log::gethis($response);
} else {
Log::xmlerr($response);
}
} catch(exception $e){
Log::xmltc($e);
}
return $response;
}
function SoapToXml($xml)
{
//api测试先关闭
$startStr=strrpos($xml,"");
$xml=substr($xml,$startStr,$endStr-$startStr);
$xml = str_replace("","",$xml);
$xml = str_replace("","",$xml);
$xml = str_replace("]]>","",$xml);
$xml = str_replace("","",$xml);
return $xml;
}
}
?>