此篇更新一些工作中常用的方法,每周会更新整理。
1.获取用户ip
function get_client_ip($type = 0) {
$type = $type ? 1 : 0;
$ip = 'unknown';
if ($ip !== 'unknown') return $ip[$type];
if($_SERVER['HTTP_X_REAL_IP']){//nginx 代理模式下,获取客户端真实IP
$ip=$_SERVER['HTTP_X_REAL_IP'];
}elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {//客户端的ip
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif (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['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];//浏览当前页面的用户计算机的ip地址
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}
// IP地址合法验证
$long = sprintf("%u",ip2long($ip));
$ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
return $ip[$type];
}
附:tp5自带函数获取ip
// 获取外网ip
$ip=Request::instance()->ip();
2.判断是否为手机用户
function is_mobile(){
$regex_match="/(nokia|iphone|android|motorola|^mot\-|softbank|foma|docomo|kddi|up\.browser|up\.link|";
$regex_match.="htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|";
$regex_match.="blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam\-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|";
$regex_match.="symbian|smartphone|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte\-|longcos|pantech|gionee|^sie\-|portalmmm|";
$regex_match.="jig\s browser|hiptop|^ucweb|^benq|haier|^lct|opera\s*mobi|opera\*mini|320x320|240x320|176x220";
$regex_match.=")/i";
// preg_match()方法功能为匹配字符,既第二个参数所含字符是否包含第一个参数所含字符,包含则返回1既true
return preg_match($regex_match, strtolower($_SERVER['HTTP_USER_AGENT']));
}
3.判断是微信浏览器还是外部浏览器
$ua = $_SERVER['HTTP_USER_AGENT'];
if (strpos($ua, 'MicroMessenger') == false && strpos($ua, 'Windows Phone') == false) {
// echo '普通浏览器打开';
} else {
// echo '微信打开';
}
4.以json方式 请求接口
public function postcurl($request_url,$predata_total){
// 启动一个CURL会话
$curl = curl_init();
// 设置抓取的url
curl_setopt($curl, CURLOPT_URL, $request_url);
// 设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
// 设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 超时设置
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
// 设置请求头
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE );
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $predata_total);
// 执行操作
$res = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl); // 捕抓异常
}
// 关闭CURL会话
curl_close($curl);
return $res;
}
5.array转xml
private function arrtoxml( $arr ){
if(!$arr){
return '';
}else{
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
}
6.xml转array
private function xml_to_array($xml){
if(!$xml){
return false;
}
//将XML转为array
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $data;
}
7.随机32位字符串
private function nonce_str(){
$result = '';
$str = 'QWERTYUIOPASDFGHJKLZXVBNMqwertyuioplkjhgfdsamnbvcxz';
for ($i=0;$i<31;$i++){
$result .= $str[rand(0,48)];
}
return $result;
}
8.将数组写入文件中
$path='./result.txt';//将生成的文件保存到b.txt
$fps = fopen($path,'w+');
fwrite($fps,var_export($result,true));//$result 是要保存的数组
9.数组转json 保留中文
json_encode($returnData,JSON_UNESCAPED_UNICODE);
10.不显示按钮 只保留占位作用
<a style="visibility:hidden;" class="layui-btn layui-btn-xs" lay-event="uploaderp">占位</a>
11.转换时间格式
public static function convertToDateTime($timeString) {
$formats = [
'Y-m-d H:i:s', // 格式1: 2024-06-04 00:02:12
'Y年n月j日G:i:s', // 格式2: 2024年7月22日13:02:15
'Y.m.d H:i', // 格式3: 2024.07.02 16:54
];
foreach ($formats as $format) {
$dateTime = \DateTime::createFromFormat($format, $timeString);
if ($dateTime && $dateTime->format($format) == $timeString) {
return $dateTime->format('Y-m-d H:i:s'); // 统一格式为 Y-m-d H:i:s
}
}
return false; // 无法匹配任何格式
}