分享自定义的几个PHP功能函数

最近不是在折腾论坛嘛,各种类各种函数,原创一些,从别人那儿qiang过来一些,在此分享出来,希望有朋友能用的到~

注意:部分函数可能不够完善,由此造成的漏洞风险自担~

提交过滤

function filter($text)
{
 //完全过滤注释
 $text = preg_replace('/<!--?.*-->/', '', $text);
 //完全过滤js
 $text = preg_replace('/<script?.*\/script>/', '', $text);
 //过滤危险的属性,如:过滤on事件lang js
 while (preg_match('/(<[^><]+)( lang|action|background|codebase|dynsrc|lowsrc)[^><]+/i', $text, $mat)) {
 $text = str_replace($mat[0], $mat[1], $text);
 }
 while (preg_match('/(<[^><]+)(window\.|javascript:|js:|about:|file:|document\.|vbs:|cookie)([^><]*)/i', $text, $mat)) {
 $text = str_replace($mat[0], $mat[1] . $mat[3], $text);
 }
 //过滤多余html
 $text = preg_replace('/<\/?(html|head|meta|link|base|basefont|body|bgsound|script|form|iframe|frame|frameset|applet|id|ilayer|layer|name|script|xml)[^><]*>/i', '', $text);
 //反转换
 $text = str_replace('[', '<', $text);
 $text = str_replace(']', '>', $text);
 $text = str_replace('|', '"', $text);
 return $text;
}

提交过滤2

function stripslashes_array(&$array)
{
 while (list($key, $var) = each($array)) {
 if ($key != 'argc' && $key != 'argv' && (strtoupper($key) != $key || '' . intval($key) == "$key")) {
 if (is_string($var)) {
 $array[$key] = stripslashes($var);
 }
 if (is_array($var)) {
 $array[$key] = stripslashes_array($var);
 }
 }
 }
 return $array;
}

字符串截取(这个是emlog里提出来的,其实也就是substr的增强版)

function subString($strings, $start, $length)
{
 if (function_exists('mb_substr') && function_exists('mb_strlen')) {
 $sub_str = mb_substr($strings, $start, $length, 'utf8');
 return mb_strlen($sub_str, 'utf8') < mb_strlen($strings, 'utf8') ? $sub_str . '...' : $sub_str;
 }
 $str = substr($strings, $start, $length);
 $char = 0;
 for ($i = 0; $i < strlen($str); $i++) {
 if (ord($str[$i]) >= 128)
 $char++;
 }
 $str2 = substr($strings, $start, $length + 1);
 $str3 = substr($strings, $start, $length + 2);
 if ($char % 3 == 1) {
 if ($length <= strlen($strings)) {
 $str3 = $str3 .= '...';
 }
 return $str3;
 }
 if ($char % 3 == 2) {
 if ($length <= strlen($strings)) {
 $str2 = $str2 .= '...';
 }
 return $str2;
 }
 if ($char % 3 == 0) {
 if ($length <= strlen($strings)) {
 $str = $str .= '...';
 }
 return $str;
 }
}

IP地址匿名化(最后一位替换为星号)

function AnonymousIP()
{
 $ip = GetIP();
 if ($ip == "Unknown") {
 $removed_ip = "未知用户";
 }
 if (strpos($ip, ":")) {
 $removed_ip = "IPv6用户";
 } else {
 $reg1 = '/((?:\d+\.){3})\d+/';
 $reg2 = '~(\d+)\.(\d+)\.(\d+)\.(\d+)~';
 $removed_ip = preg_replace($reg1, "\\1*", $ip);
 }
 return $removed_ip;
}

获取客户端IP地址

function GetIP()
{
 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 dencrypt($string, $isEncrypt = true, $key = "youdian")
{
 if (!isset($string{0}) || !isset($key{0})) {
 return false;
 }

 $dynKey = $isEncrypt ? hash('sha1', microtime(true)) : substr($string, 0, 40);
 $fixedKey = hash('sha1', $key);

 $dynKeyPart1 = substr($dynKey, 0, 20);
 $dynKeyPart2 = substr($dynKey, 20);
 $fixedKeyPart1 = substr($fixedKey, 0, 20);
 $fixedKeyPart2 = substr($fixedKey, 20);
 $key = hash('sha1', $dynKeyPart1 . $fixedKeyPart1 . $dynKeyPart2 . $fixedKeyPart2);

 $string = $isEncrypt ? $fixedKeyPart1 . $string . $dynKeyPart2 : (isset($string{339}) ? gzuncompress(base64_decode(substr($string, 40))) : base64_decode(substr($string, 40)));

 $n = 0;
 $result = '';
 $len = strlen($string);

 for ($n = 0; $n < $len; $n++) {
 $result .= chr(ord($string{$n}) ^ ord($key{$n % 40}));
 }
 return $isEncrypt ? $dynKey . str_replace('=', '', base64_encode($n > 299 ? gzcompress($result) : $result)) : substr($result, 20, -20);
}

检查字符串是否包含中文

function CheckChinese($string)
{
 if (preg_match("/[\x7f-\xff]/", $string)) {
 return true;
 } else {
 return false;
 }
}

隐藏文件真实路径

function FileHeaderJump($file)
{
 header('Content-Description: File Transfer');
 header('Content-Type: application/octet-stream');
 header('Content-Disposition: attachment; filename=' . basename($file));
 header('Content-Transfer-Encoding: binary');
 header('Expires: 0');
 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
 header('Pragma: public');
 header('Content-Length: ' . filesize($file));
 ob_clean();
 flush();
 readfile($file);
 exit;
}

生成随机字符串,自定义长度

function CreateRandomString($length)
{
 $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
 $password = "";
 for ($i = 0; $i < $length; $i++) {
 $password .= $chars[mt_rand(0, strlen($chars) - 1)];
 }
 return $password;
}
(0)

相关推荐

  • PHP随机生成唯一HASH值自定义函数

    网上有很多种方法获取随机唯一的HASH值,但是大同小异: 1.先获取随机的唯一字符串 2.进行MD5或者sha1算HASH值 一个项目要用到hash值,就去网上找了找,却发现PHP有一个函数能直接生成唯一字符串--uniqid(),通过使用这个函数,再加上自己生成的随机数(防止被破解),更具有唯一性且不易被猜解.主要考虑问题如下: 1.随机的效率与随机性:rand和mt_rand函数的选择,首选mt_rand,效率高,随机性好: 2.随机次数:选择5次,本来unniqid就是唯一的,加上随机的可

  • php 分库分表hash算法

    复制代码 代码如下: //分库分表算法 function calc_hash_db($u, $s = 4) { $h = sprintf("%u", crc32($u)); $h1 = intval(fmod($h, $s)); return $h1; } for($i=1;$i<100;$i++) { echo calc_hash_db($i); echo "<br>"; } function calc_hash_tbl($u, $n = 256

  • php的hash算法介绍

    Hash Table是PHP的核心,这话一点都不过分. PHP的数组,关联数组,对象属性,函数表,符号表,等等都是用HashTable来做为容器的. PHP的HashTable采用的拉链法来解决冲突, 这个自不用多说, 我今天主要关注的就是PHP的Hash算法, 和这个算法本身透露出来的一些思想. PHP的Hash采用的是目前最为普遍的DJBX33A (Daniel J. Bernstein, Times 33 with Addition), 这个算法被广泛运用与多个软件项目,Apache, P

  • 理解php Hash函数,增强密码安全

    1.声明 密码学是一个复杂的话题,我也不是这方面的专家.许多高校和研究机构在这方面都有长期的研究.在这篇文章里,我希望尽量使用简单易懂的方式向你展示一种安全存储Web程序密码的方法. 2."Hash"是做什么的? "Hash将一段数据(小数据或大数据)转换成一段相对短小的数据,如字符串或整数." 这是依靠单向hash函数来完成的.所谓单向是指很难(或者是实际上不可能)将其反转回来.一个常见的hash函数的例子是md5(),它流行于各种计算机语言和系统. 复制代码 代

  • PHP利用hash冲突漏洞进行DDoS攻击的方法分析

    本文实例分析了PHP利用hash冲突漏洞进行DDoS攻击的方法.分享给大家供大家参考.具体分析如下: 首先声明:本文内容只用于研究学习使用,请勿用于非法行为! 前面提到过最近爆出的hash表碰撞漏洞,包括java.python.php等在内的很多常用语言均未幸免,今晚咱就来实际看看它的威力. 攻击原理: 通过向目标服务器post一组精心拼凑的数组参数,到达服务端后语言底层处理接收到的数组参数时,由于该漏洞的存在造成CPU的大量消耗,最终导致服务器资源耗尽. 不用什么花哨的手法,就用PHP简单实现

  • PHP中用hash实现的数组

    PHP中使用最多的非Array莫属了,那Array是如何实现的?在PHP内部Array通过一个hashtable来实现,其中使用链接法解决hash冲突的问题,这样最坏情况下,查找Array元素的复杂度为O(N),最好则为1. 而其计算字符串hash值的方法如下,将源码摘出来以供查备: 复制代码 代码如下: static inline ulong zend_inline_hash_func(const char *arKey, uint nKeyLength) { register ulong h

  • php对文件进行hash运算的方法

    本文实例讲述了php对文件进行hash运算的方法.分享给大家供大家参考.具体如下: 这段代码非常有用,如果你下载了一个文件,网站提供了hash结果,你可以对你下载下来的文件进行hash运算,以验证下载的文件是否正确. <html> <head> <title>Hash (Check) Files</title> <style type='text/css'> #ok{color:green;} #nono{color:red;} </sty

  • php自定义hash函数实例

    本文实例讲述了php自定义hash函数实现方法.分享给大家供大家参考.具体分析如下: 这里演示php实现的一个简单hash算法,可以用来加密,不过这个函数过于简单,不能用来解密 function SimpleHash($str){ $n = 0; // The magic happens here: // I just loop trough all letters and add the // ASCII value to a integer variable. for ($c=0; $c <

  • php常用hash加密函数

    本文实例讲述了php常用hash加密函数.分享给大家供大家参考.具体分析如下: 复制代码 代码如下: $hash_list=hash_algos();  //返回注册的hash规则列表 print_r($hash_list); //显示结果 创建文件以计算哈希值:file_put_contents('example.txt', 'the quick brown fox jumped over the lazy dog.'); 输出哈希值信息: 复制代码 代码如下: echo hash_file(

  • 分享自定义的几个PHP功能函数

    最近不是在折腾论坛嘛,各种类各种函数,原创一些,从别人那儿qiang过来一些,在此分享出来,希望有朋友能用的到~ 注意:部分函数可能不够完善,由此造成的漏洞风险自担~ 提交过滤 function filter($text) { //完全过滤注释 $text = preg_replace('/<!--?.*-->/', '', $text); //完全过滤js $text = preg_replace('/<script?.*\/script>/', '', $text); //过滤

  • JS自定义功能函数实现动态添加网址参数修改网址参数值

    无论是前端开发还是后台设计,很多时候开发人员都需要获取当前或目标网址的相关信息.这个已有现成的内置对象属性可以直接调用了(下面是获取当前页面的参考代码) 复制代码 代码如下: <script type="text/javascript"> thisURL = document.URL; thisHREF = document.location.href; thisSLoc = self.location.href; thisDLoc = document.location;

  • Python实现可自定义大小的截屏功能

    本文实例讲述了Python实现可自定义大小的截屏功能.分享给大家供大家参考,具体如下: 蝈蝈这两天正忙着收拾家当去公司报道,结果做PHP的发小蛐蛐找到了他,说是想要一个可以截图工具. 大致需要做出这样的效果. 虽然已经很久不写Python代码了,但是没办法,盛情难却啊,只好硬着头皮上了. 关于这个需求,蝈蝈想了想,脑海里大概有这么几个实现的方式. ① 调用QQ的截图工具. ② 自己写一个. 这第一个嘛,应了那句老话.理想很丰满,现实很骨感.因为被集成的缘故,剖不出来是没办法用的,自认为技术还不到

  • java实现自定义时钟并实现走时功能

    本文实例为大家分享了java自定义时钟并实现走时功能的具体代码,供大家参考,具体内容如下 效果图: 很多人想要自己用代码实现一个简单的时钟,显示时间,下面是我用JAVA写的一个时钟测试类 首先,我们先定义一个Time类,里面存放我们需要的setTime方法,可以自定义设定我们想要的时分秒,toUniversal()和toStandard()两个成员方法分别对应两种时间制,24小时和12小时. public class Time {     public int hour;     public

  • php实现的三个常用加密解密功能函数示例

    本文实例讲述了php实现的三个常用加密解密功能函数.分享给大家供大家参考,具体如下: 算法一: //加密函数 function lock_url($txt,$key='www.jb51.net') { $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $nh = rand(0,64); $ch = $chars[$nh]; $mdKey = md5($key.$ch); $mdKe

  • AngularJS自定义指令实现面包屑功能完整实例

    本文实例讲述了AngularJS自定义指令实现面包屑功能.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="zh-CN" ng-app="myApp"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"

  • js实现的星星评分功能函数

    本文实例讲述了js实现的星星评分功能函数.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head&

  • python实现简单的计时器功能函数

    本文实例讲述了python实现简单的计时器功能函数.分享给大家供大家参考.具体如下: 此函数通过python实现了一个简单的计时器动能: ''' Simple Timing Function. This function prints out a message with the elapsed time from the previous call. It works with most Python 2.x platforms. The function uses a simple tric

  • Android开发实现自定义新闻加载页面功能实例

    本文实例讲述了Android开发实现自定义新闻加载页面功能.分享给大家供大家参考,具体如下: 一.概述: 1.效果演示: 2.说明:在新闻页面刚加载的时候,一般会出现五种状态 未知状态(STATE_UNKNOW).空状态(STATE_EMPTY).加载中(STATE_LOADING).错误(STATE_ERROT).成功(STATE_SUCCESS) 因为每个Detail页面都会出现,所以我们可以把他们封装成一个LoadPage的自定义view,可以复用 二.实现: 1.首先的定义三个布局,为什

  • 使用SpringBoot-JPA进行自定义保存及批量保存功能

    说明 SpringBoot版本:2.1.4.RELEASE java版本:1.8 文中所说JPA皆指spring-boot-starter-data-jpa 使用JPA保存一个Student对象 在JPA中保存一个对象,仅需要该对象,一个仓储即可. StudentDO实体类: @Getter @Setter @Entity @Table(name = "t_student") public class StudentDO { @Id @GeneratedValue(strategy =

随机推荐