PHP 项目开发中最常用的自定义函数整理

Jasper
Jasper
发布时间:2026-10-15 | 5人浏览过
原创

在 PHP 日常开发中,重复编写通用逻辑不仅效率低下,还容易引入安全漏洞。本文精选了八个高频使用的自定义函数,涵盖 HTML 特殊字符转义、数据库安全过滤、随机码生成、IP 识别、时间格式化及页面跳转等核心场景,助你构建更稳健的基础代码库。

HTML 特殊字符转义(防 XSS)

为了防止跨站脚本攻击(XSS),输出到网页的内容必须对特殊字符进行转义。以下函数实现了递归式的 HTML 实体转换,能安全处理数组类型的数据:

function d_htmlspecialchars($string) {
    if(is_array($string)) {
        foreach($string as $key => $val) {
            $string[$key] = d_htmlspecialchars($val);
        }
    } else {
        // 依次替换常见危险字符
        $string = str_replace('&', '&', $string);
        $string = str_replace('"', '"', $string);
        $string = str_replace("'", ''', $string);
        $string = str_replace('<', '&lt;', $string);
        $string = str_replace('>', '&gt;', $string);
        // 清理多余的实体编码
        $string = preg_replace('/&amp;(#\d;)/', '&\1', $string);
    }
    return $string;
}

数据库安全过滤(防 SQL 注入辅助)

虽然现代开发更推荐使用预处理语句(Prepared Statements),但在某些遗留系统或特定场景下,手动添加反斜杠转义仍有用途。该函数兼容魔术引号环境,支持强制覆盖:

function d_addslashes($string, $force = 0) {
    // 若未开启魔术引号或强制开启则执行转义
    if(!$GLOBALS['magic_quotes_gpc'] || $force) {
        if(is_array($string)) {
            foreach($string as $key => $val) $string[$key] = d_addslashes($val, $force);
        }
        else $string = addslashes($string);
    }
    return $string;
}

生成指定长度随机字符串

常用于生成 Token、验证码或临时密码。通过 mt_rand 和种子设置确保随机性,字符集包含大小写字母与数字:

function randstr($length) {
    $hash = '';
    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
    $max = strlen($chars) - 1;
    mt_srand((double)microtime() * 1000000);
    for($i = 0; $i < $length; $i++) {
        $hash .= $chars[mt_rand(0, $max)];
    }
    return $hash;
}

时间戳与日期格式转换

将 Unix 时间戳转换为人类可读的 Y-m-d H:i:s 格式,并包含基本的非法值检查:

function trans_time($timestamp){
    if($timestamp < 1) {
        echo '无效的Unix时间戳';
    } else {
        return date("Y-m-d H:i:s",$timestamp);
    }
}

获取客户端真实 IP 地址

由于用户可能经过多级代理,获取 IP 时需要按优先级检查多个 HTTP 头变量。此函数依次读取 HTTP_X_FORWARDED_FOR、HTTP_CLIENT_IP 和 REMOTE_ADDR 等环境变量:

function get_ip() {
    if ($_SERVER["HTTP_X_FORWARDED_FOR"]) 
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    else if ($_SERVER["HTTP_CLIENT_IP"]) 
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    else if ($_SERVER["REMOTE_ADDR"]) 
        $ip = $_SERVER["REMOTE_ADDR"];
    else if (getenv("HTTP_X_FORWARDED_FOR")) 
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    else if (getenv("HTTP_CLIENT_IP")) 
        $ip = getenv("HTTP_CLIENT_IP");
    else if (getenv("REMOTE_ADDR")) 
        $ip = getenv("REMOTE_ADDR");
    else 
        $ip = "Unknown";
    return $ip;
}

计算时间差

根据给定的返回类型(秒、分、时),计算当前时间与指定时间戳之间的差值。默认单位为分钟:

function timelag($old_time,$return_type='m'){
    if($old_time < 1){
        echo '无效的Unix时间戳';
    }else{
        switch($return_type){
            case 'h': $type = 3600; break;
            case 'm': $type = 60; break;
            case 's': $type = 1; break;
            default: $type = 60; break;
        }
        $dif = round( (time()-$old_time)/$type );
        return $dif;
    }
}

获取当前页面 URL 与跳转控制

包含两个辅助函数:一个用于拼接当前完整请求地址,另一个用于执行客户端重定向。重定向支持即时跳转或延迟跳转:

// 获取当前页面URL
function url_this(){
    $url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
    return "<a href='$url'>$url</a>";
}

// 跳转函数:无delay则JS跳转,有delay则Meta刷新
function url_redirect($url,$delay=''){
    if($delay == ''){
        echo "<script>window.location.href='$url'</script>";
    }else{
        echo "<meta http-equiv='refresh' content='$delay;URL=$url' />";
    }
}

以上就是 PHP 项目开发中最常用的自定义函数整理的详细内容,更多关于 PHP 基础工具函数与安全防护的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表