PHP常用函数总结

函数总结:

1、加密解密

//加密解密  
function encryptDecrypt($key, $string, $decrypt){  
    if($decrypt){  
        $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");  
        return $decrypted;  
    }else{  
        $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));  
        return $encrypted;  
    }  
}

2、生成随机字符串

//生成随机字符串
function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}

3、生成随机字符串方法二

//生成随机字符串方法二
function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    $randomString = substr(str_shuffle($str),0,$length);
    return $randomString;
}


4、获取文件扩展名

//获取文件扩展名
function getExtension($filename){
  $myext = substr($filename, strrpos($filename, '.'));
  return str_replace('.','',$myext);
}

5、获取文件大小并格式化

//获取文件大小并格式化
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]); 
	}
}

6、PHP替换标签字符

//PHP替换标签字符
function stringParser($string,$replacer){
    $result = str_replace(array_keys($replacer), array_values($replacer),$string);
    return $result;
}

7、列出目录下的文件

function listFiles($dir) {
	//打开目录
	$handle = opendir($dir);
	//阅读目录
	while (false != ($file = readdir($handle))) {
		//列出所有文件并去掉'.'和'..'
		if ($file != '.' && $file != '..') {
			//所得到的文件名是否仍然是一个目录
			if (is_dir("$dir/$file")) {
				//列出目录下的文件
				listFiles("$dir/$file");
			} else {
				//文件夹下面是文件,则直接显示
				echo "$dir/$file<br>";
			}
		}
	}
}

8、获取当前页面的url

//获取当前页面的url
function curPageURL() {
	$pageURL = 'http';
	if (!empty($_SERVER['HTTPS'])) {$pageURL .= "s";}
	$pageURL .= "://";
	if ($_SERVER["SERVER_PORT"] != "80") {
		$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
	} else {
		$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
	}
	return $pageURL;
}

9、强制下载

//强制下载
function download($filename){
    if ((isset($filename))&&(file_exists($filename))){
       header("Content-length: ".filesize($filename));
       header('Content-Type: application/octet-stream');
       header('Content-Disposition: attachment; filename="' . $filename . '"');
       readfile("$filename");
    } else {
       echo "Looks like file does not exist!";
    }
}

10、汉字截取函数

/*
 Utf-8、gb2312都支持的汉字截取函数
 cut_str(字符串, 截取长度, 开始长度, 编码);
 编码默认为 utf-8
 开始长度默认为 0
*/
function cutStr($string, $sublen, $start = 0, $code = 'UTF-8'){
    if($code == 'UTF-8'){
        $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
        preg_match_all($pa, $string, $t_string);

        if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
        return join('', array_slice($t_string[0], $start, $sublen));
    }else{
        $start = $start*2;
        $sublen = $sublen*2;
        $strlen = strlen($string);
        $tmpstr = '';

        for($i=0; $i<$strlen; $i++){
            if($i>=$start && $i<($start+$sublen)){
                if(ord(substr($string, $i, 1))>129){
                    $tmpstr.= substr($string, $i, 2);
                }else{
                    $tmpstr.= substr($string, $i, 1);
                }
            }
            if(ord(substr($string, $i, 1))>129) $i++;
        }
        if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";
        return $tmpstr;
    }
}

11、获取用户真实IP

//获取用户真实IP
function getIp() {
	if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
		$ip = getenv("HTTP_CLIENT_IP");
	else
		if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
			$ip = getenv("HTTP_X_FORWARDED_FOR");
		else
			if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
				$ip = getenv("REMOTE_ADDR");
			else
				if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
					$ip = $_SERVER['REMOTE_ADDR'];
				else
					$ip = "unknown";
	return ($ip);
}

12、防止注入

//防止注入
function injCheck($sql_str) { 
	$check = preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/', $sql_str);
	if ($check) {
		echo '非法字符!!'.$sql_str;
		exit;
	} else {
		return $sql_str;
	}
}

13、页面提示跳转

//页面提示跳转
function message($msgTitle,$message,$jumpUrl){
	$str = '<!DOCTYPE HTML>';
	$str .= '<html>';
	$str .= '<head>';
	$str .= '<meta charset="utf-8">';
	$str .= '<title>页面提示</title>';
	$str .= '<style type="text/css">';
	$str .= '*{margin:0; padding:0}a{color:#369; text-decoration:none;}a:hover{text-decoration:underline}body{height:100%; font:12px/18px Tahoma, Arial,  sans-serif; color:#424242; background:#fff}.message{width:450px; height:120px; margin:16% auto; border:1px solid #99b1c4; background:#ecf7fb}.message h3{height:28px; line-height:28px; background:#2c91c6; text-align:center; color:#fff; font-size:14px}.msg_txt{padding:10px; margin-top:8px}.msg_txt h4{line-height:26px; font-size:14px}.msg_txt h4.red{color:#f30}.msg_txt p{line-height:22px}';
	$str .= '</style>';
	$str .= '</head>';
	$str .= '<body>';
	$str .= '<div class="message">';
	$str .= '<h3>'.$msgTitle.'</h3>';
	$str .= '<div class="msg_txt">';
	$str .= '<h4 class="red">'.$message.'</h4>';
	$str .= '<p>系统将在 <span style="color:blue;font-weight:bold">3</span> 秒后自动跳转,如果不想等待,直接点击 <a href="{$jumpUrl}">这里</a> 跳转</p>';
	$str .= "<script>setTimeout('location.replace(\'".$jumpUrl."\')',2000)</script>";
	$str .= '</div>';
	$str .= '</div>';
	$str .= '</body>';
	$str .= '</html>';
	echo $str;
}


14、时间长度转换

//时间长度转换
function changeTimeType($seconds) {
	if ($seconds > 3600) {
		$hours = intval($seconds / 3600);
		$minutes = $seconds % 3600;
		$time = $hours . ":" . gmstrftime('%M:%S', $minutes);
	} else {
		$time = gmstrftime('%H:%M:%S', $seconds);
	}
	return $time;
}

15、post发送数据

function http_send_data($url,$data='',$do='post'){
	$ch = curl_init();//初始化
	curl_setopt($ch, CURLOPT_URL,$url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	if($do=='post'){
		curl_setopt($ch,CURLOPT_POST,true);
		curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
	}
	$output = curl_exec($ch);
	curl_close($ch);
	return $output;
}
 
function do_post_request($url, $data, $optional_headers = null)
  {
     $params = array('http' => array(
                  'method' => 'POST',
                  'content' => $data
               ));
     if ($optional_headers !== null) {
        $params['http']['header'] = $optional_headers;
     }
     $ctx = stream_context_create($params);
     $fp = @fopen($url, 'rb', false, $ctx);
     if (!$fp) {
        throw new Exception("Problem with $url, $php_errormsg");
     }
     $response = @stream_get_contents($fp);
     if ($response === false) {
        throw new Exception("Problem reading data from $url, $php_errormsg");
     }
     return $response;
  }

16、CURL获取数据

function curl_file_get_contents($durl){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $durl);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r = curl_exec($ch);
curl_close($ch);
return $r;
}

 

17、根据地球两点经纬度计算距离的两个函数

//根据两个经纬度数据判断两点距离
function GetDistance($lat_a, $lng_a, $lat_b, $lng_b) {
    //R是地球半径(米)
    $R = 6378137;
    $pk = doubleval(180 / 3.1415926535898);
    
    $a1 = doubleval($lat_a / $pk);
    $a2 = doubleval($lng_a / $pk);
    $b1 = doubleval($lat_b / $pk);
    $b2 = doubleval($lng_b / $pk);

    $t1 = doubleval(cos($a1) * cos($a2) * cos($b1) * cos($b2));
    $t2 = doubleval(cos($a1) * sin($a2) * cos($b1) * sin($b2));
    $t3 = doubleval(sin($a1) * sin($b1));
    $tt = doubleval(acos($t1 + $t2 + $t3));
    $s=round($R * $tt);
    if($s>=3000) $s=(string)($s/1000).'公里'; else $s=$s.'米';
  	return $s;
}
/**
 * 根据起点坐标和终点坐标测距离
 * @param  [array]   $from     [起点坐标(经纬度),例如:array(118.012951,36.810024)]
 * @param  [array]   $to     [终点坐标(经纬度)]
 * @param  [bool]    $km        是否以公里为单位 false:米 true:公里(千米)
 * @param  [int]     $decimal   精度 保留小数位数
 * @return [string]  距离数值
 */
function get_distance($from,$to,$km=true,$decimal=2){
    sort($from);
    sort($to);
    $EARTH_RADIUS = 6370.996; // 地球半径系数
    
    $distance = $EARTH_RADIUS*2*asin(sqrt(pow(sin( ($from[0]*pi()/180-$to[0]*pi()/180)/2),2)+cos($from[0]*pi()/180)*cos($to[0]*pi()/180)* pow(sin( ($from[1]*pi()/180-$to[1]*pi()/180)/2),2)))*1000;
    
    if($km){
        $distance = $distance / 1000;
    }
 
    return round($distance, $decimal);
}

 
	function getDistance($lat1, $lng1, $lat2, $lng2)  {
		$earthRadius = 6367000; 
		$lat1 = ($lat1 * pi() ) / 180;  
		$lng1 = ($lng1 * pi() ) / 180;    
		$lat2 = ($lat2 * pi() ) / 180;  
		$lng2 = ($lng2 * pi() ) / 180;     
		$calcLongitude = $lng2 - $lng1;  
		$calcLatitude = $lat2 - $lat1;  
		$stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);  
		$stepTwo = 2 * asin(min(1, sqrt($stepOne)));  
		$calculatedDistance = $earthRadius * $stepTwo;    
		return round($calculatedDistance);  
	}

 

18、获取当前环境下php所有扩展及函数

$ext_info = array();
$loaded_extensions = get_loaded_extensions(); //获取已加载的扩展
foreach ($loaded_extensions as $ext) {
	$funs = get_extension_funcs($ext); //获取某一扩展下的所有函数
	if (!empty($funs) && is_array($funs)) {
		foreach ($funs as $fun) {
			$reflect = new ReflectionFunction($fun);
			$params = $reflect->getParameters(); //获取函数参数信息
			$param_str = '';
			if (!empty($params) && is_array($params)) {
				foreach ($params as $param) {
					if ($param->getName() != '') {
						$param_str .= '$' . $param->getName() . ',';
					}
				}
				$param_str = substr($param_str, 0, -1);
			}
			$ext_info[$ext][] = $fun . '(' . $param_str . ')';
		}
	}
}
echo '<pre>';
print_r($ext_info);

19、校验身份证号码是否正确

function is_idcard($id) {
	$id = strtoupper($id);
	$regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
	$arr_split = array();
	if (!preg_match($regx, $id)) {
		return false;
	}
	if (15 == strlen($id)) //检查15位
	{
		$regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";

		@preg_match($regx, $id, $arr_split);
		//检查生日日期是否正确
		$dtm_birth = "19" . $arr_split[2] . '/' . $arr_split[3] . '/' . $arr_split[4];
		if (!strtotime($dtm_birth)) {
			return false;
		} else {
			return true;
		}
	} else {
		$regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
		@preg_match($regx, $id, $arr_split);
		$dtm_birth = $arr_split[2] . '/' . $arr_split[3] . '/' . $arr_split[4];
		if (!strtotime($dtm_birth)) //检查生日日期是否正确
		{
			return false;
		} else {
			//检验18位身份证的校验码是否正确。
			//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
			$arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
			$arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
			$sign = 0;
			for ($i = 0; $i < 17; $i++) {
				$b = (int) $id{$i};
				$w = $arr_int[$i];
				$sign += $b * $w;
			}
			$n = $sign % 11;
			$val_num = $arr_ch[$n];
			if ($val_num != substr($id, 17, 1)) {
				return false;
			} else {
				return true;
			}
		}
	}

}

20、获取微信accesstoken

public function getAccessToken()
	{
		$appid = 'wx1111111123243451';
		$secret = 'afdfefefetgegegegege';
		
		$accessTokenFile = './accessToken.txt';
		if (file_exists($accessTokenFile)) {//文件存在
			$time = time();
			$tokenFileJson = file_get_contents($accessTokenFile);
			$fileArrData = json_decode($tokenFileJson,true);
			$fileExpireTime = isset($fileArrData['expireTime'])?$fileArrData['expireTime']:0;
			if ($fileExpireTime > $time) {//请求token未过期
				$accessToken = isset($fileArrData['access_token'])?$fileArrData['access_token']:'';
				return $accessToken;
			}else{
				$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;
				$jsonData = file_get_contents($url);
				$arrData = json_decode($jsonData,true);
				file_put_contents('./getToken.txt','【'.date("Y-m-d H:i:s").'】'.$jsonData.PHP_EOL,FILE_APPEND);
				if (isset($arrData['errcode'])) {
					exit($arrData['errmsg']);
				}else{
					$expireTime = time() + 5000;//过期时间
					$accessToken = isset($arrData['access_token'])?$arrData['access_token']:'';
					file_put_contents($accessTokenFile,json_encode(array('accessToken'=>$accessToken,'expireTime'=>$expireTime)));
					return $accessToken;
				}
			}
		}else{//文件不存在
			$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;
			$jsonData = file_get_contents($url);
			$arrData = json_decode($jsonData,true);
			file_put_contents('./getToken.txt','['.date("Y-m-d H:i:s").']'.$jsonData.PHP_EOL,FILE_APPEND);
			if (isset($arrData['errcode'])) {
				exit($arrData['errmsg']);
			}else{
				$expireTime = time() + 5000;//过期时间
				$accessToken = isset($arrData['access_token'])?$arrData['access_token']:'';
				file_put_contents($accessTokenFile,json_encode(array('accessToken'=>$accessToken,'expireTime'=>$expireTime)));
				return $accessToken;
			}
		}
		

		
	}
  • 21、将远程图片下载到本地

/* 
*功能:php完美实现下载远程图片保存到本地 
*参数:文件url,保存文件目录,保存文件名称,使用的下载方式 
*当保存文件名称为空时则使用远程文件原来的名称 
*/ 
function getImage($url,$save_dir='',$filename='',$type=0){ 
    if(trim($url)==''){ 
        return array('file_name'=>'','save_path'=>'','error'=>1); 
    } 
    if(trim($save_dir)==''){ 
        $save_dir='./'; 
    } 
    if(trim($filename)==''){//保存文件名 
        $ext=strrchr($url,'.'); 
        if($ext!='.gif'&&$ext!='.jpg'){ 
            return array('file_name'=>'','save_path'=>'','error'=>3); 
        } 
        $filename=time().$ext; 
    } 
    if(0!==strrpos($save_dir,'/')){ 
        $save_dir.='/'; 
    } 
    //创建保存目录 
    if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){ 
        return array('file_name'=>'','save_path'=>'','error'=>5); 
    } 
    //获取远程文件所采用的方法  
    if($type){ 
        $ch=curl_init(); 
        $timeout=5; 
        curl_setopt($ch,CURLOPT_URL,$url); 
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
        $img=curl_exec($ch); 
        curl_close($ch); 
    }else{ 
        ob_start();  
        readfile($url); 
        $img=ob_get_contents();  
        ob_end_clean();  
    } 
    //$size=strlen($img); 
    //文件大小  
    $fp2=@fopen($save_dir.$filename,'a'); 
    fwrite($fp2,$img); 
    fclose($fp2); 
    unset($img,$url); 
    return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0); 
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值