PHP各种常用函数方法封装

易航
2022-07-17 / 0 评论 / 103 阅读 / 正在检测是否收录...

1、对象转数组

function ObjectToArray($data)
{
    if (is_object($data)) {
        $data = get_object_vars($data);
    }
    if (is_array($data)) {
        return array_map(__FUNCTION__, $data);
    } else {
        return $data;
    }
}

2、数组转json数据

function ArrayToJson($data, $type = true)
{
    $data = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    if ($type) {
        print_r($data);
        exit;
    } else {
        return $data;
    }
}

3、以数组的形式返回关于文件路径的信息

pathinfo(path, options);

/**
['dirname']: 目录路径
['basename']: 文件名
['extension']: 文件后缀名
['filename']: 不包含后缀的文件名
**/

// path:规定要检查的路径。

/**
options:
PATHINFO_DIRNAME - 只返回 dirname
PATHINFO_BASENAME - 只返回 basename
PATHINFO_EXTENSION - 只返回 extension
PATHINFO_FILENAME - 只返回 filename
**/

4、获取PHP代码执行后的结果

<?php
function run_code($code)
{
    $file_name = rand() . 'txt';
    $content = '<?php $text = ' . $code . ' ?>';
    file_put_contents($file_name, $content);
    include($file_name);
    unlink($file_name);
    return $text;
}
?>

5、多维数组降维

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;
}

6、字符串加密解密

/**
 * $string:需要加解密的字符串;
 * $operation:E表示加密,D表示解密;
 * $key:自定义密匙
 */
function string($string, $operation, $key = '')
{
    $key = md5($key);
    $key_length = strlen($key);
    $string = $operation == 'D' ? base64_decode($string) : substr(md5($string . $key), 0, 8) . $string;
    $string_length = strlen($string);
    $rndkey = $box = array();
    $result = '';
    for ($i = 0; $i <= 255; $i++) {
        $rndkey[$i] = ord($key[$i % $key_length]);
        $box[$i] = $i;
    }
    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 == 'D') {
        if (substr($result, 0, 8) == substr(md5(substr($result, 8) . $key), 0, 8)) {
            return substr($result, 8);
        } else {
            return '';
        }
    } else {
        return str_replace('=', '', base64_encode($result));
    }
}

7、反腾讯网址安全检测系统

/*
反腾讯网址安全检测系统
Description:屏蔽腾讯电脑管家网址安全检测
Version:2.6
Author:易航
Link:http://blog.bri6.cn
*/
if (!function_exists('real_ip')) {
    function real_ip()
    {
        $ip = $_SERVER['REMOTE_ADDR'];
        if (isset($_SERVER['HTTP_CF_CONNECTING_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CF_CONNECTING_IP'])) {
            $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
        } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) and preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
            foreach ($matches[0] as $xip) {
                if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
                    $ip = $xip;
                    break;
                }
            }
        }
        return $ip;
    }
}
if (empty($_SERVER['HTTP_REFERER'])) {
    $_SERVER['HTTP_REFERER'] = '';
}
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$http_accept = $_SERVER['HTTP_ACCEPT'];
//IP屏蔽
$iptables = '977012992~977013247|977084416~977084927|1743654912~1743655935|1949957632~1949958143|2006126336~2006127359|2111446272~2111446527|3418570752~3418578943|3419242496~3419250687|3419250688~3419275263|3682941952~3682942207|3682942464~3682942719|3682986660~3682986663|1707474944~1707606015|1709318400~1709318655|1884967642|1884967620|1893733510|1709332858|1709325774|1709342057|1709341968|1709330358|1709335492|1709327575|1709327041|1709327557|1709327573|1975065457|1902908741|1902908705|3029946827|236000818';
$remoteiplong = bindec(decbin(ip2long(real_ip())));
foreach (explode('|', $iptables) as $iprows) {
    if ($remoteiplong == $iprows) exit('欢迎使用');
    $ipbanrange = explode('~', $iprows);
    if ($remoteiplong >= $ipbanrange[0] && $remoteiplong <= $ipbanrange[1])
        exit('欢迎使用');
}
//HEADER特征屏蔽
if (!isset($http_accept) || preg_match("/manager/", strtolower($user_agent)) || isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == '' || strpos($user_agent, 'Mozilla') === false && strpos($user_agent, 'ozilla') !== false || isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'urls.tr.com') !== false || isset($_COOKIE['ASPSESSIONIDQASBQDRC']) || empty($user_agent) || strpos($user_agent, 'HUAWEI G700-U00') !== false && !isset($http_accept) || strpos($user_agent, 'iPhone OS 5_0') !== false && strpos($user_agent, 'Compatible') !== false || preg_match("/Alibaba.Security.Heimdall/", $user_agent)) {
    exit('欢迎使用');
}
if (strpos($user_agent, 'Coolpad Y82-520') !== false && $http_accept == '*/*' || strpos($user_agent, 'Mac OS X 10_12_4') !== false && $http_accept == '*/*' || strpos($user_agent, 'iPhone OS') !== false && $http_accept == '*/*' || strpos($user_agent, 'Android') !== false && $http_accept == '*/*' || strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'en') !== false && strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'zh') === false || strpos($user_agent, 'en-') !== false && strpos($user_agent, 'zh') === false) {
    exit('您当前浏览器不支持或操作系统语言设置非中文,无法访问本站!');
}
if (preg_match("/Windows NT 6.1/", $user_agent) && $http_accept == '*/*' || preg_match("/Windows NT 5.1/", $user_agent) && $http_accept == '*/*' || preg_match("/vnd.wap.wml/", $http_accept) && preg_match("/Windows NT 5.1/", $user_agent)) {
    exit('您的浏览器版本太低,请复制到其他浏览器打开!');
}
2

评论 (0)

取消