php自己常用的函数

//日志
function glogs($logName, $log) {
	global $onlineip;
	$file = logs_file_path . $logName . '.log';

	$hd = fopen ( $file, 'a+' );
	$log = date ( 'Ymd H:i:s', time () ) . '    ' . $onlineip . '    ' . $log . "\n";
	fwrite ( $hd, $log );
	fclose ( $hd );
}



//调试
phptestCount=0;


function phptest($p,$file="",$line=0)
{
var_dump($p);
echo "测试文件路径:".$file."行号:".$line."  时间:".microtime();

exit();
}




 

function phptest($p, $varName="",  $exit=false)
{
	static  $phptestCount=0;
	$phptestCount++;
	$arr=debug_backtrace();//获取调试信息,技巧:获取第1个数组成员
	//var_dump($arr);
	$file=$arr[0]['file'];
	$line=$arr[0]['line'];
	echo "序号: <span style='color:red'>".$phptestCount." </span> 时间:".microtime()." 测试文件路径:<span style='color:red'>".$file." </span>  行号:<span style='color:red'>".$line."</span><br/>";
	if(!empty($varName))
       	{
            		echo " 变量名:$varName <br/>";
        	}
        	var_dump($p);
        	echo "<br/> ";
        	if(is_bool($exit) && $exit)
        	{
        	 	die();
        	}

}

  

function printTData2($db,$pre,$tablename,$fields='',$key='',$orderby='',$limit=''){

	$fl='';
	if(!empty($fields)){
		foreach ($fields as $key=>$val){
				$fl .= ($key==0 ? '':',').$val;
		}
	}
	$fl = $fl==''? " * ":' '.$fl.' ';

	$where = "";
	if(!empty($key)){
		if(is_array($key)){
			foreach($key as $k=>$v){
				$where .= $where==""? " WHERE " : " AND ";
				$where .= "$k='$v'";
			}
		}
	}

	$limit = $limit=='' ? ' ':" LIMIT $limit";

	$orderby = empty($orderby)?"":" ORDER BY $orderby DESC ";

	$sql = "SELECT $fl FROM {$pre}{$tablename} ".$where." ".$orderby." ".$limit ;
	//exit($sql);
	$query = $db->query($sql);

	$rs_list = array();
	while ($rs = $db->fetch_array($query)){
		$rs_list[] = $rs;
	}
	printphptest('', $rs_list);
}

//页面路径
function selfURL(){
	//$_SERVER["REQUEST_URI"] 只有 apache 才支持,
	//因此需要下面的判断来解决通用问题
	if (isset($_SERVER['REQUEST_URI']))
    {
        $serverrequri = $_SERVER['REQUEST_URI']; 
    }
    else
    {
        if (isset($_SERVER['argv']))
        {
            $serverrequri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0];
        }
        else if(isset($_SERVER['QUERY_STRING']))
        {
            $serverrequri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING'];
        }
    }
    $s = empty($_SERVER["HTTPS"]) ? '' : (($_SERVER["HTTPS"] == "on") ? "s" : "");
	
    $protocol =  strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos($_SERVER["SERVER_PROTOCOL"],"/"))).$s;
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$serverrequri;   
}

/**
 * 字符串解密加密
 *
 * @param string $string  原文或者加密后的密文
 * @param string $operation 默认DECODE 为解密,其他加密
 * @param string $key  密钥
 * @param  int $expiry 加密有效期 0为永不过期  单位秒
 * @return string 加密的密文 或者解密的原文
 */
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {

	$ckey_length = 4;	// 随机密钥长度 取值 0-32;
				// 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
				// 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
				// 当此值为 0 时,则不产生随机密钥

	$key = md5($key ? $key : $GLOBALS['gamecard_auth_key']);//UC_KEY 为加密密钥 此为UcHome 中的代码,没有修改
	$keya = md5(substr($key, 0, 16));
	$keyb = md5(substr($key, 16, 16));
	$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

	$cryptkey = $keya.md5($keya.$keyc);
	$key_length = strlen($cryptkey);

	$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
	$string_length = strlen($string);

	$result = '';
	$box = range(0, 255);

	$rndkey = array();
	for($i = 0; $i <= 255; $i++) {
		$rndkey[$i] = ord($cryptkey[$i % $key_length]);
	}

	for($j = $i = 0; $i < 256; $i++) {
		$j = ($j + $box[$i] + $rndkey[$i]) % 256;
		$tmp = $box[$i];
		$box[$i] = $box[$j];
		$box[$j] = $tmp;
	}

	for($a = $j = $i = 0; $i < $string_length; $i++) {
		$a = ($a + 1) % 256;
		$j = ($j + $box[$a]) % 256;
		$tmp = $box[$a];
		$box[$a] = $box[$j];
		$box[$j] = $tmp;
		$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
	}

	if($operation == 'DECODE') {
		if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
			return substr($result, 26);
		} else {
			return '';
		}
	} else {
		return $keyc.str_replace('=', '', base64_encode($result));
	}
}

function  myencode($str)
{
    $str=passport_encrypt( $str, $GLOBALS['gamecard_auth_key']);
    $str=authcode($str,"ENCODE");
    return $str;
    
    
}
function  mydecode($str)
{ 
    $str=authcode( $str,"DECODE");
    $str=passport_decrypt( $str, $GLOBALS['gamecard_auth_key']);
    return $str;
}



function passport_encrypt($txt, $key) {
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
$ctr = 0;
$tmp = '';
for($i = 0;$i < strlen($txt); $i++) {
   $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
   $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
}
return base64_encode(passport_key($tmp, $key));
}

function passport_decrypt($txt, $key) {
$txt = passport_key(base64_decode($txt), $key);
$tmp = '';
for($i = 0;$i < strlen($txt); $i++) {
   $md5 = $txt[$i];
   $tmp .= $txt[++$i] ^ $md5;
}
return $tmp;
}

function passport_key($txt, $encrypt_key) {
$encrypt_key = md5($encrypt_key);
$ctr = 0;
$tmp = '';
for($i = 0; $i < strlen($txt); $i++) {
   $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
   $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
}
return $tmp;
}


/**
 * get user real ip
 *
 * @return  string
 */
function real_ip()
{
    static $realip = NULL;

    if ($realip !== NULL)
    {
        return $realip;
    }

    if (isset($_SERVER))
    {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

            foreach ($arr AS $ip)
            {
                $ip = trim($ip);

                if ($ip != 'unknown')
                {
                    $realip = $ip;

                    break;
                }
            }
        }
        elseif (isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        }
        else
        {
            if (isset($_SERVER['REMOTE_ADDR']))
            {
                $realip = $_SERVER['REMOTE_ADDR'];
            }
            else
            {
                $realip = '0.0.0.0';
            }
        }
    }
    else
    {
        if (getenv('HTTP_X_FORWARDED_FOR'))
        {
            $realip = getenv('HTTP_X_FORWARDED_FOR');
        }
        elseif (getenv('HTTP_CLIENT_IP'))
        {
            $realip = getenv('HTTP_CLIENT_IP');
        }
        else
        {
            $realip = getenv('REMOTE_ADDR');
        }
    }

    preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';

    return $realip;
}
function printphptest($varname,$var,$bool=true){
	if($bool){
		echo "</pre>
<pre>"."$varname:";
		print_r($var);
		exit();
	}
}
  php中的xml与数组间的相互转换
function array_to_xml(& $Data)
{
 $Str = "";
 foreach ($Data as $Key => $Value)
 {
  $Mark = ucfirst($Key); // 将标签的首字母转换成大写
  if(is_array($Value))
  {
   $Str .= is_numeric($Mark)? array_to_xml($Value) : "<".$Mark.">".array_to_xml($Value)."</".$Mark.">";
  }
  else
  {
   $Str .= "<".$Mark.">".$Value."</".$Mark.">";
  }
 }

 return $Str;
}

function xml_to_array($xml)
{
 if(strpos($xml, "<") !== false)
 {
  $xml = substr($xml, stripos($xml, "<"));
  $xml = substr($xml, 0, strrpos($xml, ">") + 1);
 }
 $array = (array)(simplexml_load_file($xml));
 
 foreach($array as $key=>$item)
 {
  $array[$key] = struct_to_array($item);
 }
 return $array;
}

function struct_to_array($item)
{
 if(!is_string($item))
 {
  $item = (array)$item;
  foreach($item as $key=>$val)
  {
   $item[$key] = struct_to_array($val);
  }
 }
 $item = @ is_array($item) && empty($item) ? "" : $item;
 return $item;
}

 

/**
 * 对象转数组
 * @author 佚名
 * @param object $obj
 * @return array
 */
function object_to_array($obj){
	$_arr = is_object($obj) ? get_object_vars($obj) : $obj;
	foreach ($_arr as $key => $val){
		$val = (is_array($val) || is_object($val)) ? $this->object_to_array($val) : $val;
		$arr[$key] = $val;
	}
	return $arr;
}

/**
 * 循环实现编码互转
 *
 * @param string $param(字符串,对象,或者数组),$currCharset当前编码,$toCharset期望编码
 * @return 参数类型
 */
function zhandi_iconv($param,$currCharset,$toCharset){
	if ($currCharset != $toCharset){
		if (is_string($param)){
			return iconv($currCharset, $toCharset, $param);
		}
		elseif (is_array($param)){
			foreach ($param as $key => $value){
				$param[$key] = zhandi_iconv($value);
			}
			return $param;
		}
		elseif (is_object($param)){
			foreach ($param as $key => $value){
				$param->$key = zhandi_iconv($value);
			}
			return $param;
		}
		else{
			return $param;
		}
	}
	return $param;
}


/**
 * 获得用户操作系统的换行符
 *
 * @access  public
 * @return  string
 */
function get_crlf(){
    if (stristr($_SERVER['HTTP_USER_AGENT'], 'Win')){
        $the_crlf = '\r\n';
    }
    elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'Mac')){
        $the_crlf = '\r'; // for old MAC OS
    }
    else{
        $the_crlf = '\n';
    }
 
    return $the_crlf;
}

  

 function human_time_diff( $from, $to = '' ) {
    if ( empty($to) )
        $to = time();
    $diff = (int) abs($to - $from);
    if ($diff <= 3600) {
        $mins = round($diff / 60);
        if ($mins <= 1)
            $since = '1 min';
        else
            $since = sprintf( '%s mins', $mins);
    } else if (($diff <= 86400) && ($diff > 3600)) {
        $hours = round($diff / 3600);
        if ($hours <= 1)
            $since = '1 hour';
        else
            $since = sprintf( '%s hours', $hours );
    } elseif ($diff >= 86400) {
        $days = round($diff / 86400);
        if ($days <= 1)
            $since = '1 day';
        else
            $since = sprintf( '%s days', $days );
    }
    return $since;
}

  

1024 - 腾讯财付通 1.支付成功的时候,为了保证成功率,后台还会先通知一次。 2.就是说,在浏览器回调之前,服务器已经调用了一次 3.如果你处理成功返回的页面应该包含

不然在前台也会再调用一次 4.我们都会第一次尝试在服务器上通知,如果通知没有成功或者超时或者没有标识成功,我们会通过浏览器调用。所有浏览器有可能是第一次也有可能是第二次

posted on 2011-07-14 17:21  天空尚兰  阅读(129)  评论(0)    收藏  举报

导航