??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成网站在线观看播放,亚洲成AV人片在,国产精品亚洲综合网站http://www.tkk7.com/DreamFight/articles/270580.htmlDreamFightDreamFightThu, 14 May 2009 05:02:00 GMThttp://www.tkk7.com/DreamFight/articles/270580.htmlhttp://www.tkk7.com/DreamFight/comments/270580.htmlhttp://www.tkk7.com/DreamFight/articles/270580.html#Feedback0http://www.tkk7.com/DreamFight/comments/commentRss/270580.htmlhttp://www.tkk7.com/DreamFight/services/trackbacks/270580.html扑ֈAPACHE安装目录下的conf目录下的httpd.conf文g,其中的:
(用记事本打开,q查找DocumentRoot)
?
DocumentRoot 后面的目录改Z所需的目录即?

下面q有一?
<Directory "c:/apache/apache2/htdocs">
也要?

然后重新启动服务



DreamFight 2009-05-14 13:02 发表评论
]]>
PHP和正则表辑ּ http://www.tkk7.com/DreamFight/articles/266927.htmlDreamFightDreamFightWed, 22 Apr 2009 03:13:00 GMThttp://www.tkk7.com/DreamFight/articles/266927.htmlhttp://www.tkk7.com/DreamFight/comments/266927.htmlhttp://www.tkk7.com/DreamFight/articles/266927.html#Feedback0http://www.tkk7.com/DreamFight/comments/commentRss/266927.htmlhttp://www.tkk7.com/DreamFight/services/trackbacks/266927.html 一个正则表辑ּ是一个特定的格式化模式,可以用来扑և一个字W串在另一个字W串中的使用情况。几个编E语aQ包括Visual Basic,Perl,JavaScript和PHP都支持正则表辑ּQ希望在q篇入门指导的结束,Mitchell(作者自?可以让你在PHPE序中能应用一些基本的正则表达式。正则表辑ּ是在各种各样的程序语a中突出的古怪特征中的一U,但是׃它们看v来是很难的一个概念,所以很多开发者就把它们放C角落里,忘记了它们的存在?
让我们先来看看什么是正则表达式,Z么你要在PHPE序中用到它们?
什么是正则表达?
你对从一个不错的老的Z控制的文本编辑器中分d像BBEdit和notepad的程序,有什么看法呢Q两个都支持文本输入Q可以让你保存文本到文g中,但是现在的文本编辑器也支持其它功能,包括查找–代替工具Q这让编辑一个文本文件相当容易?
正则表达式也是相似的Q只是更好一些。正则表辑ּ可以被认Z个极光U的查找-替换工具Q让我们从痛苦中摆脱出来Q不必再写定制的数据认例子来检查电子邮件地址或者来认电话L的格式是正确的,如此{等?
ME序中最普通的函数之一是数据有效性检查,PHP捆绑了一些文本检查函敎ͼ允许我们用正则表辑ּ匚w一个字W串Q确认有一个空|有一个问P{等?
你不知道的可能是Q正则表辑ּ可以单装备吗Q当你掌握了一些正则表辑ּ?q个正则表达式可以用来告诉正则表辑ּ引擎一个字W串中我们想要匹配的部分)Q你会自问ؓ什么会把正则表辑ּ扔到角落里这么久Q^_^?
PHP有两套函敎ͼ用来处理两种cd的正则表辑ּ:Perl5兼容模式Q和Posix标准兼容模式。在q篇文章中我们将看看ereg函数Q用늅Posix标准的搜索表辑ּ工作。虽然它们ƈ没有Perl5模式那样强大Q但是一U不错的学习正则表达式的Ҏ。如果你对PHP支持的Perl5兼容正则表达式感兴趣Q可以到PHP.net|站找一些关于preg函数的细节?
PHP有六个函数来处理正则表达式,它们都把一个正则表辑ּ作ؓ它们的第一个参敎ͼ列出如下Q?
ereg: 最常用的正则表辑ּ函数, ereg 允许我们搜烦跟一个正则表辑ּ匚w的一个字W串.
ereg_replace: 允许我们搜烦跟正则表辑ּ匚w的一个字W串Qƈ用新的字W串代替所有这个表辑ּ出现的地斏V?
eregi: 和ereg几乎是一h果,不过忽略大小写?
eregi_replace: 和ereg_replace有着一L搜烦-替换功能Q不q忽略大写.
split: 允许我们搜烦和正则表辑ּ匚w的字W串Qƈ且以字符串集合的方式q回匚wl果.
spliti: split函数忽略大小写的版本.
Z么用正则表辑ּ?
如果你不断地建立不同的函数来查或者操作字W串的一部分Q现在你可能要放弃所有的q些函数Q取而代之的用正则表辑ּ。如果你对下列的问题都答“是的”Q那么你肯定要考虑使用正则表达式了Q?
你是否正在写一些定制的函数来检查表单数据(比如在电子信地址中的一个@Q一个点Q?
你是否写一些定制的函数Q在一个字W串中@环每个字W,如果q个字符匚w了一个特定特征(比如它是大写的,或者它是一个空|Q那么就替换?
除了是oZ舒服的字W串查和操作ҎQ如果没有有效率地写代码Q上q的两条也会使你的程序慢下来。你是否更們֐于用下面的代码检查一个电子信地址?
function validateEmail($email)
{
$hasAtSymbol = strpos($email, "@");
$hasDot = strpos($email, ".");
if($hasAtSymbol && $hasDot)
return true;
else
return false;
}
echo validateEmail("mitchell@devarticles.com");
?>
...
或者用下面的代码:
function validateEmail($email)
{
return ereg("^[a-zA-Z]+@[a-zA-Z]+.[a-zA-Z]+$", $email);
}
echo validateEmail("mitchell@devarticles.com");
?>
可以肯定的是Q第一个函数比较容易,而且看v来结构也不错。但是如果我们用上面的下一个版本的email地址查函C是更Ҏ吗?
上面展示的第二个函数只用了正则表辑ּQ包括了对ereg函数的一个调用。Ereg 函数q回true或者false,来声明它的字W串参数是否和正则表辑ּ相匹配?
很多~程者避开正则表达式,只因为它们(在一些情况下Q比其它的文本处理方法更慢。正则表辑ּ可能慢的原因是因为它们涉及把字符串在内存中拷贝和_脓Q因为正则表辑ּ的每一个新的部分都对应匚w一个字W串。但是,从我Ҏ则表辑ּ的经验来_除非你在文本中几百个行运行一个复杂的正则表达式,否则性能上的~陷都可以忽略不计,当把正则表达式作入数据检查工hQ也很少出现q种情况?
正则表达式语?
在你可以匚w一个字W串到正则表辑ּ之前Q你必须先徏立正则表辑ּ。开始的时候,正则表达式的语法有点古怪,表达式中的每一个短语代表某个类型的搜烦特征。下列是一些最普通的正则表达式,也都对应着一个如何用它的例?
字符串头?
搜烦一个字W串的头部,用^,例如

返?true, 但是

返?false, 因ؓhello不在字符?#8221;I say hello world”的头部?
字符串尾?
搜烦字符串尾部,?,例如Q?

返回true, 但是

返?false,因ؓbye不在字符?#8221;goodbye my friend”的尾?
L的单个字W?
搜烦L字符Q用?.),例如Q?

返回true,但是

返回false,因ؓ我们的要搜烦字符串没有包含字W。你可以用花括号随意告诉正则表达式引擎它要匹配多个单个字符。如果我只想匚w5个字W,我可以这Lereg:

上面的这D代码告诉正则表辑ּ引擎当且仅当臛_5个连l的字符出现字符串的N时返回true.我们也可以限制连l出现的字符的数目:

在上面的例子里,我们已经告诉正则表达式引擎,我们的搜索字W串来匹配表辑ּQ它在尾部必L介于1?个的”a”字符?

上面的例子将不会q回trueQ虽然有三个”a”字符在搜索字W串里,但是它们不是在字W串的尾部。如果我们把l尾字符串匹?从正则表辑ּ中去掉,那么q个字符串是匚w的?
我们也可以告诉正则表辑ּ引擎来匹配至有定数目的字W在一行,如果它们存在的,可以匚w更多?我们可以q样做:

零或多次重复字符
Z告诉正则表达式引擎一个字W可能存在,也可以重复,我们?字符。这里的两个例子都将q回true.


即ɽW二个例子不包含”t”q个字符Q但仍旧q回ture,因ؓ*表示字符可以出现Q但不是必须出现。事实上QQ何普通的字符串模式都会上面的ereg调用q回trueQ因?t'字符是可选的.
一或多ơ重复字W?
Z告诉正则表达式引擎一个字W必d在,也可以重复不止一ơ,我们?字符Q像

下面的例子也会返回true:

零或一ơ重复字W?
我们也可以告诉正则表辑ּ引擎Q一个字W必L或者只存在一ơ,或者没有。我们用?字符来做q项工作Q就?

如果我们愿意Q我们完全可以从上面的搜索字W串中删?c'Q这个表辑ּ会仍旧返回true.'?' 的意思是一?c'可以出现在搜索字W串的Q何地方,但不是必ȝ?
正则表达式语?(l?
I格字符
Z匚w一个搜索字W串中的I格字符Q我们用预定义Posix的类Q[[:space]].Ҏh明连l字W的相关性,”:space:”是实际要匚w的类Q在q种情Ş下,是Q何空白字W)。空白包括tab字符Q新行字W,I白字符。或者,如果搜烦字符串必d含只有一个空|而不是一个tab或者新行字W,你可以用一个空格字W?" ")。在大多数情况下Q我們֐于?:space:"Q因意味着我的意图不仅仅是单个I格字符Q这点很Ҏ被忽视。这里有一些Posix-标准预定义类Q?
有一些我们可以作为正则表辑ּ的部分的一些Posix-标准预定义类Q包括[:alnum:], [:digit:], [:lower:]{等?完整的列表可以在q里查看
我们可以像这样匹配单个空白字W:

我们也可以通过在表辑ּ后用?字符来告诉正则表辑ּ引擎匚w没有I白或者一个空白?

模式分组
相关的模式可以在Ҏ号里分在一赗很Ҏ用[a-z]和[A-Z]指定只有一个小写字母或者一列大写字母以搜烦字符串的一部分存在?
// 要求从第一个到最后一个都是小写字?
echo ereg("^[a-z]+$", "johndoe"); // q回true
?>
或者像
// 要求从第一个到最后一个都是大写字?
ereg("^[A-Z]+$", "JOHNDOE"); // q回 true?
?>
我们也可以告诉正则表辑ּ引擎Q我们希望或者是写字母Q或者是大写字母。我们只要把[a-z]和[A-Z]模式l合在一起就可以做到?

在上面的例子里,如果我们能匹?John Doe",而不?JohnDoe"Q将是非常有意义的。我们用下面的正则表辑ּ来做q个Q?
^[a-zA-Z]+[[:space:]]{1}[a-zA-Z]+$
很容易搜索一个数字字W串

词语分组
不仅仅搜索模式可以分l,我们也可以用圆括h相关的搜索词语进行分l?

在上面的例子中,我们有一个字W串头部字符Q紧跟着"John"或?Jane",臛_有一个其它字W,然后一个字W串N字符。所?#8230;

...也匚w我们的搜索模?
Ҏ字符的情?
因ؓ一些字W要用在一个搜索模式的明确分组或者语法上Q像?John|Jane)中的圆括P我们需要告诉正则表辑ּ引擎来屏蔽这些字W,加工它们使之成ؓ被搜索字W串的一部分Q而不是搜索表辑ּ的一部分。我们所用的ҎUCؓ“字符转义”Q涉及到Q?#8220;专用W号”加上反斜杠。所以,例如Q如果我惛_我的搜烦中包?|'Q那么我可以这样做

q里只是量的一些你要{义的字符Q你必须转义^, $, (, ), ., [, |, *, ?, +, and { ?
希望你现在对正则表达式实际上有多么强大有了一点点感觉了。现在让我们看两个用正则表达式来查数据中一个字W串的例子?
正则表达式例?
例子1
让我们把W一个例子做的相当简单,验一个标准的URL.一个标准的URL(没有端口?,有三个部分构成:
[协议]://[域名]
让我们从匚wURL的协议部分开?q且让它只能用http或者ftp.我们可以用下面的正则表达式做到这点:
^(http|ftp)
^字符Ҏ字符串的头部Q利用圆括号把http和ftp围住Q且?#8220;或?#8221;W号(|)它们分开Q我们告诉正则表辑ּ引擎http和ftp两者之一必须在字W串的开头?
一个域名通常由www.somesite.com构成Q但是可以随意选择要不要www部分。ؓ了例子简单,我们只允?com,.net,?org的域名是在考虑之中的。我们最好这样对正则表达式中的域名部分表C如下:
(www.)?.+.(com|net|org)$
把所有的东西攑֜一P我们的正则表辑ּ可以用作检查一个域名,如:
function isValidDomain($domainName)
{
return ereg("^(http|ftp)://(www.)?.+.(com|net|org)$", $domainName);
}
//?true)
echo isValidDomain("http://www.somesite.com");
//?true)
echo isValidDomain("ftp://somesite.com");
//?(false)
echo isValidDomain("ftp://www.somesite.fr");
//?(false)
echo isValidDomain("www.somesite.com");
?>
例子?
因ؓ我居住在澛_利亚悉尼Q让我们查一个典型的澛_利亚国际电话L。澳大利亚国际电话号码的格式如下Q?
+61x xxxx-xxxx
W一个x是区P其它的都是电话号码。检查以'+61'开头且紧跟一个在2?之间的区L电话LQ我们用下面的正则表辑ּQ?
^+61[2-9][[:space:]]
注意Q上面的搜烦模式?+'字符?'转义Q以便于可以在搜索中包含Q不至于被解释ؓ一个正则表辑ּ。[2-9]告诉正则表达式引擎我们需要包含一??之间的数字。[[:space:]]cd告诉正则表达式期望在q里有一个空白?
q里是电话号码剩下的搜烦模式Q?
[0-9]{4}-[0-9]{4}$
q里没有什么不d的地方,我们只是告诉正则表达式引擎电话号码可用的数字Q它必须?个数字的l合Q跟着一个连接符Q再跟着另一?个数字的l合Q然后一个字W串N字符?
把完整的正则表达式放在一P放进一个函敎ͼ我们可以用代码来查一些澳大利亚国际电话号码:
function isValidPhone($phoneNum)
{
echo ereg("^+61[2-9][[:space:]][0-9]{4}-[0-9]{4}$", $phoneNum);
}
// 真(trueQ?
echo isValidPhone("+619 0000-0000");
// 假(falseQ?
echo isValidPhone("+61 00000000");
//假( falseQ?
echo isValidPhone("+611 00000000");
?>
ȝ
正则表达式用一些不适合书写和重复的代码来检查一个字W串。在最后的几页里,我们已经讲解了所有的Posix标准正则表达式的基础Q包括字W,分组和PHP ereg函数。我们也知道了怎么用正则表辑ּ来检查一些PHP中简单的字符丌Ӏ?
译者注释:本h英文不怎么好,可能一些地Ҏ出入。本文中的字W类其实是我们所说的字符?
l典正则表达?
正则表达式用于字W串处理Q表单验证等场合Q实用高效,但用到时L不太把握Q以致往往要上|查一番。我一些常用的表达式收藏在q里Q作备忘之用。本贴随时会更新?
匚w中文字符的正则表辑ּQ?[u4e00-u9fa5]
匚w双字节字W?包括汉字在内)Q[^x00-xff]
应用Q计字W串的长度(一个双字节字符长度?QASCII字符?Q?
String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}
匚wI的正则表辑ּQn[s| ]*r
匚wHTML标记的正则表辑ּQ?<(.*)>.*|<(.*) />/
匚w首尾I格的正则表辑ּQ?^s*)|(s*$)
应用Qjavascript中没有像vbscript那样的trim函数Q我们就可以利用q个表达式来实现Q如下:
String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, "");
}
利用正则表达式分解和转换IP地址Q?
下面是利用正则表辑ּ匚wIP地址QƈIP地址转换成对应数值的JavascriptE序Q?
function IP2V(ip)
{
re=/(d+).(d+).(d+).(d+)/g //匚wIP地址的正则表辑ּ
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
不过上面的程序如果不用正则表辑ּQ而直接用split函数来分解可能更单,E序如下Q?
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是Q?+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匚wEmail地址的正则表辑ּQw+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匚w|址URL的正则表辑ּQhttp://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
利用正则表达式去除字串中重复的字W的法E序Q?
var s="abacabefgeeii"
var s1=s.replace(/(.).*1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //l果为:abcefgi
我原来在CSDN上发贴寻求一个表辑ּ来实现去除重复字W的ҎQ最l没有找刎ͼq是我能惛_的最单的实现Ҏ。思\是用后向引用取出包括重复的字符Q再以重复的字符建立W二个表辑ּQ取C重复的字W,两者串q。这个方法对于字W顺序有要求的字W串可能不适用?
得用正则表达式从URL地址中提取文件名的javascriptE序Q如下结果ؓpage1
s="http://www.9499.net/page1.htm"
s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2")
alert(s)
利用正则表达式限制网表单里的文本框输入内容Q?
用正则表辑ּ限制只能输入中文Qonkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
用正则表辑ּ限制只能输入全角字符Q?onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
用正则表辑ּ限制只能输入数字Qonkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
用正则表辑ּ限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
如何用正则表辑ּ来表CZ?
׃中文的ASCII码是有一定的范围的。所以你可以用下面的正则表达式来表示中文?
/^[chr(0xa1)-chr(0xff)]+$/
下面是一个用的例子Q?
$str = "越PHP";
if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
echo "q是一个纯中文字符?;
} else {
echo "q不是一个纯中文字串";
}
正则表达?
如果原来没有使用q正则表辑ּQ那么可能对q个术语和概念会不太熟悉。不q,它们q不是您惌的那么新奇?
请回想一下在盘上是如何查找文g的。您肯定会?? ?* 字符来帮助查找您正寻扄文g? 字符匚w文g名中的单个字W,?* 则匹配一个或多个字符。一个如 'data?.dat' 的模式可以找Cq文Ӟ
data1.dat
data2.dat
datax.dat
dataN.dat
如果使用 * 字符代替 ? 字符Q则扩大找到的文g数量?data*.dat' 可以匚w下述所有文件名Q?
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
管q种搜烦文g的方法肯定很有用Q但也十分有限? ?* 通配W的有限能力可以使你Ҏ则表辑ּ能做什么有一个概念,不过正则表达式的功能更强大,也更灉|?
--------------------------------------------------------------------------------
2
早期h
正则表达式的“先”可以一直上溯至对hcȝl系l如何工作的早期研究。Warren McCulloch ?Walter Pitts q两位神l生理学家研I出一U数学方式来描述q些经|络?
1956 q? 一位叫 Stephen Kleene 的美国数学家?McCulloch ?Pitts 早期工作的基上,发表了一标题ؓ“经|事件的表示?#8221;的论文,引入了正则表辑ּ的概c正则表辑ּ是用来描述他称?#8220;正则集的代数”的表辑ּQ因此采?#8220;正则表达?#8221;q个术语?
随后Q发现可以将q一工作应用于用Ken Thompson 的计搜索算法的一些早期研IӞKen Thompson是Unix 的主要发明h。正则表辑ּ的第一个实用应用程序就?Unix 中的qed ~辑器?
如他们所_剩下的就是众所周知的历史了。从那时L至现在正则表辑ּ都是Z文本的编辑器和搜索工具中的一个重要部分?
--------------------------------------------------------------------------------
3.
使用正则表达?
在典型的搜烦和替换操作中Q必L供要查找的确切文字。这U技术对于静态文本中的简单搜索和替换d可能_了,但是׃它缺乏灵zL,因此在搜索动态文本时有困难了,甚至是不可能的?
使用正则表达式,可以:
试字符串的某个模式。例如,可以对一个输入字W串q行试Q看在该字符串是否存在一个电话号码模式或一个信用卡L模式。这UCؓ数据有效性验证?
替换文本。可以在文档中用一个正则表辑ּ来标识特定文字,然后可以全部其删除Q或者替换ؓ别的文字?
Ҏ模式匚w从字W串中提取一个子字符丌Ӏ可以用来在文本或输入字D中查找特定文字?
例如Q如果需要搜索整?web 站点来删除某些过时的材料q替换某些HTML 格式化标讎ͼ则可以用正则表辑ּҎ个文件进行测试,看在该文件中是否存在所要查扄材料?HTML 格式化标记。用q个ҎQ就可以受影响的文件范围羃到包含要删除或更改的材料的那些文g。然后可以用正则表辑ּ来删除过时的材料Q最后,可以再次使用正则表达式来查找q替换那些需要替换的标记?
另一个说明正则表辑ּ非常有用的示例是一U其字符串处理能力还不ؓ人所知的语言。VBScript ?Visual Basic 的一个子集,h丰富的字W串处理功能。与 C cM?Visual Basic Scripting Edition 则没有这一能力。正则表辑ּl?Visual Basic Scripting Edition 的字W串处理能力带来了明显改善。不q,可能q是?VBScript 中用正则表辑ּ的效率更高,它允许在单个表达式中执行多个字符串操作?
--------------------------------------------------------------------------------
正则表达式语?
一个正则表辑ּ是由普通字W(例如字符 a ?zQ以及特D字W(UCؓ元字W)l成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符丌Ӏ正则表辑ּ作ؓ一个模板,某个字W模式与所搜烦的字W串q行匚w?
q里有一些可能会遇到的正则表辑ּCZQ?
Visual Basic Scripting Edition VBScript 匚w
/^[ t]*$/ "^[ t]*$" 匚w一个空白行?
/d{2}-d{5}/ "d{2}-d{5}" 验证一个ID L是否׃?位数字,一个连字符以及一?位数字组成?
/<(.*)>.*/ "<(.*)>.*" 匚w一?HTML 标记?
下表是元字符及其在正则表辑ּ上下文中的行为的一个完整列表:
字符 描述
下一个字W标Cؓ一个特D字W、或一个原义字W、或一?后向引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?n' 匚w一个换行符。序?'' 匚w "" ?"(" 则匹?"("?
^ 匚w输入字符串的开始位|。如果设|了 RegExp 对象?Multiline 属性,^ 也匹?'n' ?'r' 之后的位|?
$ 匚w输入字符串的l束位置。如果设|了RegExp 对象?Multiline 属性,$ 也匹?'n' ?'r' 之前的位|?
* 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及 "zoo"?* {h于{0,}?
+ 匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" 以及 "zoo"Q但不能匚w "z"? {h?{1,}?
? 匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?"does" 中的"do" ? {h?{0,1}?
{n} n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?
{n,} n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h?'o+'?o{0,}' 则等价于 'o*'?
{n,m} m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ。刘Q?"o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h?'o?'。请注意在逗号和两个数之间不能有空根{?
? 当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦的字W串。例如,对于字符?"oooo"Q?o+?' 匹配单?"o"Q?'o+' 匹配所?'o'?
. 匚w?"n" 之外的Q何单个字W。要匚w包括 'n' 在内的Q何字W,请用象 '[.n]' 的模式?
(pattern) 匚wpattern q获取这一匚w。所获取的匹配可以从产生?Matches 集合得到Q在VBScript 中?SubMatches 集合Q在Visual Basic Scripting Edition 中则使用 $0…$9 属性。要匚w圆括号字W,请?'(' ?')'?
(?:pattern) 匚w pattern 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?"? 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 是一个比 'industry|industries' 更简略的表达式?
(?=pattern) 正向预查Q在M匚w pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹?"Windows 2000" 中的 "Windows" Q但不能匚w "Windows 3.1" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开始?
(?!pattern) 负向预查Q在M不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例?Windows (?!95|98|NT|2000)' 能匹?"Windows 3.1" 中的 "Windows"Q但不能匚w "Windows 2000" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开?
x|y 匚w x ?y。例如,'z|food' 能匹?"z" ?"food"?(z|f)ood' 则匹?"zood" ?"food"?
[xyz] 字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以匚w "plain" 中的 'a'?
[^xyz] 负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以匚w "plain" 中的'p'?
[a-z] 字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以匚w 'a' ?'z' 范围内的L写字母字符?
[^a-z] 负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,'[^a-z]' 可以匚wM不在 'a' ?'z' 范围内的L字符?
b 匚w一个单词边界,也就是指单词和空格间的位|。例如, 'erb' 可以匚w"never" 中的 'er'Q但不能匚w "verb" 中的 'er'?
B 匚w非单词边界?erB' 能匹?"verb" 中的 'er'Q但不能匚w "never" 中的 'er'?
cx 匚w由x指明的控制字W。例如, cM 匚w一?Control-M 或回车符?x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 'c' 字符?
d 匚w一个数字字W。等价于 [0-9]?
D 匚w一个非数字字符。等价于 [^0-9]?
f 匚w一个换늬。等价于 x0c ?cL?
n 匚w一个换行符。等价于 x0a ?cJ?
r 匚w一个回车符。等价于 x0d ?cM?
s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ fnrtv]?
S 匚wM非空白字W。等价于 [^ fnrtv]?
t 匚w一个制表符。等价于 x09 ?cI?
v 匚w一个垂直制表符。等价于 x0b ?cK?
w 匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?
W 匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?
xn 匚w nQ其?n 为十六进制{义倹{十六进制{义值必Mؓ定的两个数字长。例如, 'x41' 匚w "A"?x041' 则等价于 'x04' & "1"。正则表辑ּ中可以?ASCII ~码?
num 匚w numQ其?num 是一个正整数。对所获取的匹配的引用。例如,'(.)1' 匚w两个q箋的相同字W?
n 标识一个八q制转义值或一个后向引用。如?n 之前臛_ n 个获取的子表辑ּQ则 n 为后向引用。否则,如果 n 为八q制数字 (0-7)Q则 n Z个八q制转义倹{?
nm 标识一个八q制转义值或一个后向引用。如?nm 之前臛_有is preceded by at least nm 个获取得子表辑ּQ则 nm 为后向引用。如?nm 之前臛_?n 个获取,?n Z个后跟文?m 的后向引用。如果前面的条g都不满Q若 n ?m 均ؓ八进制数?(0-7)Q则 nm 匹配八q制转义?nm?
nml 如果 n 为八q制数字 (0-3)Q且 m ?l 均ؓ八进制数?(0-7)Q则匚w八进制{义?nml?
un 匚w nQ其?n 是一个用四个十六q制数字表示?Unicode 字符。例如, u00A9 匚w版权W号 (?)?
4.
建立正则表达?
构造正则表辑ּ的方法和创徏数学表达式的Ҏ一栗也是用多U元字符与操作符小的表辑ּl合在一h创徏更大的表辑ּ?
可以通过在一对分隔符之间攑օ表达式模式的各种lg来构造一个正则表辑ּ。对 Visual Basic Scripting Edition 而言Q分隔符ZҎ斜杠 (/) 字符。例如:
/expression/
?VBScript 而言Q则采用一对引?("") 来确定正则表辑ּ的边界。例如:
"expression"
在上面所C的两个CZ中,正则表达式模?(expression) 均存储在RegExp 对象的Pattern 属性中?
正则表达式的lg可以是单个的字符、字W集合、字W范围、字W间的选择或者所有这些组件的Ll合?
--------------------------------------------------------------------------------
5.
优先权顺?
在构造正则表辑ּ之后Q就可以象数学表辑ּ一h求|也就是说Q可以从左至叛_ƈ按照一个优先权序来求倹{?
下表从最高优先到最低优先列出各种正则表达式操作符的优先权序Q?
操作W?描述
转义W?
(), (?, (?=), [] 圆括号和Ҏ?
*, +, ?, {n}, {n,}, {n,m} 限定W?
^, $, anymetacharacter 位置和顺?
| “?#8221;操作
--------------------------------------------------------------------------------
6.
普通字W?
普通字W由所有那些未昑ּ指定为元字符的打印和非打印字W组成。这包括所有的大写和小写字母字W,所有数字,所有标点符号以及一些符受?
最单的正则表达式是一个单独的普通字W,可以匚w所搜烦字符串中的该字符本n。例如,单字W模?'A' 可以匚w所搜烦字符串中M位置出现的字?'A'。这里有一些单字符正则表达式模式的CZQ?
/a/
/7/
/M/
{h?VBScript 单字W正则表辑ּ为:
"a"
"7"
"M"
可以多个单字符l合在一起得C个较大的表达式。例如,下面?Visual Basic Scripting Edition 正则表达式不是别的,是通过l合单字W表辑ּ 'a'?7'以及 'M' 所创徏出来的一个表辑ּ?
/a7M/
{h?VBScript 表达式ؓQ?
"a7M"
h意这里没有连接操作符。所需要做的就是将一个字W放在了另一个字W后面?
--------------------------------------------------------------------------------
Ҏ字符
有不元字符在试囑֯其进行匹配时需要进行特D的处理。要匚wq些Ҏ字符Q必首先将q些字符转义Q也是在前面用一个反斜杠 ()。下表给Zq些Ҏ字符及其含义Q?
Ҏ字符 说明
$ 匚w输入字符串的l尾位置。如果设|了 RegExp 对象?Multiline 属性,?$ 也匹?'n' ?'r'。要匚w $ 字符本nQ请使用 $?
( ) 标记一个子表达式的开始和l束位置。子表达式可以获取供以后使用。要匚wq些字符Q请使用 ( ?)?
* 匚w前面的子表达式零ơ或多次。要匚w * 字符Q请使用 *?
+ 匚w前面的子表达式一ơ或多次。要匚w + 字符Q请使用 +?
. 匚w除换行符 n之外的Q何单字符。要匚w .Q请使用 ?
[ 标记一个中括号表达式的开始。要匚w [Q请使用 [?
? 匚w前面的子表达式零ơ或一ơ,或指明一个非贪婪限定W。要匚w ? 字符Q请使用 ??
下一个字W标Cؓ或特D字W、或原义字符、或后向引用、或八进制{义符。例如, 'n' 匚w字符 'n'?n' 匚w换行W。序?'' 匚w ""Q?'(' 则匹?"("?
^ 匚w输入字符串的开始位|,除非在方括号表达式中使用Q此时它表示不接受该字符集合。要匚w ^ 字符本nQ请使用 ^?
{ 标记限定W表辑ּ的开始。要匚w {Q请使用 {?
| 指明两项之间的一个选择。要匚w |Q请使用 |?br /> 本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/8627.htm

DreamFight 2009-04-22 11:13 发表评论
]]>
PHP语言中global?GLOBALS[]的分?/title><link>http://www.tkk7.com/DreamFight/articles/266422.html</link><dc:creator>DreamFight</dc:creator><author>DreamFight</author><pubDate>Sun, 19 Apr 2009 06:52:00 GMT</pubDate><guid>http://www.tkk7.com/DreamFight/articles/266422.html</guid><wfw:comment>http://www.tkk7.com/DreamFight/comments/266422.html</wfw:comment><comments>http://www.tkk7.com/DreamFight/articles/266422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/DreamFight/comments/commentRss/266422.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/DreamFight/services/trackbacks/266422.html</trackback:ping><description><![CDATA[原来以ؓglobal?GLOBALS除了写法不一样以?其他都一?可是在实际应用中发现,2者的区别q是很大?<br /> 先看下面的例? <div id="6iw4muk" class="blockcode"> <div class="ccaauga" id="code0"> <ol> <li><?php<br /> <li>// 例子1<br /> <li>function test_global() {<br /> <li> <wbr> <wbr>global $var1, $var2;<br /> <li> <wbr> <wbr>$var2 =& $var1;<br /> <li>}<br /> <li><br /> <li>function test_globals() {<br /> <li> <wbr> <wbr>$GLOBALS['var3'] =& $GLOBALS['var1'];<br /> <li>}<br /> <li><br /> <li>$var1 = 5;<br /> <li>$var2 = $var3 = 0;<br /> <li><br /> <li>test_global();<br /> <li>print $var2 ."\n";<br /> <li><br /> <li>test_globals();<br /> <li>print $var3 ."\n";<br /> <li>?> </li> </ol> </div> <em>复制代码</em></div> 执行l果? <div id="08ai88a" class="quote"> <blockquote>0<br /> 5</blockquote></div> 怎么会这样呢?不应该是2??怎么会出?????<br /> <br /> ?我们保留以上问题,深入分析$GLOBALS和global的原?<br /> <div id="64yqykc" class="quote"> <blockquote>引用php手册?GLOBALS的解?<br /> <br /> Global 变量Q?GLOBALS<br /> 注意: $GLOBALS ?PHP 3.0.0 及以后版本中适用?br /> <br /> 由所有已定义全局变量l成的数l。变量名是该数l的索引?br /> <br /> q是一?#8220;superglobal”Q或者可以描qCؓ自动全局变量?/blockquote></div> 也就是说上面代码中的<font color="#ff0000">$var1</font>?font color="#ff0000">$GLOBALS['var1']</font>是指的同一变量Q而不?个不同的变量Q?br /> <br /> 下面来分析global到底做了什么?<br /> <br /> 我们都知道php中的函数所产生的变量都是函数的U有变量Q那么global关键字生的变量也肯定逃不个规则,Z么这么说呢,看下面的代码Q? <div id="a4o8u44" class="blockcode"> <div class="qykwg4i" id="code1"> <ol> <li><?php<br /> <li>// 例子2<br /> <li>function test() {<br /> <li> <wbr> <wbr>global $a;<br /> <li> <wbr> <wbr>unset($a);<br /> <li>}<br /> <li>$a = 1;<br /> <li>test();<br /> <li>print $a;<br /> <li>?> </li> </ol> </div> <em>复制代码</em></div> 执行l果为: <div id="uieccum" class="quote"> <blockquote>1</blockquote></div> Z么会输出1呢?不是已经?alunset了吗Qunsetq了?php的bugQ?br /> <br /> 都不是,其实unset起作用了Q是把test函数中的$alunset掉了Q可以在函数后面加入 <div id="2ugesqg" class="blockcode"> <div class="goukyi4" id="code2"> <ol> <li>print $a; </li> </ol> </div> </div> <br /> 所以我们得Z个结论,在函Cglobal?GLOBALS[]的区别在于:<br /> <br /> global在函C生一个指向函数外部变量的别名变量Q而不是真正的函数外部变量Q一但改变了别名变量的指向地址Q就会发生一些意料不到情况,例如例子1.<br /> <br /> $GLOBALS[]确实实调用是外部的变量Q函数内外会始终保持一_<br /> <img src ="http://www.tkk7.com/DreamFight/aggbug/266422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/DreamFight/" target="_blank">DreamFight</a> 2009-04-19 14:52 <a href="http://www.tkk7.com/DreamFight/articles/266422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP 中cookie和session的分?/title><link>http://www.tkk7.com/DreamFight/articles/262804.html</link><dc:creator>DreamFight</dc:creator><author>DreamFight</author><pubDate>Mon, 30 Mar 2009 00:47:00 GMT</pubDate><guid>http://www.tkk7.com/DreamFight/articles/262804.html</guid><wfw:comment>http://www.tkk7.com/DreamFight/comments/262804.html</wfw:comment><comments>http://www.tkk7.com/DreamFight/articles/262804.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/DreamFight/comments/commentRss/262804.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/DreamFight/services/trackbacks/262804.html</trackback:ping><description><![CDATA[1. PHP的COOKIE <br /> cookie 是一U在q程览器端储存数据q以此来跟踪和识别用L机制?<br /> PHP在http协议的头信息里发送cookieQ因?setcookie() 函数必须在其它信息被输出到浏览器前调用,q和?header() 函数的限制类伹{?<br /> <br /> 1.1讄cookie: <br /> 可以用setcookie()或setrawcookie()函数来设|cookie。也可以通过向客L直接发送http头来讄?<br /> <br /> 1.1.1 使用setcookie()函数讄cookie: <br /> bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly]]]]]] ) name: cookie变量?value: cookie变量的?expire: 有效期结束的旉 path: 有效目录 domain: 有效域名Q顶U域唯一 secure: 如果gؓ1Q则cookie只能在httpsq接上有效,如果为默认?Q则http和https都可以?例子Q?<br /> 代码片段 <br /> <?php <br /> $value = 'something from somewhere'; <br /> setcookie("TestCookie", $value); /* 单cookie讄 */ <br /> setcookie("TestCookie", $value, time()+3600); /* 有效?个小?*/ <br /> setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1); /* 有效目录 /~rasmus,有效域名example.com及其所有子域名*/ <br /> ?> <br /> 讄多个cookie变量Qsetcookie('var[a]','value'); 用数l来表示变量Q但他的下标不用引号。这样就可以?_COOKIE[‘var’][‘a’]来读取该COOKIE变量?<br /> <br /> 1.1.2. 使用header()讄cookie; <br /> header("Set-Cookie: name=$value[;path=$path[;domain=xxx.com[;...]]"); <br /> 后面的参数和上面列出setcookie函数的参C栗?<br /> 比如Q?<br /> $value = 'something from somewhere'; <br /> header("Set-Cookie:name=$value"); <br /> <br /> 1.2 Cookie的读? <br /> 直接用php内置全局变量$_COOKIE可以读取浏览器端的cookie?上面例子中设|了cookie"TestCookie"Q现在我们来dQ?<br /> 代码片段 <br /> print $_COOKIE['TestCookie']; <br /> COOKIE是不是被输出?! <br /> <br /> 1.3 删除cookie <br /> 只需把有效时间设为小于当前时_和把D|ؓI。例如: <br /> 代码片段 <br /> setcookie("name", "", time()-1); <br /> 用header()cM?<br /> <br /> 1.4 常见问题解决: <br /> 1) 用setcookie()时有错误提示Q可能是因ؓ调用setcookie()前面有输出或I格。也可能你的文档是从其他字符集{换过来,文档后面可能带有BOM{֐(是在文件内Ҏ加一些隐藏的BOM字符)。解决的办法是使你的文档不出现q种情况。还有通过使用ob_start()函数也能处理一炏V?<br /> 2) $_COOKIE受magic_quotes_gpc影响Q可能自动{义?<br /> 3) 使用的时候,有必要测试用h否支持cookie?<br /> <br /> 1.5 cookie工作机理: <br /> 有些学习者比较冲动,没心思把原理研究Q所以我把它攑֐面?<br /> a) 服务器通过随着响应发送一个http的Set-Cookie_在客h中设|一个cookie(多个cookie要多个头)?<br /> b) 客户端自动向服务器端发送一个http的cookie_服务器接收读取?<br /> HTTP/1.x 200 OK X-Powered-By: PHP/5.2.1 <br /> Set-Cookie: TestCookie=something from somewhere; path=/ <br /> Expires: Thu, 19 Nov 2007 18:52:00 GMT <br /> Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 <br /> Pragma: no-cache <br /> Content-type: text/html <br /> q一行实Ccookie功能Q收到这行后 <br /> Set-Cookie: TestCookie=something from somewhere; path=/ <br /> 览器将在客L的磁盘上创徏一个cookie文gQƈ在里面写入: <br /> TestCookie=something from somewhere; / <br /> q一行就是我们用setcookie('TestCookie','something from somewhere','/');的结果。也是?header('Set-Cookie: TestCookie=something from somewhere; path=/');的结果?<br /> <br /> 2. PHP的SESSION <br /> session使用q期旉设ؓ0的cookieQƈ且将一个称为session ID的唯一标识W?一长串字符?Q在服务器端同步生成一些session文g(可以自己定义session的保存类?Q与用户机关联v来。web应用E序存贮与这些session相关的数据,q且让数据随着用户在页面之间传递?<br /> 讉K|站的来客会被分配一个唯一的标识符Q即所谓的SESSION ID。它要么存放在客L的cookieQ要么经?URL 传递?<br /> SESSION允许用户注册L数目的变量ƈ保留l各个请求用。当来客讉K|站ӞPHP 会自动(如果 session.auto_start 被设?1Q或在用戯求时Q由 session_start() 明确调用?session_register() 暗中调用Q检查请求中是否发送了特定的SESSION ID。如果是Q则之前保存的环境就被重建?<br /> <br /> 2.1 SESSION ID的传?<br /> <br /> 2.1.1 通过cookie传送SESSION ID <br /> 使用session_start()调用sessionQ服务器端在生成session文g的同Ӟ生成session ID哈希值和默认gؓPHPSESSID的session nameQƈ向客L发送变量ؓ(默认的是)PHPSESSID(session name)Qgؓ一?28位的哈希倹{服务器端将通过该cookie与客Lq行交互?<br /> session变量的值经php内部序列化后保存在服务器机器上的文本文g中,和客L的变量名默认情况下ؓPHPSESSID的coolieq行对应交互?<br /> x务器自动发送了http_header('Set-Cookie: session_name()=session_id(); path=/');即setcookie(session_name(),session_id()); <br /> 当从该页跌{到的新页面ƈ调用session_start()后,PHP检查与l定ID相关联的服务器端存贮的session数据Q如果没扑ֈQ则新徏一个数据集?<br /> <br /> 2.1.2 通过URL传送session ID <br /> 只有在用L止用cookie的时候才用这U方法,因ؓ览器cookie已经通用Qؓ安全赯Q可不用该方法?<br /> <a href="p.php?<?php print session_name() ?>=<?php print session_id() ?>">xxx</a>Q也可以通过POST来传递session倹{?<br /> <br /> 2.2 session基本用法实例 <br /> 代码片段 <br /> <?php <br /> // page1.php <br /> session_start(); <br /> echo 'Welcome to page #1'; /* 创徏session变量q给session变量赋?*/ <br /> $_SESSION['favcolor'] = 'green'; <br /> $_SESSION['animal'] = 'cat'; <br /> $_SESSION['time'] = time(); // 如果客户端用cookie,可直接传递session到page2.php <br /> echo '<br /><a href="page2.php">page 2</a>'; // 如果客户端禁用cookie echo ' <br /> <br /><a href="page2.php?' . SID . '">page 2</a>'; /* 默认php5.2.1?SID只有在cookie被写入的同时才会有?如果该session 对应的cookie已经存在,那么SIDؓ(未定?I?*/ <br /> ?> <br /> 代码片段 <br /> <?php <br /> // page2.php <br /> session_start(); <br /> print $_SESSION['animal']; // 打印出单个session <br /> var_dump($_SESSION); // 打印出page1.php传过来的session?<br /> ?> <br /> <br /> 2.3 使用session函数控制面~存 <br /> 很多情况下,我们要确定我们的|页是否在客L~存Q或要设|缓存的有效旉Q比如我们的|页上有些敏感内容ƈ且要d才能查看Q如果缓存到本地了,可以直接打开本地的缓存就可以不登录而浏览到|页了?<br /> 使用session_cache_limiter('private');可以控制面客户端缓存,必须在session_start()之前调用?<br /> 更多参数?a target="_blank">http://blog.chinaunix.net/u/27731/showart.php?id=258087</a>的客L~存控制?<br /> 控制客户端缓存时间用session_cache_expire(int); 单位(s)。也要在session_start()前调用?<br /> q只是用session的情况下控制~存的方法,我们q可以在header()中控制控刉面的~存?<br /> <br /> 2.4 删除session <br /> 要三步实现?<br /> 代码片段 <br /> <?php <br /> session_destroy(); // W一? 删除服务器端session文g,q?<br /> setcookie(session_name(),'',time()-3600); // W二? 删除实际的session: <br /> $_SESSION = array(); // W三? 删除$_SESSION全局变量数组 <br /> ?> <br /> <br /> 2.5 session在PHP大型web应用中的使用 <br /> 对于讉K量大的站点,用默认的session存贮方式q不适合Q目前最优的Ҏ是用数据库存取session。这Ӟ函数bool session_set_save_handler ( callback open, callback close, callback read, callback write, callback destroy, callback gc )是提供l我们解册个问题的Ҏ?<br /> 该函C用的6个函数如下: <br /> 1. bool open() 用来打开会话存储机制?<br /> 2. bool close() 关闭会话存储操作?<br /> 3. mixde read() 从存储中装蝲session数据时用这个函数?<br /> 4. bool write() 给定session ID的所有数据写到存储中?<br /> 5. bool destroy() 破坏与指定的session ID相关联的数据?<br /> 6. bool gc() 对存储系l中的数据进行垃圾收集?<br /> 例子见php手册session_set_save_handler() 函数?<br /> 如果用类来处理,?<br /> 代码片段 <br /> session_set_save_handler( <br /> array('className','open'), <br /> array('className','close'), <br /> array('className','read'), <br /> array('className','write'), <br /> array('className','destroy'), <br /> array('className','gc'), <br /> ) <br /> 调用classNamecM?个静态方法。className可以实例化对象就不用调用静态方法,但是用静态成员不用生成对象,性能更好?<br /> <br /> 2.6 常用session函数: <br /> bool session_start(void) 初始化session?<br /> bool session_destroy(void) 删除服务器端session兌文g?<br /> string session_id() 当前session的id?<br /> string session_name() 当前存取的session名称Q也是客户端保存session ID的cookie名称.默认PHPSESSID?<br /> array session_get_cookie_params() 与这个session相关联的session的细节?<br /> string session_cache_limiter() 控制使用session的页面的客户端缓存?<br /> ini session_cache_expire() 控制客户端缓存时间?<br /> bool session_destroy() 删除服务器端保存session信息的文件?<br /> void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly]]]] ) 讄与这个session相关联的session的细节?<br /> bool session_set_save_handler ( callback open, callback close, callback read, callback write, callback destroy, callback gc ) 定义处理session的函?不是使用默认的方??<br /> bool session_regenerate_id([bool delete_old_session]) 分配新的session id <br /> <br /> 2.7 session安全问题 <br /> d者通过投入很大的精力尝试获得现有用L有效session IDQ有了session idQ他们就有可?<br /> 能够在系l中拥有与此用户相同的能力?<br /> 因此Q我们主要解决的思\是效验session ID的有效性?<br /> 代码片段 <br /> <?php <br /> if(!isset($_SESSION['user_agent'])){ <br /> $_SESSION['user_agent'] = $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']; <br /> } /* 如果用户session ID是伪?*/ <br /> elseif ($_SESSION['user_agent'] != $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']) { session_regenerate_id(); <br /> } <br /> ?> <br /> <br /> 2.8 Session通过cookie传递和通过SID传递的不同 <br /> 在php5.2.1的session的默认配|的情况下,当生成session的同Ӟ服务器端在发送header set-cookie同时生成预定义超U全局变量SID(也就是说Q写入cookie和抛出SID是等L)Q当$_COOKIE['PHPSESSID']存在以后Q将不再写入cookieQ也不再生成全局变量SIDQ此ӞSID是I的?<br /> <br /> 2.9 session使用实例 <br /> 代码片段 <br /> <?php <br /> /** * 效验session的合法?* */ <br /> function sessionVerify() { <br /> if(!isset($_SESSION['user_agent'])){ <br /> $_SESSION['user_agent'] = MD5($_SERVER['REMOTE_ADDR'] .$_SERVER['HTTP_USER_AGENT']); <br /> } /* 如果用户session ID是伪?则重新分配session ID */ <br /> elseif ($_SESSION['user_agent']!=MD5($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'])) { <br /> session_regenerate_id(); <br /> } <br /> } <br /> /** * 销毁session * 三步完美实现,不可?* */ <br /> function sessionDestroy() { <br /> session_destroy(); <br /> setcookie(session_name(),'',time()-3600); <br /> $_SESSION = array(); <br /> } <br /> ?> <br /> 注明Q?<br /> session 出现头信息已l发出的原因与cookie一栗?在php5中,所有php session的注册表配置选项都是~程时可配置的,一般情况下Q我们是不用修改光|的。要了解php的session注册表配|选项Q请参考手册的Session会话处理函数处?<br /> <img src ="http://www.tkk7.com/DreamFight/aggbug/262804.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/DreamFight/" target="_blank">DreamFight</a> 2009-03-30 08:47 <a href="http://www.tkk7.com/DreamFight/articles/262804.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP?_SERVER的详l用?/title><link>http://www.tkk7.com/DreamFight/articles/262799.html</link><dc:creator>DreamFight</dc:creator><author>DreamFight</author><pubDate>Sun, 29 Mar 2009 23:11:00 GMT</pubDate><guid>http://www.tkk7.com/DreamFight/articles/262799.html</guid><wfw:comment>http://www.tkk7.com/DreamFight/comments/262799.html</wfw:comment><comments>http://www.tkk7.com/DreamFight/articles/262799.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/DreamFight/comments/commentRss/262799.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/DreamFight/services/trackbacks/262799.html</trackback:ping><description><![CDATA[<div style="color: #000000" id="articleBody" class="articleContent"><span style="color: rgb(255,0,0)"><span style="color: #000000">$_SERVER['PHP_SELF'] #当前正在执行脚本的文件名Q与 document root相关?br /> </span></span>$_SERVER['argv'] #传递给该脚本的参数?br /> $_SERVER['argc'] #包含传递给E序的命令行参数的个敎ͼ如果q行在命令行模式Q?br /> $_SERVER['GATEWAY_INTERFACE'] #服务器用的 CGI 规范的版本。例如,“CGI/1.1”?br /> <span style="color: rgb(255,0,0)"><span style="color: #000000">$_SERVER['SERVER_NAME'] #当前q行脚本所在服务器L的名U?br /> </span></span>$_SERVER['SERVER_SOFTWARE'] #服务器标识的字串Q在响应h时的头部中给出?br /> $_SERVER['SERVER_PROTOCOL'] #h面旉信协议的名U和版本。例如,“HTTP/1.0”?br /> $_SERVER['REQUEST_METHOD'] #讉K面时的hҎ。例如:“GET”?#8220;HEAD”Q?#8220;POST”Q?#8220;PUT”?br /> $_SERVER['QUERY_STRING'] #查询(query)的字W串?br /> $_SERVER['DOCUMENT_ROOT'] #当前q行脚本所在的文档根目录。在服务器配|文件中定义?br /> $_SERVER['HTTP_ACCEPT'] #当前h?Accept: 头部的内宏V?br /> $_SERVER['HTTP_ACCEPT_CHARSET'] #当前h?Accept-Charset: 头部的内宏V例如:“iso-8859-1,*,utf-8”?br /> $_SERVER['HTTP_ACCEPT_ENCODING'] #当前h?Accept-Encoding: 头部的内宏V例如:“gzip”?br /> $_SERVER['HTTP_ACCEPT_LANGUAGE']#当前h?Accept-Language: 头部的内宏V例如:“en”?br /> $_SERVER['HTTP_CONNECTION'] #当前h?Connection: 头部的内宏V例如:“Keep-Alive”?br /> $_SERVER['HTTP_HOST'] #当前h?Host: 头部的内宏V?br /> $_SERVER['HTTP_REFERER'] #链接到当前页面的前一面?URL 地址?br /> $_SERVER['HTTP_USER_AGENT'] #当前h?User_Agent: 头部的内宏V?br /> <span style="color: rgb(255,0,0)"><span style="color: #000000">$_SERVER['REMOTE_ADDR'] #正在览当前面用户?IP 地址?br /> </span></span><span style="color: #000000">$_SERVER['REMOTE_HOST'] #正在览当前面用户的主机名?/span><br /> $_SERVER['REMOTE_PORT'] #用户q接到服务器时所使用的端口?br /> <span style="color: rgb(255,0,0)"><span style="color: #000000">$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对\径名?br /> </span></span>$_SERVER['SERVER_ADMIN'] #理员信?br /> $_SERVER['SERVER_PORT'] #服务器所使用的端?br /> $_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟L名的字符丌Ӏ?br /> <span style="color: #000000">$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系l(不是文档根目录)的基本\径?/span><br /> $_SERVER['SCRIPT_NAME'] #包含当前脚本的\径。这在页面需要指向自己时非常有用?br /> $_SERVER['REQUEST_URI'] #讉K此页面所需?URI。例如,“/index.html”?br /> $_SERVER['PHP_AUTH_USER'] #?PHP q行?Apache 模块方式下,q且正在使用 HTTP 认证功能Q这个变量便是用戯入的用户名?br /> $_SERVER['PHP_AUTH_PW'] #?PHP q行?Apache 模块方式下,q且正在使用 HTTP 认证功能Q这个变量便是用戯入的密码?br /> $_SERVER['AUTH_TYPE'] #?PHP q行?Apache 模块方式下,q且正在使用 HTTP 认证功能Q这个变量便是认证的cd?</div> <img src ="http://www.tkk7.com/DreamFight/aggbug/262799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/DreamFight/" target="_blank">DreamFight</a> 2009-03-30 07:11 <a href="http://www.tkk7.com/DreamFight/articles/262799.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>set_magic_quotes_runtime(0)函数作用解释 http://www.tkk7.com/DreamFight/articles/261934.htmlDreamFightDreamFightWed, 25 Mar 2009 12:16:00 GMThttp://www.tkk7.com/DreamFight/articles/261934.htmlhttp://www.tkk7.com/DreamFight/comments/261934.htmlhttp://www.tkk7.com/DreamFight/articles/261934.html#Feedback0http://www.tkk7.com/DreamFight/comments/commentRss/261934.htmlhttp://www.tkk7.com/DreamFight/services/trackbacks/261934.html
当然如果重复l溢出字W加反斜U,那么字符串中׃有多个反斜线Q所以这时就要用set_magic_quotes_runtime()与get_magic_quotes_runtime()讄和检php.ini文g中magic_quotes_runtime状态?br />
Z使自qE序不管服务器是什么设|都能正常执行。可以在E序开始用get_magic_quotes_runtime设|状态秋军_是否要手工处理,或者在开始(或不需要自动{义的时候)用set_magic_quotes_runtime(0)x?br />
magic_quotes_gpc讄是否自动为GPC(get,post,cookie)传来的数据中?"\加上反斜Uѝ可以用get_magic_quotes_gpc()系l设|。如果没有打开q项讄Q可以用addslashes()函数dQ它的功能就是给数据库查询语句等的需要在某些字符前加上了反斜Uѝ这些字W是单引P'Q、双引号Q?Q、反斜线Q\Q与 NULQNULL 字符Q?br />
应用实例见代码:
PHP代码

// 去除转义字符    
function stripslashes_array($array) {    
    if (is_array($array)) {    
        foreach ($array as $k => $v) {    
            $array[$k] = stripslashes_array($v);    
        }    
    } else if (is_string($array)) {    
        $array = stripslashes($array);    
    }    
    return $array;    
}    
  
@set_magic_quotes_runtime(0);    
// 判断 magic_quotes_gpc 状?nbsp;   
if (@get_magic_quotes_gpc()) {    
    //如果已经打开了magic_quotes_gpcQ则L转义字符Q防止双重{?nbsp;   
    $_GET = stripslashes_array($_GET);    
    $_POST = stripslashes_array($_POST);    
    $_COOKIE = stripslashes_array($_COOKIE);    
}  


DreamFight 2009-03-25 20:16 发表评论
]]>
windows下开启PHP GD?/title><link>http://www.tkk7.com/DreamFight/articles/259850.html</link><dc:creator>DreamFight</dc:creator><author>DreamFight</author><pubDate>Sun, 15 Mar 2009 08:14:00 GMT</pubDate><guid>http://www.tkk7.com/DreamFight/articles/259850.html</guid><wfw:comment>http://www.tkk7.com/DreamFight/comments/259850.html</wfw:comment><comments>http://www.tkk7.com/DreamFight/articles/259850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/DreamFight/comments/commentRss/259850.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/DreamFight/services/trackbacks/259850.html</trackback:ping><description><![CDATA[<p>Ҏ不同的PHP版本Q我用的PHP5解压包已l包含了GD库,</p> <p>所以只需要在php.ini里找?#8220;extension=php_gd2.dll”</p> <p>然后吧前边的“Q?#8221;LOK了!</p> <img src ="http://www.tkk7.com/DreamFight/aggbug/259850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/DreamFight/" target="_blank">DreamFight</a> 2009-03-15 16:14 <a href="http://www.tkk7.com/DreamFight/articles/259850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置php.ini文g的\?/title><link>http://www.tkk7.com/DreamFight/articles/259849.html</link><dc:creator>DreamFight</dc:creator><author>DreamFight</author><pubDate>Sun, 15 Mar 2009 08:14:00 GMT</pubDate><guid>http://www.tkk7.com/DreamFight/articles/259849.html</guid><wfw:comment>http://www.tkk7.com/DreamFight/comments/259849.html</wfw:comment><comments>http://www.tkk7.com/DreamFight/articles/259849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/DreamFight/comments/commentRss/259849.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/DreamFight/services/trackbacks/259849.html</trackback:ping><description><![CDATA[<p>php默认规定<strong>php.ini文g的\?/strong>必须在C:\windows路径下,其实q个路径是可以配|的?/p> <p>我们可以单的在apache中配|php的\径,在apache的conf\httpd.conf文g里面增加</p> <pre># configure the path to php.ini PHPIniDir "D:/php" </pre> <p>通过上面的配|就可以是php.ini与php.exe在同一个文件夹了?/p> <p>据说pȝ会以下面的顺序查找php.ini的\径:</p> <p>*conf\httpd.conf的PhpIniDir配置<br /> *注册表键regedit值HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath<br /> *当前工作目录(CLI)<br /> *|站服务器WWW目录(SAPI)Q或PHP目录<br /> *Windows目录C:\windows or C:\winntQ或?#8211;with-config-file-path compile time option</p> <p>当然是第一U方法最好!</p> <img src ="http://www.tkk7.com/DreamFight/aggbug/259849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/DreamFight/" target="_blank">DreamFight</a> 2009-03-15 16:14 <a href="http://www.tkk7.com/DreamFight/articles/259849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>set_error_handler() 用法http://www.tkk7.com/DreamFight/articles/248772.htmlDreamFightDreamFightSun, 28 Dec 2008 11:51:00 GMThttp://www.tkk7.com/DreamFight/articles/248772.htmlhttp://www.tkk7.com/DreamFight/comments/248772.htmlhttp://www.tkk7.com/DreamFight/articles/248772.html#Feedback0http://www.tkk7.com/DreamFight/comments/commentRss/248772.htmlhttp://www.tkk7.com/DreamFight/services/trackbacks/248772.html错误路径泄露
1.漏洞原因Q?br /> PHP遇到错误Ӟ׃l出出错脚本的位|、行数和原因Q例如:
Notice: Use of undefined constant test - assumed ''test'' in D:interpubbigflytest.php on line 3
有很多h_qƈ没有什么大不了。但泄露了实际\径的后果是不堪设想的Q对于某些入侵者,q个信息可是非常重要Q而事实上现在有很多的服务器都存在q个问题?br /> 有些|管q脆把PHP配置文g中的display_errors讄为Off来解冻I但本个方法过于消极。有些时候,我们的确需要PHPq回错误的信息以便调试。而且在出错时也可能需要给用户一个交待,甚至D到另一面?br /> 2.漏洞解决Q?br /> PHP?.1.0开始提供了自定义错误处理句柄的功能函数set_error_handler()Q但很少数脚本编写者知道。在众多的PHP论坛中,我只看见很少一部分Ҏ情况q行了处理。set_error_handler的用方法如下:
string set_error_handler ( callback error_handler [, int error_types])
现在我们q自定义的错误处理把实际\径过滤掉?br /> //admin为管理员的n份判定,true为管理员?br /> //自定义的错误处理函数一定要有这Q个输入变量$errno,$errstr,$errfile,$errlineQ否则无效?br /> function my_error_handler($errno,$errstr,$errfile,$errline)
{
//如果不是理员就qo实际路径
if(!admin)
{
$errfile=str_replace(getcwd(),"",$errfile);
$errstr=str_replace(getcwd(),"",$errstr);
}
switch($errno)
{
case E_ERROR:
echo "ERROR: [ID $errno] $errstr (Line: $errline of $errfile)
n";
echo "E序已经停止q行Q请联系理员?;
//遇到ErrorU错误时退?br /> exit;
break;

case E_WARNING:
echo "WARNING: [ID $errno] $errstr (Line: $errline of $errfile)
n";
break;

default:
//不显CNoticeU的错误
break;
}
}

//把错误处理设|ؓmy_error_handler函数
set_error_handler("my_error_handler");

q样Q就可以很好地解军_全和调试方便的矛盾了。而且你还可以q心思,佉K误提C更加美观以配合|站的风根{不q注意两ҎQ?br /> Q?QE_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING是不会被q个句柄处理的,也就是会用最原始的方式显C出来。不q出现这些错误都是编译或PHP内核出错Q在通常情况下不会发生?br /> Q?Q用set_error_handler()后,error_reporting ()会失效。也是所有的错误Q除上述的错误)都会交给自定义的函数处理?br /> 其它有关于set_error_handler()的信息,大家可以参考PHP的官Ҏ册?br />
下面我D个实际应用中的例子:
<index.php>
<?php
//先定义一个函敎ͼ也可以定义在其他的文件中Q再用require()调用
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
     //Z安全赯Q不暴露出真实物理\径,下面两行qo实际路径
    $errfile=str_replace(getcwd(),"",$errfile);
    $errstr=str_replace(getcwd(),"",$errstr);

    switch ($errno) {
    case E_USER_ERROR:

     echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
        echo "  Fatal error on line $errline in file $errfile";
        echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
        echo "Aborting...<br />\n";
        exit(1);
        break;

    case E_USER_WARNING:
        echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
        break;

    case E_USER_NOTICE:
        echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
        break;

    default:
        echo "Unknown error type: [$errno] $errstr<br />\n";
        break;
    }

    /* Don't execute PHP internal error handler */
    return true;
}

//下面开始连接MYSQL服务器,我们故意指定MYSQL端口?333,实际?306?br /> $link_id=@mysql_pconnect("localhost:3333","root","password");
set_error_handler(myErrorHandler);
if (!$link_id) {
    trigger_error("出错?, E_USER_ERROR);
    }

?>



DreamFight 2008-12-28 19:51 发表评论
]]>
Windows下PHP安装具体步骤http://www.tkk7.com/DreamFight/articles/248587.htmlDreamFightDreamFightSat, 27 Dec 2008 01:01:00 GMThttp://www.tkk7.com/DreamFight/articles/248587.htmlhttp://www.tkk7.com/DreamFight/comments/248587.htmlhttp://www.tkk7.com/DreamFight/articles/248587.html#Feedback0http://www.tkk7.com/DreamFight/comments/commentRss/248587.htmlhttp://www.tkk7.com/DreamFight/services/trackbacks/248587.htmlWindows下PHP安装具体步骤

PHP安装具体步骤
注意事项:安装q程QQ何目录和文g名都不要使用I格Q?br /> 不要使用D:\Program Files 而要使用D:\ProgramFiles
本次安装目录为D:\PHPServer\
1. apache_2.2.3-win32-x86-no_ssl.msi
apache服务器YӞ我下载的是win版本Q?.0pd的配|都是相似的?br /> 双击安装apache2.2.3,我把它安装到D:\PHPServer\Apache2\ 注意Q目录名不要包含I格Q否则下面设|php会出错。安装结束后Qapache自动q行Q在览器里输入http://127.0.0.1是不是显C出了默认的|页Q如果你不希望看到这个页面,可以到D:\PHPServer\Apache2\conf目录下找?httpd.conf 打开~辑Qƈ查找 DocumentRoot"?.0pd的版本中Q只会找C个DocumentRoot" Q把引号内的路径改ؓ你自q路径可以了Q比?DocumentRoot “D:/PHPServer” 现在默认的根目录是 D:/PHPServer 注意q里用的?/"?/p>

备注:如果是ZIP的压~包的话,只需要把Apache2.2解压到目?然后CMD下运?br /> D:\PHPServer\Apache2\bin\httpd -k install :安装
D:\PHPServer\Apache2\bin\httpd -k start :开?br /> p?/p>

2、安装php5.2
下蝲q来的php-5.2-Win32一般是个zip格式的压~包Q解压羃到D:\PHPServer目录下,q文g都在一个文件夹下,Ҏ件夹名ؓphp5 ,q样方便接下来的工作。现在我们看?D:\PHPServer下面已经有两个文件夹? 一个是 apache2(安装apache2.2.3自动生成的一个文件夹) 另一个是 php5 我的方式是每一个Y件一个文件夹,q且q些文g夹在同一目录? q样便于查找。好了,我们现在开始配|apache使它支持php5.
首先,扑ֈ D:\PHPServer\php5 目录下的php.ini-dist 重命名ؓphp.ini q复制到C:\windows 目录?
然后,复制 D:\PHPServer\php5 目录下的php5ts.dll,libmysql.dll( 加蝲php和apache的动态链接库)到C:\windows\system32
最?复制 D:\PHPServer\php5\ext 目录下的php_gd2.dllQphp_mysql.dll 到C:\windows\system32

也可把以下命令COPY为BAT文g
@echo off
copy libmysql.dll %windir%\system32\
copy php5ts.dll %windir%\system32\
copy ext/php_gd2.dll %windir%\system32\
copy ext/php_mysql.dll %windir%\system32\
copy php.ini %windir%\
攑֜php5的根目录q行

接下?我们开始配|?D:\PHPServer\Apache\Apache2\conf 下的 httpd.conf文g,打开apache配置文ghttpd.conf:开?E序/Apache HTTP Server/Configure Apache Server/Edit....
1、找到DirectoryIndex index.html 在后面加?index.htm index.html.var index.php
2、模块化安装配置
扑ֈ #LoadModule ssl_module modules/mod_ssl.so q行,在此行后加入一?br /> LoadModule php5_module D:/PHPServer/php5/php5apache2_2.dll(下面有说?
其中D:/PHPServer/php5/ Zphp目录
3、找?AddType application/x-gzip .gz .tgz q行,加入如下卛_
AddType application/x-httpd-php .php
4、验证Apache整合PHP
新徏一个PHP文gQphpinfo.php
<?echo phpinfo();?>

Z让php支持mysql,需要做如下操作:
首先修改c:\windows下的php.ini文g,
?extension_dir = "./"修改为extension_dir = "d:\PHPServer\php5\ext",
register_globals = Off改ؓOn;
?extension=php_mysql.dll前面的引?;"L
再复制php目录下的libmysql.dll文g到system32?br />
试MySQL,在Web根目录下建立testdb.php文g内容如下Q?br /> <?php
$link=mysql_connect('localhost','root','123456');
if(!$link) echo "fail";
else echo "success";
mysql_close();
?>

安装phpMyAdmin:
phpMyadmin解压到apache的网늛?Z方便后序操作文件夹重命名ؓpma.

PHPMyAdmin配置
在libraries\config.default.php?br /> $cfg['Servers'][$i]['user']          = 'root';                    // MySQL user
$cfg['Servers'][$i]['password']      = 'your password';          // MySQL password (only needed
加入用户名和密码


注意事项
装了mysql后外部不能连?br /> 打开XP防火墙的3306端口,允许外部讉K.当然如果你装了其他的防火墙也要打开此端?

mysqlfront 不能q接的问??251错误
在本机用其他工具和命令行都可以连, 在另外一台linux上也可以q?加密方式改Zold_password也不?但是今天来开机发现可以连?或许是要重启以下?呵呵.

q入phpMyAdmin? 出现 “无法载入 mysql 扩展Q请?PHP 配置”。这里或许是昄的ؕ?你要在IE的编码中选择体中文就会看?
解决办法是上面说的要让php支持mysql,讄扩展文g的的路径,打开扩展?

q入phpMyAdmin的管理页面以?|页下方出现mbstring的警?
解决:在php.ini中将此扩展打开,?extension=php_mbstring.dll前面的引号去掉即?/p>



DreamFight 2008-12-27 09:01 发表评论
]]>
php生成静态所要到的类http://www.tkk7.com/DreamFight/articles/246294.htmlDreamFightDreamFightSun, 14 Dec 2008 16:06:00 GMThttp://www.tkk7.com/DreamFight/articles/246294.htmlhttp://www.tkk7.com/DreamFight/comments/246294.htmlhttp://www.tkk7.com/DreamFight/articles/246294.html#Feedback0http://www.tkk7.com/DreamFight/comments/commentRss/246294.htmlhttp://www.tkk7.com/DreamFight/services/trackbacks/246294.html /*
AuthorQDreamFight
使用Ҏ
$shtml = new Shtml($Url,$FileBag,$FolderName,$fileid)
$UrlQ?面 URL 地址
$FileBagQ?文gҎ?1 为:指定文g?
2为:默认文g?旉(q月?)
$FolderRoot html文g存放路径
$FolderName 指定文g夹的名称 $FileBag??可以写ؓI?"");
$fileid 静态页面名U?后缀 默认?.html)
 */
?>
class Shtml
{
var $message1="Error 1: You write class Shtml is Wrong ! The second parameter is 1 or 2 in this class!.";
var $message2="Error 2: The file write Error.";


function __construct ($Url,$FileBag,$FolderRoot,$FolderName,$fileid)
{
$this->Url = $Url;
$this->FileBag = $FileBag;
$this->FileRoot = $FolderRoot;
$this->FileName = $FolderName;
$this->fileid = $fileid;
Shtml::useFolder ();
}

/*************获取数据*******************/
public function loadcontent ($Folder)
{
ob_start();
require_once $this->Url;
Shtml::writehtml ($Folder,ob_get_contents());
ob_clean();
}

/********** 指定文g?****************/
public function useFolder ()
{
if($this->FileBag==1)
{
$Folder=$this->FileName;
}
else if($this->FileBag==2)
{
$Folder=date('Ymd',time());
}
else
{
exit($this->message1);
}
if(!is_dir($this->FileRoot.$Folder)){ mkdir($this->FileRoot.$Folder,0700);}

Shtml::loadcontent ($Folder);

}
/********** 生成静态页?****************/
public function writehtml ($Folder,$cache_value)
{
$file = fopen($this->FileRoot.$Folder.'/'.$this->fileid.'.html','w+');
fwrite($file,$cache_value);
fclose($file);
}

}


DreamFight 2008-12-15 00:06 发表评论
]]>
今天需要用到在smarty模版中将两个变量相加http://www.tkk7.com/DreamFight/articles/245578.htmlDreamFightDreamFightWed, 10 Dec 2008 14:11:00 GMThttp://www.tkk7.com/DreamFight/articles/245578.htmlhttp://www.tkk7.com/DreamFight/comments/245578.htmlhttp://www.tkk7.com/DreamFight/articles/245578.html#Feedback0http://www.tkk7.com/DreamFight/comments/commentRss/245578.htmlhttp://www.tkk7.com/DreamFight/services/trackbacks/245578.html
  • {* $height=4, $width=5 *}
  • {math equation="x + y" x=$height y=$width}
  • OUTPUT:
  • 9

  • {* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in template *}
  • {math equation="height * width / division"
  •       height=$row_height
  •       width=$row_width
  •       division=#col_div#}
  • OUTPUT:
  • 100

  • {* you can use parenthesis *}
  • {math equation="(( x + y ) / z )" x=2 y=10 z=2}
  • OUTPUT:
  • 6

  • {* you can supply a format parameter in sprintf format *}
  • {math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
  • OUTPUT:
  • 9.44


  • DreamFight 2008-12-10 22:11 发表评论
    ]]>
    set_error_handler() 用法http://www.tkk7.com/DreamFight/articles/245338.htmlDreamFightDreamFightTue, 09 Dec 2008 13:23:00 GMThttp://www.tkk7.com/DreamFight/articles/245338.htmlhttp://www.tkk7.com/DreamFight/comments/245338.htmlhttp://www.tkk7.com/DreamFight/articles/245338.html#Feedback0http://www.tkk7.com/DreamFight/comments/commentRss/245338.htmlhttp://www.tkk7.com/DreamFight/services/trackbacks/245338.html Notice: Use of undefined constant test - assumed ''test'' in D:interpubbigflytest.php on line 3
    有很多h_qƈ没有什么大不了。但泄露了实际\径的后果是不堪设想的Q对于某些入侵者,q个信息可是非常重要Q而事实上现在有很多的服务器都存在q个问题?br /> 有些|管q脆把PHP配置文g中的display_errors讄为Off来解冻I但本个方法过于消极。有些时候,我们的确需要PHPq回错误的信息以便调试。而且在出错时也可能需要给用户一个交待,甚至D到另一面?br /> 2.漏洞解决Q?br /> PHP?.1.0开始提供了自定义错误处理句柄的功能函数set_error_handler()Q但很少数脚本编写者知道。在众多的PHP论坛中,我只看见很少一部分Ҏ情况q行了处理。set_error_handler的用方法如下:
    string set_error_handler ( callback error_handler [, int error_types])
    现在我们q自定义的错误处理把实际\径过滤掉?br /> //admin为管理员的n份判定,true为管理员?br /> //自定义的错误处理函数一定要有这Q个输入变量$errno,$errstr,$errfile,$errlineQ否则无效?br /> function my_error_handler($errno,$errstr,$errfile,$errline)
    {
    //如果不是理员就qo实际路径
    if(!admin)
    {
    $errfile=str_replace(getcwd(),"",$errfile);
    $errstr=str_replace(getcwd(),"",$errstr);
    }
    switch($errno)
    {
    case E_ERROR:
    echo "ERROR: [ID $errno] $errstr (Line: $errline of $errfile)
    n";
    echo "E序已经停止q行Q请联系理员?;
    //遇到ErrorU错误时退?br /> exit;
    break;

    case E_WARNING:
    echo "WARNING: [ID $errno] $errstr (Line: $errline of $errfile)
    n";
    break;

    default:
    //不显CNoticeU的错误
    break;
    }
    }

    //把错误处理设|ؓmy_error_handler函数
    set_error_handler("my_error_handler");

    q样Q就可以很好地解军_全和调试方便的矛盾了。而且你还可以q心思,佉K误提C更加美观以配合|站的风根{不q注意两ҎQ?br /> Q?QE_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING是不会被q个句柄处理的,也就是会用最原始的方式显C出来。不q出现这些错误都是编译或PHP内核出错Q在通常情况下不会发生?br /> Q?Q用set_error_handler()后,error_reporting ()会失效。也是所有的错误Q除上述的错误)都会交给自定义的函数处理?br /> 其它有关于set_error_handler()的信息,大家可以参考PHP的官Ҏ册?br />
    下面我D个实际应用中的例子:
    <index.php>
    <?php
    //先定义一个函敎ͼ也可以定义在其他的文件中Q再用require()调用
    function myErrorHandler($errno, $errstr, $errfile, $errline)
    {
         //Z安全赯Q不暴露出真实物理\径,下面两行qo实际路径
        $errfile=str_replace(getcwd(),"",$errfile);
        $errstr=str_replace(getcwd(),"",$errstr);

        switch ($errno) {
        case E_USER_ERROR:

         echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
            echo "  Fatal error on line $errline in file $errfile";
            echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
            echo "Aborting...<br />\n";
            exit(1);
            break;

        case E_USER_WARNING:
            echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
            break;

        case E_USER_NOTICE:
            echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
            break;

        default:
            echo "Unknown error type: [$errno] $errstr<br />\n";
            break;
        }

        /* Don't execute PHP internal error handler */
        return true;
    }

    //下面开始连接MYSQL服务器,我们故意指定MYSQL端口?333,实际?306?br /> $link_id=@mysql_pconnect("localhost:3333","root","password");
    set_error_handler(myErrorHandler);
    if (!$link_id) {
        trigger_error("出错?, E_USER_ERROR);
        }

    ?>


    DreamFight 2008-12-09 21:23 发表评论
    ]]>
    վ֩ģ壺 ޳avӰԺ| պɬɬҹ˽ӰԺ| ޾ƷԲ߹ۿ| ƷѾþþþþþþ| ޙպ߶| һĻ| ˿ۺ| ߾ƷaaaƬ| þ޾ƷƷ| ޵Ӱѹۿ| ۺϼ| ĻƷƵѹۿ| ˳߾Ʒ| Ƶ| ͵޾Ʒ͵һ| Ƭһһ߹ۿ| պëƬƵѿ| ž޹Ʒ| aëƬѲȫ| ޹ŮaaaëƬ| 鶹Ƶѹۿ| ŷһ| ѻɫƬ| ɫˬƵ| ߹ۿƵ| ѹۿ˳վ| ƷAVƬ߹ۿ| Ʒպ99޵߷| ձһƬ2019| ˿wwwѸ| þþ뾫ƷպĦ| ŮƬѹۿƵ| պƷƵ| avһ| ҪѵëƬ| ˿Ƶ| videos| ޹Ʒþþ| ëƬŮAPP| Ʒ߲| Ļ|