PHP 项目开发中最常用的自定义函数整理
在 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('<', '<', $string);
$string = str_replace('>', '>', $string);
// 清理多余的实体编码
$string = preg_replace('/&(#\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 基础工具函数与安全防护的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









