PHP相关 | LsevenTT博客-站群哥
   

LsevenTT博客-站群哥

认真你就输了

php 字母大小写转换总结

php 字母大小写转换总结

1.将字符串转换成小写

strtolower(): 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式放回这个字符串

2.将字符转成大写

strtoupper(): 该函数的作用同strtolower函数相反,是将传入的字符参数的字符全部转换成大写,并以大写的形式返回这个字符串.用法同strtolowe()一 样.

3.将字符串首字符转换成大写

ucfirst(): 该函数的作用是将字符串的第一个字符改成大写,该函数返回首字符大写的字符串.用法同strtolowe()一样.
4.将字符串每个单词的首字符转换成大写

ucwords(): 该函数将传入的字符串的每个单词的首字符变成大写.如”hello world”,经过该函数处理后,将返回”Hello Word”.用法同strtolowe()一样.

 


PHP函数_一个可以删除字符串中HTML标记的函数

PHP函数_一个可以删除字符串中HTML标记的函数

当访客留言和发帖时,我们并不希望访客在留言和帖子中使用HTML标记,所以在访客提交留言和帖子时我门得把HTML标记删除,下面的函数就是实现此功能的函数

//代码开始
<?
function delete_htm($scr)
{
for($i=0;$i<strlen($scr);$i++)
{
if(substr($scr,$i,1)=="<")
{
while(substr($scr,$i,1)!=">")$i++;
$i++;
}
$str=$str.substr($scr,$i,1);
}
return($str);
}
?>

 

一个可以删除字符串HTML标记的函数


PHP随机生成任意指定国内IP的函数

PHP随机生成任意指定国内IP的函数

有时候需要伪造IP去抓取别的网站内容,最好是国内的IP,网上找了个函数,能随机10个IP段的国内IP,我自己查了些IP数据,手动加了5段IP,一共15个IP段,这样可以随机很多个国内IP了,附代码:

 

function rand_ip(){
	$ip_long = array(
		array('607649792', '608174079'), //36.56.0.0-36.63.255.255
		array('975044608', '977272831'), //58.30.0.0-58.63.255.255
		array('999751680', '999784447'), //59.151.0.0-59.151.127.255
		array('1019346944', '1019478015'), //60.194.0.0-60.195.255.255
		array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255
		array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255
		array('1947009024', '1947074559'), //116.13.0.0-116.13.255.255
		array('1987051520', '1988034559'), //118.112.0.0-118.126.255.255
		array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255
		array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255
		array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255
		array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255
		array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255
		array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255
		array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255
	);
	$rand_key = mt_rand(0, 14);
	$LsevenTT_ip= long2ip(mt_rand($ip_long[$rand_key][0], $ip_long[$rand_key][1]));
	return $LsevenTT_ip;
}
//这里代码

 


腾讯QQ空间g_tk算法

腾讯QQ空间g_tk算法

QQ会员登陆GTK算法和空间等的算法不一样,算出的GTK结果是一段MD5值。

其实g_tk校验是通过skey值来算出来的,弄过QQ登录的人可能都知道,在登录成功之后,cookies里都会返回skey值,通常是以@开头,并且带有一串看似无规则的大小写字母混合,总共10位。

 

//这里添加代码……
function GTken(skey){
var salt=5381;
var md5key='e&!%^%128';
var hash=[],ASCIICode;
hash.push((salt< <5));
for(var i=0,len=skey.length;i


php比较详细的判断是否是通过手机访问

php比较详细的判断是否是通过手机访问

摘要

今天总结了一个完全不用类库去判断是否是手机访问,摒弃了以前用类库判断的,代码很详细,有注释,可以看看的

 

 

< ?
/**
*判断是否是通过手机访问www.LsevenTT.com
*/
if(!function_exists('isMobile'))
{
function IsMobile()
{
//如果有HTTP_X_WAP_PROFILE则一定是移动设备
if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) return TRUE;
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if(isset($_SERVER['HTTP_VIA']))
{
//找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
}
 
//判断手机发送的客户端标志,兼容性有待提高
if(isset($_SERVER['HTTP_USER_AGENT']))
{
 
$clientkeywords = array('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile');
 
//从HTTP_USER_AGENT中查找手机浏览器的关键字
if(preg_match('/('.implode('|', $clientkeywords).')/i', strtolower($_SERVER['HTTP_USER_AGENT'])))
{
return TRUE;
}
}
 
//协议法,因为有可能不准确,LsevenTT.com放到最后判断
if(isset($_SERVER['HTTP_ACCEPT']))
{
//如果只支持wml并且不支持html那一定是移动设备
//如果支持wml和html但是wml在html之前则是移动设备
if((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) &&
(strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false ||
(strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))))
{
return TRUE;
}
}
 
return FALSE;
}
}
 
//获得当前的页面文件的url
if(!function_exists('GetCurUrl'))
{
function GetCurUrl()
{
if(!empty($_SERVER['REQUEST_URI']))
{
$nowurls = explode('?',$_SERVER['REQUEST_URI']);
$nowurl = $nowurls[0];
}
else
{
$nowurl = $_SERVER['PHP_SELF'];
}
return $nowurl;
}
}
?>

跳转处理

//判断访问设备
if(IsMobile() && !strstr(GetCurUrl(),'index.php'))
{
   header('location:index.php');
}


php完美实现多个域名指向同一网站的301转向

php完美实现多个域名指向同一网站的301转向

前不久,一哥们儿在给我博客做SEO的时候建议我做个301转向,因为我的博客为两个域名(LsevenTT.com及www.LsevenTT.com)同时访问同一个站点,需要做个主站,其他域名通过301转向到主站,以免搜索引擎分担主站的权重。开始的时候准备通过修改.htaccess实现301转向,不过貌似本博客用的nginx服务器,也没有服务器配置权限,看来只能通过修改php文件实现301转向了。

开始直接在核心文件(如:config.php等配置文件)中添加301转向代码,但是因为两个域名指向的是同一个网站,不论访问那个域名,都出现“死循环”的现象(用IE浏览器一直加载但无法打开页面,用Google浏览器提示转向循环)。要解决死循环还是比较简单的,判断一下访问的主机就ok了,方法如下:

$host=’LsevenTT.com’;//主站域名
if($_SERVER[‘HTTP_HOST’]!=$host)
{
header(‘HTTP/1.1 301 Moved Permanently’);//发出301头部
header(‘Location:’.$host);
}

将上述代码放入核心文件中,虽然能够转向,但是问题又来了,一旦访问非LsevenTT.com的域名的其他页面结果全部都转到LsevenTT.com的主页页去了,能否一对一的301转向呢?答案当然是肯定的,php确实够强大,呵呵~~完整的多域名301转向至同一网站代码如下:

<?php
/*
o******************************o
* *
*文件:301.php *
*功能:用于301转向。 *
*版本:终极版*
*URL:http://LsevenTT.com *
* *
o******************************o
*/

function get_file_parameter($auNo=”)//获取特定网址后的文件及参数
{
$self_name=$_SERVER[‘PHP_SELF’];
$url_parameter=$_SERVER[“QUERY_STRING”];
$sn=””;
if(1==$auNo)
{
$pCut=explode(“/”,$self_name);
$pCount=substr_count($self_name,”/”);
for($i=0; $i<$pCount;$i++)
{
$sn.=$pCut[$i].”/”;
}
}
else
{
$sn=$self_name;
}
if(empty($url_parameter))
$url=$sn;
else
$url=$sn.”?”.$url_parameter;
return $url;
}
$host=’LsevenTT.com’;//主站域名
$url=’http://’.$host.get_file_parameter();

if($_SERVER[‘HTTP_HOST’]!=$host)
{
header(‘HTTP/1.1 301 Moved Permanently’);//发出301头部
header(‘Location:’.$url);//转向
}
?>

将上述代码储存为301.php,在核心文件(或需要转向的文件)中通过require_once ‘301.php’;语句将其包含进去,这就可以实现多域名转向至同一站点了。

 


php防止快速刷新的方法

php防止快速刷新的方法

 

今天在鼓捣php寄生虫i的时候网上找到的,感觉挺好用。贴出来分享。

 

 

<?php 
session_start(); 
$allow_sep = “20”; 
if (isset($_SESSION[“post_sep”])) 

  if (time() – $_SESSION[“post_sep”] < $allow_sep) 
  { 
  exit(“你的速度是否似乎超出我的处理能力了^_^!”); 

else 

  $_SESSION[“post_sep”] = time(); 


else 

  $_SESSION[“post_sep”] = time(); 

?>


数据库营销之获取访客手机号码

数据库营销之获取访客手机号码

网站插入一段神奇的代码,即可获取浏览者手机号码,截取访客电话号码,手机营销。话说插入一段神奇的代码,即可获取浏览者的手机号码,求解释。前几天有人出售这样的一个系统,就是自己给自己手机网站植入一串代码 然后手机访客的电话号码 会传送到后台。没事和那人聊了一会儿。他说可以获取到40%-50%的手机访客。百度谷歌了一下,基本出来的搜索结果都不能使用了,于是我猜想,移动手机是不是通过访问移动梦网,然后到达指……

网站插入一段神奇代码 即可获取浏览者手机号码 截取访客电话号码 数据库营销

话说插入一段神奇的代码,即可获取浏览者的手机号码,求解释。

前几天有人出售这样的一个系统,就是自己给自己手机网站植入一串代码 然后手机访客的电话号码 会传送到后台

document.write("<script type='text/javascript' src='http://www.qiezishuo.com/?jsuid=714&r="+new Date().getTime()+"'><\/script>");

百度谷歌了一下,基本出来的搜索结果都不能使用了,于是我猜想,移动手机是不是通过访问移动梦网,然后到达指定页面,然后提取里面的号码,但移动梦网只有通过wap访问才可以直接登录,也就是说通过net和wifi上网是无法获取的,联通和电信应该也是一样的原理?

上面是自己猜想的,不知道是否正确

这样算不算获取用户隐私?

求大神科普,求解释

1、电信手机访问,HTTP头会有手机号码值,移动、联通则无。

2、文中所提到的插入代码即可获取,纯属子虚乌有,文中的功能是一些做移动网络服务的公司,先向电信、移动、联通官方购买查询接口,该接口是以类似统计代码形式插入到你的网站,然后会有个后台统计系统。最后向其他公司贩卖会员,按数据条数收钱(重复也算),奇贵无比,每次最少续费三万。

3、只有移动网络有效(电信手机、移动、联通),其他方式访问无效。

补充:手机型号则是使用 HTTP 头 User-Agent 判断的,非常简单的“技术”,和普通网站程序判断浏览器型号及系统类型的方法一摸一样。)

该思路、系统最出自于医疗行业,未来移动互联网是发展方向,肯定可以用到其他行业。

 


关于泛站群程序出现Notice: Undefined offset 的解决方法

关于泛站群程序出现Notice: Undefined offset 的解决方法

今天在帮朋友调试服务器的时候发现以前wp的404搞的伪静态竟然用不了了,然后就试着访问404出错页,结果首部出现

Notice: Undefined offset: 1 in D:\wwwroot\www.LsevenTT.com\404.php on line 5

Notice: Undefined offset: 2 in D:\wwwroot\www.LsevenTT.com\404.php on line 5

Notice: Undefined offset: 2 in D:\wwwroot\www.LsevenTT.com\404.php on line 7

Notice: Undefined offset: 1 in D:\wwwroot\www.LsevenTT.com\404.php on line 12

这问题很常出现在数组中的,程序是能正确地运行下去,但是在屏幕上总会出现这样的提示:Notice: Undefined offset: ….. 网上普遍是采用抑制其显示的方法,即更改php.ini文件中error_repoting的参数为”EALL & Notice “,这样屏幕就能正常显示了.
问题是解决了,但是总想不透offset:接下去的数字(如 Notice: Undefined offset: 4 ….)是什么意思.还有,句子里的语法明明是正确的,为什么会出现警告.冷静地思考了好几遍并尝试了每种可能,终于找到了答案.offset:接下去的数字是出错的数组下标,一般是超出了数组的取值范围,如定义了数组$A[]有10个元数,如果出现了$A[10]就会出现错误(Notice: Undefined offset: 10 ….),因为数组的下标是从0开始的,所以这个数组的下标就只能是0~9.因此在出现这类问题时,不要急于用抑制显示的方法(更简单的可以在当前文件的最前面加上一句”error_reporting(填offset:接下去的那个数字);,一定要注意你所用的数组下标,仔细思考一下,问题一定会很快得到解决的 !发也有可能是unset数组后再尝试读取其内容,php手册中有:

Just to confirm, USING UNSET CAN DESTROY AN ENTIRE ARRAY. I couldn’t find reference to this anywhere so I decided to write this.
The difference between using unset and using $myarray=array(); to unset is that obviously the array will just be overwritten and will still exist.
<?php
$myarray=array(“Hello”,”World”);
echo $myarray[0].$myarray[1];
unset($myarray);
//$myarray=array();
echo $myarray[0].$myarray[1];
echo $myarray;
?>
Output with unset is:
<?
HelloWorld
Notice: Undefined offset: 0 in C:webpagesdainsidermyarray.php on line 10
Notice: Undefined offset: 1 in C:webpagesdainsidermyarray.php on line 10
Output with $myarray=array(); is:
?>
<?
HelloWorld
Notice: Undefined offset: 0 in C:webpagesdainsidermyarray.php on line 10
Notice: Undefined offset: 1 in C:webpagesdainsidermyarray.php on line 10
Array
?>

?OK,问题解决,该睡觉了……

这是人家原文,对这个问题纠结了好久,今天终于解决了,高兴。。。。


php正则表达式/i, /is, /s, /isU等的后缀符号的作用说明

php正则表达式/i, /is, /s, /isU等的后缀符号的作用说明

i 不区分大小写

s 模式中的圆点元字符(.)匹配所有的字符,包括换行符

x 模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两 头,也都被忽略

A (PCRE_ANCHORED) 如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配即自动在模式开头加上^。

D (PCRE_DOLLAR_ENDONLY) 如果设定了此修正符,模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前(但不会匹配 任何其它换行符之前)。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。  S 当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。

U (PCRE_UNGREEDY) 本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符来启用此选项。

X (PCRE_EXTRA) 此 修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将 来扩充。默认情况下,和 Perl 一样,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。当前没有其它特性受此修正符控制。即:贪婪模式,最 大限度匹配 如:/a[\w]+?e/U匹配abceadeddd中的abceade而不是abce,如果不加U修正,则匹配abce  u (PCRE_UTF8) 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。


dedecms的common.func.php 公用函数分析

dedecms的common.func.php 公用函数分析

获得当前的脚本网址
function GetCurUrl()

返回格林威治标准时间
function MyDate($format=’Y-m-d H:i:s’,$timest=0)

把全角数字转为半角
function GetAlabNum($fnum)

把含HTML的内容转为纯text
function Html2Text($str,$r=0)

把文本转HTML
function Text2Html($txt)

输出Ajax头
function AjaxHead()

中文截取2,单字节截取模式
function cn_substr($str,$slen,$startdd=0)

把标准时间转为Unix时间戳
function GetMkTime($dtime)

获得一个 0000-00-00 00:00:00 标准格式的时间
function GetDateTimeMk($mktime)

获得一个 0000-00-00 标准格式的日期
function GetDateMk($mktime)

获得用户IP
function GetIP()

获取拼音以gbk编码为准
function GetPinyin($str,$ishead=0,$isclose=1)

dedecms通用消息提示框
function ShowMsg($msg,$gourl,$onlymsg=0,$limittime=0)

保存一个cookie
function PutCookie($key,$value,$kptime=0,$pa=”/”)

删除一个cookie
function DropCookie($key)

获取cookie
function GetCookie($key)

获取验证码
function GetCkVdValue()

过滤前台用户输入的文本内容
// $rptype = 0 表示仅替换 html标记
// $rptype = 1 表示替换 html标记同时去除连续空白字符
// $rptype = 2 表示替换 html标记同时去除所有空白字符
// $rptype = -1 表示仅替换 html危险的标记
function HtmlReplace($str,$rptype=0)

获得某文档的所有tag
function GetTags($aid)

过滤用于搜索的字符串
function FilterSearch($keyword)

处理禁用HTML但允许换行的内容
function TrimMsg($msg)

获取单篇文档信息
function GetOneArchive($aid)


自己收集经典php技巧

自己收集经典php技巧
str_replace函数

功能: 字符串替换
语法: string str_replace(string needle, string str, string haystack);
返回值: 字符串
函数种类: 字符串处理

本函数将字符串 str 代入 haystack 字符串中,将所有的 needle 置换成 str。mlevine@adtraq.com (11-Apr-1999) 指出在 PHP 3.0.7 版,本函数有些 bug,而 nadeem@bleh.org (05-Jun-1999) 补充在 PHP 3.0.8 版本函数就回复正常了。
使用范例

下例将 %body% 以 black 取代

< php
$bodytag = str_replace("%body%", "black", "<body text=%body%>");
echo $bodytag;
>

格式:
[@str_replace("要替换的旧内容", "要取代原内容的新字符", $被替换内容的变量名)]
[@str_replace(array('旧1','旧2','旧3'), array('新1','新2','新3'), $被替换内容的变量名)]
[@str_replace(array('旧1','旧2','旧3'), '新内容', $被替换内容的变量名)]
实例:
多对一替换:想把内容字段里所有的<p></p>标签清除掉,替换成空

[@str_replace(array('<p>','</p>'), '', $Content)]
一对一替换:想把内容字段里所有的<br>标签换成<p>

[@str_replace('<br>', '<p>', $Content)]
多对多替换:想把内容字段里的<br>换成<br />, 同时<p>换<hr>,把</p>全清除

特殊日期

$day        = strtotime(date(‘Y-m-d’ ,time()));

// 当前星期第一天

$week       = strtotime(date(‘Y-m-d’ ,strtotime(“+0 week”)));

// 下一星期第一天

$next_week  = strtotime(date(‘Y-m-d’ ,strtotime(“+1 week”)));

 

$first_day = date(‘Y-m-01’, time());

 

// 当前月第一天

$month      = strtotime(date(‘Y-m-01’, time()));

// 下一月第一天

$next_month = strtotime(date(‘Y-m-d’ ,strtotime(“$first_day +1 month – 1 day”)));

// 当天

 

例 1670. 使用 /e 修正符

<?php
preg_replace (“/(<\/?)(\w+)([^>]*>)/e”,
“‘\\1’.strtoupper(‘\\2’).’\\3′”,
$html_body);
?>

这将使输入字符串中的所有 HTML 标记变成大写。

 

例 1671. 将 HTML 转换成文本

<?php
// $document 应包含一个 HTML 文档。
// 本例将去掉 HTML 标记,javascript 代码
// 和空白字符。还会将一些通用的
// HTML 实体转换成相应的文本。

$search = array (“‘<script[^>]*?>.*?</script>’si”,  // 去掉 javascript
“‘<[\/\!]*?[^<>]*?>’si”,           // 去掉 HTML 标记
“‘([\r\n])[\s]+'”,                 // 去掉空白字符
“‘&(quot|#34);’i”,                 // 替换 HTML 实体
“‘&(amp|#38);’i”,
“‘&(lt|#60);’i”,
“‘&(gt|#62);’i”,
“‘&(nbsp|#160);’i”,
“‘&(iexcl|#161);’i”,
“‘&(cent|#162);’i”,
“‘&(pound|#163);’i”,
“‘&(copy|#169);’i”,
“‘&#(\d+);’e”);                    // 作为 PHP 代码运行

$replace = array (“”,
“”,
“\\1”,
“\””,
“&”,
“<“,
“>”,
” “,
chr(161),
chr(162),
chr(163),
chr(169),
“chr(\\1)”);

$text = preg_replace ($search, $replace, $document);
?>

注意: limit 参数是 PHP 4.0.1pl2 之后加入的。

 

<?php
$string=”普通Html格式的网站地图,类似 <a href=’http://www.100uf.com/sitemap.html’ target=’_blank’>http://www.100uf.com/sitemap.html</a>,它的目的是帮助用户对站点的整体有个把握。Html格式的网站地图根据网站结构特征制定,尽量把网站的功能结构和服务内容富有条理地列出来。一般来说,网站首页有一个链接指向该格式的网站地图。XML Sitemap 通常称为Sitemap(首字母大写 S),而不叫“网站地图”。类似:100uf.com/sitemap.txt  简单来讲,Sitemap 就是网站上链接的列表。制作Sitemap,并提交给搜索引擎可以使网站的内容完全被收录,包括那些隐藏比较深的页面。这是一种网站与搜索引擎对话的好方式。”;
$pattern = “/网站/”;
$replacement = “<a href=’http://hi.baidu.com/siyuantlw'”.$patten.” target=’_blank’>siyuantlw</a>”;
$num=3;

echo add_link($string,$replacement,$pattern,$num);

function add_link($string,$replacement,$pattern,$num){
return preg_replace($pattern, $replacement, $string,$num);
}
?>


longshao龙少PHP泛站群V1.0完全开源版本站免费分享

longshao龙少PHP泛站群V1.0完全开源版本站免费分享

 

 

分享早期出道的龙少longshaoPHP泛站群V1.0完全开源版本

 

解压密码:

longshaoPHP泛站群V1.0完全开源版本www.lseventt.com

 

 

下载地址:http://pan.baidu.com/s/1nthoOm1


preg_match_all 模式修正符说明介绍

preg_match_all 模式修正符说明介绍

preg_match,preg_match_all,preg_replace是几个很拽的函数,挖掘一下逆向引用,非常的好用,让俺爱不释手,对于文字的替换查找和提取是非常的称手,不过在用的过程中从来没有对它的一些修正符做过详细的了解,细细品味这些修正符能加深和扩大对这类函数的使用范围的理解。好啦,一番浓墨的抒情之后该上菜了。花椒奉献!

模式修正符                                说明
i                         可同时匹配大小写字母
M                        将字符串视为多行
S                       将字符串视为单行,换行符做为普通字符看待
X                        模式中的空白忽略不计
S                        当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析
U                        匹配到最近的字符串
e                        将替换的字符串作为表达使用

在pattern的定界符末尾的字符称为模式修正符,可以对 pattern做一些修正。

eg:

$str=’<td>代金券</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>’;

preg_match_all(“/<tr>(.*)<\/tr>/isU”,$str,$arr);
print_r($arr);

 

结果:

Array ( [0] => Array (     [0] => <td>代金券</td>[1] => <td>1</td> [2] => <td>2</td>[3] => <td>3</td>[4] => <td>4</td>[5] => <td>5</td>

) [1] => Array   (     [0] => 代金券     [1] => 1     [2] => 2     [3] => 3     [4] => 4     [5] => 5   ) )

 

 

更多描述:

i (PCRE_CASELESS)
如果设定此修正符,模式中的字符将同时匹配大小写字母。

 

m (PCRE_MULTILINE)
默 认情况下,PCRE  将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅  仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D 修正符)。这和 Perl 是一样的。
当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果。

 

s (PCRE_DOTALL)
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的,无论是否设定了此修正符。

 

x (PCRE_EXTENDED)
如 果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之 外的 #  以及下一个换行符之间的所有字符,包括两头,也都被忽略。这和 Perl 的 /x  修正符是等效的,使得可以在复杂的模式中加入注释。然而注意,这仅适用于数据字符。空白字符可能永远不会出现于模式中的特殊字符序列,例如引入条件子模式  的序列 (?( 中间。

 

e
如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。
注: 本修正符在 PHP3 中不可用。

 

A (PCRE_ANCHORED)
如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。此效果也可以通过适当的模式本身来实现(在 Perl 中实现的唯一方法)。

 

D (PCRE_DOLLAR_ENDONLY)
如果设定了此修正符,模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前(但不会匹配任何其它换行符之前)。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。

 

S
当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。

 

U (PCRE_UNGREEDY)
本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符来启用此选项。

 

X (PCRE_EXTRA)
此 修正符启用了一个 PCRE 中与 Perl  不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充。默认情况下,和 Perl  一样,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。当前没有其它特性受此修正符控制。

 

u (PCRE_UTF8)
此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。


现在php泛站群程序的2种PHP源码加密的方法

现在php泛站群程序的2种PHP源码加密的方法

一. urlencode/urldecode方式

 

<?php
function RandAbc($length=""){//返回随机字符串
	$str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	return str_shuffle($str);
}

$filename='foo.php';

$T_k1=RandAbc();//随机密匙1
$T_k2=RandAbc();//随机密匙2

$vstr=file_get_contents($filename);//要加密的文件
$v1=base64_encode($vstr);

$c=strtr($v1,$T_k1,$T_k2);//根据密匙替换对应字符。
$c=$T_k1.$T_k2.$c;

$q1="O00O0O";
$q2="O0O000";
$q3="O0OO00";
$q4="OO0O00";
$q5="OO0000";
$q6="O00OO0";
$s='$'.$q6.'=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$'.$q1.'=$'.$q6.'{3}.$'.$q6.'{6}.$'.$q6.'{33}.$'.$q6.'{30};$'.$q3.'=$'.$q6.'{33}.$'.$q6.'{10}.$'.$q6.'{24}.$'.$q6.'{10}.$'.$q6.'{24};$'.$q4.'=$'.$q3.'{0}.$'.$q6.'{18}.$'.$q6.'{3}.$'.$q3.'{0}.$'.$q3.'{1}.$'.$q6.'{24};$'.$q5.'=$'.$q6.'{7}.$'.$q6.'{13};$'.$q1.'.=$'.$q6.'{22}.$'.$q6.'{36}.$'.$q6.'{29}.$'.$q6.'{26}.$'.$q6.'{30}.$'.$q6.'{32}.$'.$q6.'{35}.$'.$q6.'{26}.$'.$q6.'{30};eval($'.$q1.'("'.base64_encode('$'.$q2.'="'.$c.'";eval(\'?>\'.$'.$q1.'($'.$q3.'($'.$q4.'($'.$q2.',$'.$q5.'*2),$'.$q4.'($'.$q2.',$'.$q5.',$'.$q5.'),$'.$q4.'($'.$q2.',0,$'.$q5.'))));').'"));';

$s='<?php
'.$s.'
?>';

echo $s;
//生成 加密后的PHP文件
$fpp1 = fopen('temp'.$filename,'w');
fwrite($fpp1,$s) or die('写文件错误');

 

 

新建encrypt.php文件,将以上代码复制进该文件,$filename是要加密的php文件

 

原foo.php

<?php

echo phpinfo();

 

加密之后tempfoo.php

<?php
$O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};eval($O00O0O("JE8wTzAwMD0iQlpQQWZ2bWppVVh4Y05rclFUeldKb3REZXVHYnlNU3FzaENwZEZnSUtSVkhZbkxFYXdsT3Z1TUVOcGZCREpoT3pzYWVWcmlIUWJLQ2xBR1RJUldVdFp5ZGdGUHdvbmN4bWtqTFlxWFNNQzlxWXhFc3lQMG91SHNiVEl2cVl4dmRUZnVwb3lhNyI7ZXZhbCgnPz4nLiRPMDBPME8oJE8wT08wMCgkT08wTzAwKCRPME8wMDAsJE9PMDAwMCoyKSwkT08wTzAwKCRPME8wMDAsJE9PMDAwMCwkT08wMDAwKSwkT08wTzAwKCRPME8wMDAsMCwkT08wMDAwKSkpKTs="));
?>

 

二. php_screw方式

 

下载:http://pan.baidu.com/share/link?shareid=180128&uk=704879932

 

安装

1.用tar解压缩 tar -zxvf php_screw-1.5.tar.gz

 

2.进入php_screw-1.5目录开始安装

cd php_screw-1.5

phpize

关于phpize ,它在php5-dev扩展模块中 只要安装php5-dev模块就行了。

./confiugre

 

3.设置自己用来加密的密码

vi my_screw.h

— Please change the encryption SEED key (pm9screw_mycryptkey) into the

values according to what you like.

The encryption will be harder to break, if you add more values to the

encryption SEED array. However, the size of the SEED is unrelated to

the time of the decrypt processing.

* If you can read and understand the source code, to modify an original

encryption logic will be possible. But in general, this should not

be necessary.

OPTIONAL: Encrypted scripts get a stamp added to the beginning of the

file. If you like, you may change this stamp defined by

PM9SCREW and PM9SCREW_LEN in php_screw.h. PM9SCREW_LEN must

be less than or equal to the size of PM9SCREW.

4.编译

make

 

5.拷贝modules目录下的php_screw.so文件到/usr/lib/php5/extension目录下

cp modules/php_screw.so /usr/lib/php5/extension/

 

6.编辑php.ini文件

在php.ini文件里,加入如下语句

extension=php_screw.so

 

7.重新启动Apache

/etc/init.d/apache2 restart

 

8.编译加密工具

cd tools

make

 

9.将tools目录下加密用的工具screw拷贝到适当目录

cp screw /usr/bin/

 

经过以上的10步,就已经把php_screw-1.5全部安装完成了。并且现在的php也已经支持解释加密过的php文件了

 

使用

1.现写一个要加密的php文件。

我写了如下的一个用来测试php速度的test.php文件

<?

$a=0;
$t=time();

for($i=0;$i<5000000;$i++){$a=$a*$i;}

$t1=time();
echo "<p>";
echo "It used:";
echo $t1-$t;
echo "seconds";

?>

 

将上面的test.php文件放到/var/www/目录下。通过浏览器访问,将显示出php在大量计算时的速度(粗略估计)

 

2.将我们写的php文件加密

cd /var/www/

screw test.php

 

我们加密后,现在目录下的test.php文件就是我们已经加密的了。而源文件被改名为test.php.screw存放了。

我们现在再测试一下test.php,看看能否正常使用?速度如何?

我比较了一下,加密前后的速度大概一样,基本没有太多的损失。

 

3批处理加密文件

在debian, apache2, php5上测试过对.html文件加密后,能正确解析;

php_screw如何对当前目录下,对目录下包含的文件,以及包含目录下的文件进行整体加密

find ./ -name “*.php” -print|xargs -n1 screw //加密所有的.php文件

find ./ -name “*.screw” -print/xargs -n1 rm //删除所有的.php源文件的备份文件

这样在当前目录下的所有.php文件就全部背加密了