DATE_FORMAT(date,format)
根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)
-------------------------------------------------------------------------------------
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss [AP]M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。
-------------------------------------------------------------------------------------
所有的其他字符不做解释被复制到结果中。
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。
TIME_FORMAT(time,format)
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。
其他修饰符产生一个NULL值或0。
CURDATE()
-------------------------------------------------------------------------------------
CURRENT_DATE
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
-------------------------------------------------------------------------------------
CURRENT_TIME
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026
NOW()
SYSDATE()
-------------------------------------------------------------------------------------
CURRENT_TIMESTAMP
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的
上下文被使用。
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026
UNIX_TIMESTAMP()
-------------------------------------------------------------------------------------
UNIX_TIMESTAMP(date)
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换 http://www.knowsky.com/。
FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串还是或数字上下文中被使用。
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字上下文中被使用。
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
-> 3938
TIME_TO_SEC(time)
返回time参数,转换成秒。
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378
2008年11月27日星期四
2008年11月25日星期二
PHP的正则处理函数总结分析
preg_grep
(PHP 4, PHP 5)
preg_grep -- 返回与模式匹配的数组单元
说明
array preg_grep ( string pattern, array input [, int flags] )
preg_grep() 返回一个数组,其中包括了 input 数组中与给定的 pattern 模式相匹配的单元。
flags 可以是以下标记:
PREG_GREP_INVERT
如果传递入此标记,preg_grep() 会返回输入数组中不匹配给定 pattern 的单元。本标记自 PHP 4.2.0 起可用。
自 PHP 4.0.4 起,preg_grep() 返回的结果使用从输入数组来的键名进行索引。如果不希望这样的结果,用 array_values() 对 preg_grep() 返回的结果重新索引。
上面是手册上对preg_grep()的说明。首先这是perl兼容的正则函数,所以我猜想preg_grep的意思是p(perl)reg(regular)_grep,其特点是可做用于数组,通过自己扩展,可用做多维数组中的正则匹配,并且可以通过flags参数返回匹配或者非匹配数组。其效率比用foreach(...){if...}结构快很多(未验证),而且可匹配复杂模式。在搜索、分检等应用中用途不小。
例:12.213,'bb'=>12345,'ba'=>23.2321,34.3,'23'=>'3.3','23434'=>'bbb');
// 返回所有含有浮点数的数组元素。
$fl_array = preg_grep ("/^(\d+)?\.\d+$/", $arr);
print_r($fl_array);
?>
---------------------------------------------------------------------------------------------
preg_match
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match -- 进行正则表达式匹配
说明
int preg_match ( string pattern, string subject [, array matches [, int flags]] )
在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。
如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
flags 可以是下列标记:
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其偏移量。本标记自 PHP 4.3.0 起可用。
flags 参数自 PHP 4.3.0 起可用。
preg_match() 返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。preg_match_all() 则相反,会一直搜索到 subject 的结尾处。如果出错 preg_match() 返回 FALSE。
提示: 如果只想查看一个字符串是否包含在另一个字符串中,不要用 preg_match()。可以用 strpos() 或 strstr() 替代,要快得多。
上面是手册里对preg_match()的说明,我认为这个函数的功用在于他可做来做验证,也就是某字符串是否符合某特定要求。其局限是上面所说的要么匹配 0次,要么1次。并且返回值是匹配次数。当需要全匹配时可使用preg_match_all().另外值得一提的是$matches数组的作用,可做自模式的返回值,有时很有用。
例:
---------------------------------------------------------------------------------------------
preg_match_all
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match_all -- 进行全局正则表达式匹配
手册上该函数的解释非常明确,就不多做说明了。
说明
int preg_match_all ( string pattern, string subject, array matches [, int flags] )
在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。
搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。
flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起来用没有意义):
PREG_PATTERN_ORDER
对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。
]+>(.*)]+>|U", "example:
$out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
?>
本例将输出:
example: ,
example: , this is a test
因此,$out[0] 包含匹配整个模式的字符串,$out[1] 包含一对 HTML 标记之间的字符串。
PREG_SET_ORDER
对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。
]+>(.*)]+>|U",
"example:
$out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
?>
本例将输出:
example: , example:
本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
如果没有给出标记,则假定为 PREG_PATTERN_ORDER。
返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。
例子 1. 从某文本中取得所有的电话号码
例子 2. 搜索匹配的 HTML 标记(greedy)
bold textclick me";
preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
for ($i=0; $i<>
---------------------------------------------------------------------------------------------
preg_quote
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_quote -- 转义正则表达式字符
说明
string preg_quote ( string str [, string delimiter] )
preg_quote() 以 str 为参数并给其中每个属于正则表达式语法的字符前面加上一个反斜线。如果你需要以动态生成的字符串作为模式去匹配则可以用此函数转义其中可能包含的特殊字符。
如果提供了可选参数 delimiter,该字符也将被转义。可以用来转义 PCRE 函数所需要的定界符,最常用的定界符是斜线 /。
正则表达式的特殊字符包括:. \ + * ? [ ^ ] $ ( ) { } = ! < > | :。
注: 本函数可安全用于二进制对象。
上面是手册上的解释,也很明白,不多说了,另外手册上还有一注释就是该函数可安全用于二进制对象,这点很有用。
例: 例子 1. preg_quote() 例子
例子 2. 给某文本中的一个单词加上斜体标记
".$word."",
$textbody);
?>
接下来就是应用超灵活、、功能超强大、使用超广泛的preg_replace函数。
preg_replace
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_replace -- 执行正则表达式的搜索和替换
说明
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
replacement 可以包含 \\n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。
对替换模式在一个逆向引用后面紧接着一个数字时(即:紧接在一个匹配的模式后面的数字),不能使用熟悉的 \\1 符号来表示逆向引用。举例说 \\11,将会使 preg_replace() 搞不清楚是想要一个 \\1 的逆向引用后面跟着一个数字 1 还是一个 \\11 的逆向引用。本例中的解决方法是使用 \${1}1。这会形成一个隔离的 $1 逆向引用,而使另一个 1 只是单纯的文字。
如果搜索到匹配项,则会返回被替换后的 subject,否则返回原来不变的 subject。
preg_replace() 的每个参数(除了 limit)都可以是一个数组。如果 pattern 和 replacement 都是数组,将以其键名在数组中出现的顺序来进行处理。这不一定和索引的数字顺序相同。如果使用索引来标识哪个 pattern 将被哪个 replacement 来替换,应该在调用 preg_replace() 之前用 ksort() 对数组进行排序。
如果 subject 是个数组,则会对 subject 中的每个项目执行搜索和替换,并返回一个数组。
如果 pattern 和 replacement 都是数组,则 preg_replace() 会依次从中分别取出值来对 subject 进行搜索和替换。如果 replacement 中的值比 pattern 中的少,则用空字符串作为余下的替换值。如果 pattern 是数组而 replacement 是字符串,则对 pattern 中的每个值都用此字符串作为替换值。反过来则没有意义了。
/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。
注: limit 参数是 PHP 4.0.1pl2 之后加入的。
我认为其强大之处就是他不但可以处理字符串,而且可以处理数组,并且他的逆向引用功能非常灵活。基本上他可以满足普通用户的大部分需求,如果他不能胜任,那么我们还有 preg_replace_callback()函数,可以自定义回调函数,满足你的高级要求。如设计过滤器等。
preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换
说明
mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )
本函数的行为几乎和 preg_replace() 一样,除了不是提供一个 replacement 参数,而是指定一个 callback 函数。该函数将以目标字符串中的匹配数组作为输入参数,并返回用于替换的字符串。
例子 1. preg_replace_callback() 例子
You'll often need the callback function for a preg_replace_callback() in just one place. In this case you can use create_function() to declare an anonymous function as callback within the call to preg_replace_callback(). By doing it this way you have all information for the call in one place and do not clutter the function namespace with a callback functions name not used anywhere else.
对于使用 preg_replace_callback()函数的朋友来说,你应该回需要callback函数(否则用他干嘛,直接用preg_replace不是更好),不过也经常只是用一处。既然这样你可以用create_function()来声明一个匿名函数作为 preg_replace_callback()的回调函数。这样,我们即满足了声明信息的需要,有不致因这个不会再用到的函数名而混乱。
例子 2. preg_replace_callback() 和 create_function()
\s*\w|',
create_function(
// 这里使用单引号很关键,
// 否则就把所有的 $ 换成 \$
'$matches',
'return strtolower($matches[0]);'
),
$line
);
echo $line;
}
fclose($fp);
?>
---------------------------------------------------------------------------------------------
preg_split
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_split -- 用正则表达式分割字符串
不再赘述。
说明
array preg_split ( string pattern, string subject [, int limit [, int flags]] )
返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。
如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。
flags 可以是下列标记的任意组合(用按位或运算符 | 组合):
PREG_SPLIT_NO_EMPTY
如果设定了本标记,则 preg_split() 只返回非空的成分。
PREG_SPLIT_DELIM_CAPTURE
如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。本标记添加于 PHP 4.0.5。
PREG_SPLIT_OFFSET_CAPTURE
如果设定了本标记,如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
提示: 如果不需要正则表达式的功能,可以选择使用更快(也更简单)的替代函数如 explode() 或 str_split()。
(PHP 4, PHP 5)
preg_grep -- 返回与模式匹配的数组单元
说明
array preg_grep ( string pattern, array input [, int flags] )
preg_grep() 返回一个数组,其中包括了 input 数组中与给定的 pattern 模式相匹配的单元。
flags 可以是以下标记:
PREG_GREP_INVERT
如果传递入此标记,preg_grep() 会返回输入数组中不匹配给定 pattern 的单元。本标记自 PHP 4.2.0 起可用。
自 PHP 4.0.4 起,preg_grep() 返回的结果使用从输入数组来的键名进行索引。如果不希望这样的结果,用 array_values() 对 preg_grep() 返回的结果重新索引。
上面是手册上对preg_grep()的说明。首先这是perl兼容的正则函数,所以我猜想preg_grep的意思是p(perl)reg(regular)_grep,其特点是可做用于数组,通过自己扩展,可用做多维数组中的正则匹配,并且可以通过flags参数返回匹配或者非匹配数组。其效率比用foreach(...){if...}结构快很多(未验证),而且可匹配复杂模式。在搜索、分检等应用中用途不小。
例:12.213,'bb'=>12345,'ba'=>23.2321,34.3,'23'=>'3.3','23434'=>'bbb');
// 返回所有含有浮点数的数组元素。
$fl_array = preg_grep ("/^(\d+)?\.\d+$/", $arr);
print_r($fl_array);
?>
---------------------------------------------------------------------------------------------
preg_match
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match -- 进行正则表达式匹配
说明
int preg_match ( string pattern, string subject [, array matches [, int flags]] )
在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。
如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
flags 可以是下列标记:
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其偏移量。本标记自 PHP 4.3.0 起可用。
flags 参数自 PHP 4.3.0 起可用。
preg_match() 返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。preg_match_all() 则相反,会一直搜索到 subject 的结尾处。如果出错 preg_match() 返回 FALSE。
提示: 如果只想查看一个字符串是否包含在另一个字符串中,不要用 preg_match()。可以用 strpos() 或 strstr() 替代,要快得多。
上面是手册里对preg_match()的说明,我认为这个函数的功用在于他可做来做验证,也就是某字符串是否符合某特定要求。其局限是上面所说的要么匹配 0次,要么1次。并且返回值是匹配次数。当需要全匹配时可使用preg_match_all().另外值得一提的是$matches数组的作用,可做自模式的返回值,有时很有用。
例:
---------------------------------------------------------------------------------------------
preg_match_all
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match_all -- 进行全局正则表达式匹配
手册上该函数的解释非常明确,就不多做说明了。
说明
int preg_match_all ( string pattern, string subject, array matches [, int flags] )
在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。
搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。
flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起来用没有意义):
PREG_PATTERN_ORDER
对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。
]+>(.*)]+>|U", "example:
this is a test
",$out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
?>
本例将输出:
example: ,
this is a test
example: , this is a test
因此,$out[0] 包含匹配整个模式的字符串,$out[1] 包含一对 HTML 标记之间的字符串。
PREG_SET_ORDER
对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。
]+>(.*)]+>|U",
"example:
this is a test
",$out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
?>
本例将输出:
example: , example:
this is a test
, this is a test本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
如果没有给出标记,则假定为 PREG_PATTERN_ORDER。
返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。
例子 1. 从某文本中取得所有的电话号码
例子 2. 搜索匹配的 HTML 标记(greedy)
bold textclick me";
preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
for ($i=0; $i<>
---------------------------------------------------------------------------------------------
preg_quote
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_quote -- 转义正则表达式字符
说明
string preg_quote ( string str [, string delimiter] )
preg_quote() 以 str 为参数并给其中每个属于正则表达式语法的字符前面加上一个反斜线。如果你需要以动态生成的字符串作为模式去匹配则可以用此函数转义其中可能包含的特殊字符。
如果提供了可选参数 delimiter,该字符也将被转义。可以用来转义 PCRE 函数所需要的定界符,最常用的定界符是斜线 /。
正则表达式的特殊字符包括:. \ + * ? [ ^ ] $ ( ) { } = ! < > | :。
注: 本函数可安全用于二进制对象。
上面是手册上的解释,也很明白,不多说了,另外手册上还有一注释就是该函数可安全用于二进制对象,这点很有用。
例: 例子 1. preg_quote() 例子
例子 2. 给某文本中的一个单词加上斜体标记
".$word."",
$textbody);
?>
接下来就是应用超灵活、、功能超强大、使用超广泛的preg_replace函数。
preg_replace
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_replace -- 执行正则表达式的搜索和替换
说明
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
replacement 可以包含 \\n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。
对替换模式在一个逆向引用后面紧接着一个数字时(即:紧接在一个匹配的模式后面的数字),不能使用熟悉的 \\1 符号来表示逆向引用。举例说 \\11,将会使 preg_replace() 搞不清楚是想要一个 \\1 的逆向引用后面跟着一个数字 1 还是一个 \\11 的逆向引用。本例中的解决方法是使用 \${1}1。这会形成一个隔离的 $1 逆向引用,而使另一个 1 只是单纯的文字。
如果搜索到匹配项,则会返回被替换后的 subject,否则返回原来不变的 subject。
preg_replace() 的每个参数(除了 limit)都可以是一个数组。如果 pattern 和 replacement 都是数组,将以其键名在数组中出现的顺序来进行处理。这不一定和索引的数字顺序相同。如果使用索引来标识哪个 pattern 将被哪个 replacement 来替换,应该在调用 preg_replace() 之前用 ksort() 对数组进行排序。
如果 subject 是个数组,则会对 subject 中的每个项目执行搜索和替换,并返回一个数组。
如果 pattern 和 replacement 都是数组,则 preg_replace() 会依次从中分别取出值来对 subject 进行搜索和替换。如果 replacement 中的值比 pattern 中的少,则用空字符串作为余下的替换值。如果 pattern 是数组而 replacement 是字符串,则对 pattern 中的每个值都用此字符串作为替换值。反过来则没有意义了。
/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。
注: limit 参数是 PHP 4.0.1pl2 之后加入的。
我认为其强大之处就是他不但可以处理字符串,而且可以处理数组,并且他的逆向引用功能非常灵活。基本上他可以满足普通用户的大部分需求,如果他不能胜任,那么我们还有 preg_replace_callback()函数,可以自定义回调函数,满足你的高级要求。如设计过滤器等。
preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换
说明
mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )
本函数的行为几乎和 preg_replace() 一样,除了不是提供一个 replacement 参数,而是指定一个 callback 函数。该函数将以目标字符串中的匹配数组作为输入参数,并返回用于替换的字符串。
例子 1. preg_replace_callback() 例子
You'll often need the callback function for a preg_replace_callback() in just one place. In this case you can use create_function() to declare an anonymous function as callback within the call to preg_replace_callback(). By doing it this way you have all information for the call in one place and do not clutter the function namespace with a callback functions name not used anywhere else.
对于使用 preg_replace_callback()函数的朋友来说,你应该回需要callback函数(否则用他干嘛,直接用preg_replace不是更好),不过也经常只是用一处。既然这样你可以用create_function()来声明一个匿名函数作为 preg_replace_callback()的回调函数。这样,我们即满足了声明信息的需要,有不致因这个不会再用到的函数名而混乱。
例子 2. preg_replace_callback() 和 create_function()
\s*\w|',
create_function(
// 这里使用单引号很关键,
// 否则就把所有的 $ 换成 \$
'$matches',
'return strtolower($matches[0]);'
),
$line
);
echo $line;
}
fclose($fp);
?>
---------------------------------------------------------------------------------------------
preg_split
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_split -- 用正则表达式分割字符串
不再赘述。
说明
array preg_split ( string pattern, string subject [, int limit [, int flags]] )
返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。
如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。
flags 可以是下列标记的任意组合(用按位或运算符 | 组合):
PREG_SPLIT_NO_EMPTY
如果设定了本标记,则 preg_split() 只返回非空的成分。
PREG_SPLIT_DELIM_CAPTURE
如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。本标记添加于 PHP 4.0.5。
PREG_SPLIT_OFFSET_CAPTURE
如果设定了本标记,如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
提示: 如果不需要正则表达式的功能,可以选择使用更快(也更简单)的替代函数如 explode() 或 str_split()。
标签:
PHP的正则处理函数总结分析
VI常用操作总结
光标的移动命令如下所示:
向右移动 --> l
向左移动 --> h
向下移动 --> j
向上移动 --> k
如上所示,例如要向右移动光标8个字符的距离,只要在键盘上敲 l 键8次即可;向下移动3行的距离,只要在键盘上敲 j 键3次即可……也就是说,在vi命令模式中通过这几个键(命令)来控制光标的移动。
--------------------------------------------------------------------------------
其次就是文本删除的命令。在Windows下大多数编辑器在删除文本时只要连续按[Backspace]键即可。但由于在vi中,插入模式和命令模式是分离开来的,所以在命令模式下需要通过命令(按键)来删除文本,而不是直接按[Backspace]键。
文本删除的命令如下所示:
删除光标所在位置的字符 --> x
删除光标所在的行 --> dd(敲 d 两次)
如上所示,例如要删除从光标位置起向右的3个字符,只要在键盘上敲 x 键3次即可;要删除光标所在的行,只要敲 dd (连续敲d键两次),光标所在行的所有字符以及行将会被删除。
--------------------------------------------------------------------------------
再次,当编辑完了一个文档,想要保存后退出的时候的命令为“ZZ”(大写、连续敲2次)。
保存并退出文档:
保存当前修改并退出 --> ZZ
--------------------------------------------------------------------------------
另外,vi还有一些编辑性质的命令,一并总结如下
具有编辑性质的有用的命令:
撤销上一步操作 --> u
移动光标到行首 --> 0 (数字0)
移动光标到行首 --> $
移动光标到当前页最顶行 --> H
移动光标到当前页最底行 --> L
向前翻一页(Page Up) --> Ctrl + f
向后翻一页(Page Down) --> Ctrl + b
--------------------------------------------------------------------------------
还有在服务器配置中使用vi时,频繁用到的就是vi的搜索功能。在vi命令行的状态下,键入“/”(斜 线)后,vi底部出现“/”,并处于输入等待状态,这时候输入要查找的文字或文字列,然后按回车就可以找到相应的文字或文字列。当有多个对象存在时,敲 “n”(小写)键为查找下一个目标,敲“N”为查找上一个目标。
ctrl+c 切换命令模式
i 插入模式
ZZ 退出VI
向右移动 --> l
向左移动 --> h
向下移动 --> j
向上移动 --> k
如上所示,例如要向右移动光标8个字符的距离,只要在键盘上敲 l 键8次即可;向下移动3行的距离,只要在键盘上敲 j 键3次即可……也就是说,在vi命令模式中通过这几个键(命令)来控制光标的移动。
--------------------------------------------------------------------------------
其次就是文本删除的命令。在Windows下大多数编辑器在删除文本时只要连续按[Backspace]键即可。但由于在vi中,插入模式和命令模式是分离开来的,所以在命令模式下需要通过命令(按键)来删除文本,而不是直接按[Backspace]键。
文本删除的命令如下所示:
删除光标所在位置的字符 --> x
删除光标所在的行 --> dd(敲 d 两次)
如上所示,例如要删除从光标位置起向右的3个字符,只要在键盘上敲 x 键3次即可;要删除光标所在的行,只要敲 dd (连续敲d键两次),光标所在行的所有字符以及行将会被删除。
--------------------------------------------------------------------------------
再次,当编辑完了一个文档,想要保存后退出的时候的命令为“ZZ”(大写、连续敲2次)。
保存并退出文档:
保存当前修改并退出 --> ZZ
--------------------------------------------------------------------------------
另外,vi还有一些编辑性质的命令,一并总结如下
具有编辑性质的有用的命令:
撤销上一步操作 --> u
移动光标到行首 --> 0 (数字0)
移动光标到行首 --> $
移动光标到当前页最顶行 --> H
移动光标到当前页最底行 --> L
向前翻一页(Page Up) --> Ctrl + f
向后翻一页(Page Down) --> Ctrl + b
--------------------------------------------------------------------------------
还有在服务器配置中使用vi时,频繁用到的就是vi的搜索功能。在vi命令行的状态下,键入“/”(斜 线)后,vi底部出现“/”,并处于输入等待状态,这时候输入要查找的文字或文字列,然后按回车就可以找到相应的文字或文字列。当有多个对象存在时,敲 “n”(小写)键为查找下一个目标,敲“N”为查找上一个目标。
ctrl+c 切换命令模式
i 插入模式
ZZ 退出VI
PHP错误信息分析
更好地理解错误信息可以大大节省确定并改正错误内容所花费的时间。因此,在本文中,我将努力阐明多种不同类型的PHP报错信息,以及在开发过程中如何正确理解各种报错信息的含义。
编译PHP脚本时,PHP编译器会尽其所能报告它遇到的第一个问题。这样就产生一个问题:只有当错误出现时,PHP才能将它识别出来(本文后面对此问题进行了详细描述)。正是由于这个缘故,编译器指出出错的那行,从表面上看来可能语法正确无误,或者可能是根本就不存在的一行!
本文中所讲述的内容与您所应用的PHP的版本无关,因为本文所描述的各种错误并不限定于某一特殊版本的特定错误。另外我们假定您是一位初级或者中级程序员,并已经从事编程工作有半年或一年的时间。
编译器的工作方式
要搞清楚编译器为什么会报告某一行上存在错误,首先必须明确编译器解析PHP代码的机制。我并不打算在本文中对此进行详细论述,但是,我们将会讨论一些更易于引发错误的简单概念。
变量声明
如果在一条语句中声明一个变量,具体方式如下所示:
$variable = 'value';
编译器首先求出语句右半部分的值(即等号右边的所有内容)。在一些编程书籍中,将此表示为语句的 RHS (右半部分)。恰恰正是语句的这一部分常常会引发错误。如果使用的语法不正确,就会出现解析错误。
解析错误
Parse error:解析错误,unexpected T_WHILE in c:\program files\apache group\apache\htdocs\script.PHP on line 19
每次确定了前一错误时,解析错误一个接一个地不断出现。因为PHP在第一个解析错误之后就停止执行脚本,调试并纠正这一系列的错误往往会让人觉得特别厌烦。
而且,解析错误具有很少的信息,几乎不报告错误所在的行号。具体原因就是当出现错误时,编译器判定好几行的语法看起来应该是有效的,直至遇到无效的语法,最可能的情形就是表达式中使用了预定义的字词,例如;while = 10; // Bad ? while 就是一个预定义字词,不能分配给一个值
预定义的字词包括 while、function等,如果PHP使用 uses to evaluate your code. 您不能使用这些预定义字词来命名变量,而且如果您非要这样做的话,PHP就会报出更多的错误,这是您无法忍受。
关于这个问题,下面的示例可能会对您有所帮助。请咨询阅读一下下面所示的PHP 代码:
$b = "somevalue"
if($b == "somevalue"){
print "Hello world!";
}
?>
错误位于"$b ="一行(在语句的末端缺少分号),所以错误应该是"解析错误:第3行缺少分号"对吧?而不应该依据解析器判定的:
Parse error: parse error, unexpected T_IF in c:\program files\apache
group\apache\htdocs\ereg2.PHP on line 4
在第4行,if() 语句的语法是正确的。那么,编译器是被什么给搞糊涂了呢?线索就是"unexpected T_IF" 部分。出现 "unexpected T_???"错误时,它所表示的含义为:编译器发现在预定义字不应该出现的位置出现。T_IF 代表 if(), T_WHILE 代表 while(), T_FOR 代表 for()等。
值得庆幸的是,一些错误的原因也很简单:
语句没有使用分号(;)结束,比如上面的示例。字符串中缺少引号。
其他一些常见的错误
我见过的最常见的错误就是,当没有使用大括号( } )结束一个函数或者一个循环时出现的错误,这很可能是最常见,最让人烦的错误。具体代码如下:
function UselessFunction() {
for($i < 0; $i < 10; $i++){
}
将产生下列错误:
Parse error: parse error, unexpected $ in c:\program files\apache
group\apache\htdocs\ereg2.PHP on line 9
由于函数 UselessFunction 没有使用大括号( } )来结束,PHP编译器不断查找表示结束的大括号直至到达文件末尾为止。因为编译器未找到一个匹配的大括号,就会报告文件末尾处有错误。
如果正确地反映了代码的层次结构,错误信息就会变得非常明显。如果没有标明代码的层次结构,那么最后要想查清楚到底忘记了什么也会变得几乎是不可能的。所以,请记住,一定要标明代码的层次结构。Tab键可以很容易地实现这一点。对后续的开发人员来说,把握代码框架并对其进行修改也会更容易一些。
MySQL 错误
另一极其令人讨厌的错误信息就是最常见的MySQL错误,这常常使 PHP新手感到颇为头疼: Warning: Supplied argument is not a valid MySQL result resource in...
上面所报告有错的一行可能是:
while($row = MySQL_fetch_array($result)) {
参数 $result并不是一个有效的资源。在英语中它表示因为查询失败,将无法处理mysql_fetch_array。任一查询的语法无效(您应该将查询复制-粘贴到MySQL 控制台参考来进行测试),或者与数据库的连接失败(这种情况下您应该再次检查用户名和口令等)。
防止错误发生
第一步,智能代码器可采取以下几步来消除下列错误出现:
· 在每一条语句的末尾处,不必考虑添加分号——这应该成为一种习惯。
· 总是要尽可能标明代码的层次结构,这可以使您能够查看是否忘记在if 调用或函数末端等位置添加大括号。
· 请使用可突出显示语法的编辑器(如 HTML-Kit)。有了这类编辑器的辅助,您就能确定是否忘记了添加引号,是否缺少分号等。
结论
本文我们对PHP编译器可报出的一些看起来可能没有什么意义的错误有了一定的了解。我们需要将所学的知识应用到如何避免错误以及错误出现时如何纠正错误。调试是一个开发人员所有工作中的最重要的部分之一。提高调试效率可大大加快整个工作的进度,缩短完成一项工程所需花费的时间,同时还可以明显减轻代码失败所带来的精神压力。
我们编写程序时,无论怎样小心谨慎,犯错总是在所难免的。这些错误通常会迷惑PHP编译器。如果开发人员无法了解编译器报错信息的含义,那么这些错误信息不仅毫无用处,还会常常让人感到沮丧。
编译PHP脚本时,PHP编译器会尽其所能报告它遇到的第一个问题。这样就产生一个问题:只有当错误出现时,PHP才能将它识别出来(本文后面对此问题进行了详细描述)。正是由于这个缘故,编译器指出出错的那行,从表面上看来可能语法正确无误,或者可能是根本就不存在的一行!
本文中所讲述的内容与您所应用的PHP的版本无关,因为本文所描述的各种错误并不限定于某一特殊版本的特定错误。另外我们假定您是一位初级或者中级程序员,并已经从事编程工作有半年或一年的时间。
编译器的工作方式
要搞清楚编译器为什么会报告某一行上存在错误,首先必须明确编译器解析PHP代码的机制。我并不打算在本文中对此进行详细论述,但是,我们将会讨论一些更易于引发错误的简单概念。
变量声明
如果在一条语句中声明一个变量,具体方式如下所示:
$variable = 'value';
编译器首先求出语句右半部分的值(即等号右边的所有内容)。在一些编程书籍中,将此表示为语句的 RHS (右半部分)。恰恰正是语句的这一部分常常会引发错误。如果使用的语法不正确,就会出现解析错误。
解析错误
Parse error:解析错误,unexpected T_WHILE in c:\program files\apache group\apache\htdocs\script.PHP on line 19
每次确定了前一错误时,解析错误一个接一个地不断出现。因为PHP在第一个解析错误之后就停止执行脚本,调试并纠正这一系列的错误往往会让人觉得特别厌烦。
而且,解析错误具有很少的信息,几乎不报告错误所在的行号。具体原因就是当出现错误时,编译器判定好几行的语法看起来应该是有效的,直至遇到无效的语法,最可能的情形就是表达式中使用了预定义的字词,例如;while = 10; // Bad ? while 就是一个预定义字词,不能分配给一个值
预定义的字词包括 while、function等,如果PHP使用 uses to evaluate your code. 您不能使用这些预定义字词来命名变量,而且如果您非要这样做的话,PHP就会报出更多的错误,这是您无法忍受。
关于这个问题,下面的示例可能会对您有所帮助。请咨询阅读一下下面所示的PHP 代码:
$b = "somevalue"
if($b == "somevalue"){
print "Hello world!";
}
?>
错误位于"$b ="一行(在语句的末端缺少分号),所以错误应该是"解析错误:第3行缺少分号"对吧?而不应该依据解析器判定的:
Parse error: parse error, unexpected T_IF in c:\program files\apache
group\apache\htdocs\ereg2.PHP on line 4
在第4行,if() 语句的语法是正确的。那么,编译器是被什么给搞糊涂了呢?线索就是"unexpected T_IF" 部分。出现 "unexpected T_???"错误时,它所表示的含义为:编译器发现在预定义字不应该出现的位置出现。T_IF 代表 if(), T_WHILE 代表 while(), T_FOR 代表 for()等。
值得庆幸的是,一些错误的原因也很简单:
语句没有使用分号(;)结束,比如上面的示例。字符串中缺少引号。
其他一些常见的错误
我见过的最常见的错误就是,当没有使用大括号( } )结束一个函数或者一个循环时出现的错误,这很可能是最常见,最让人烦的错误。具体代码如下:
function UselessFunction() {
for($i < 0; $i < 10; $i++){
}
将产生下列错误:
Parse error: parse error, unexpected $ in c:\program files\apache
group\apache\htdocs\ereg2.PHP on line 9
由于函数 UselessFunction 没有使用大括号( } )来结束,PHP编译器不断查找表示结束的大括号直至到达文件末尾为止。因为编译器未找到一个匹配的大括号,就会报告文件末尾处有错误。
如果正确地反映了代码的层次结构,错误信息就会变得非常明显。如果没有标明代码的层次结构,那么最后要想查清楚到底忘记了什么也会变得几乎是不可能的。所以,请记住,一定要标明代码的层次结构。Tab键可以很容易地实现这一点。对后续的开发人员来说,把握代码框架并对其进行修改也会更容易一些。
MySQL 错误
另一极其令人讨厌的错误信息就是最常见的MySQL错误,这常常使 PHP新手感到颇为头疼: Warning: Supplied argument is not a valid MySQL result resource in...
上面所报告有错的一行可能是:
while($row = MySQL_fetch_array($result)) {
参数 $result并不是一个有效的资源。在英语中它表示因为查询失败,将无法处理mysql_fetch_array。任一查询的语法无效(您应该将查询复制-粘贴到MySQL 控制台参考来进行测试),或者与数据库的连接失败(这种情况下您应该再次检查用户名和口令等)。
防止错误发生
第一步,智能代码器可采取以下几步来消除下列错误出现:
· 在每一条语句的末尾处,不必考虑添加分号——这应该成为一种习惯。
· 总是要尽可能标明代码的层次结构,这可以使您能够查看是否忘记在if 调用或函数末端等位置添加大括号。
· 请使用可突出显示语法的编辑器(如 HTML-Kit)。有了这类编辑器的辅助,您就能确定是否忘记了添加引号,是否缺少分号等。
结论
本文我们对PHP编译器可报出的一些看起来可能没有什么意义的错误有了一定的了解。我们需要将所学的知识应用到如何避免错误以及错误出现时如何纠正错误。调试是一个开发人员所有工作中的最重要的部分之一。提高调试效率可大大加快整个工作的进度,缩短完成一项工程所需花费的时间,同时还可以明显减轻代码失败所带来的精神压力。
我们编写程序时,无论怎样小心谨慎,犯错总是在所难免的。这些错误通常会迷惑PHP编译器。如果开发人员无法了解编译器报错信息的含义,那么这些错误信息不仅毫无用处,还会常常让人感到沮丧。
$_SERVER详细参数
$_SERVER详细参数,方便调用与查询。
$_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关。
$_SERVER['argv'] #传递给该脚本的参数。
$_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
$_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称。
$_SERVER['SERVER_SOFTWARE'] #服务器标识的字串,在响应请求时的头部中给出。
$_SERVER['SERVER_PROTOCOL'] #请求页面时通信协议的名称和版本。如,“HTTP/1.0”。
$_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”“HEAD”,“POST”,“PUT”。
$_SERVER['QUERY_STRING'] #查询(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER['HTTP_ACCEPT'] #当前请求的 Accept: 头部的内容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
$_SERVER['HTTP_ACCEPT_ENCODING'] #当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#当前请求的 Accept-Language: 头部的内容。例如:“en”。
$_SERVER['HTTP_CONNECTION'] #当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容。
$_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] #当前请求的 User_Agent: 头部的内容。
$_SERVER['HTTPS'] — 如果通过https访问,则被设为一个非空的值(on),否则返回off
$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址。
$_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名。
$_SERVER['REMOTE_PORT'] #用户连接到服务器时所使用的端口。
$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。
$_SERVER['SERVER_ADMIN'] #管理员信息
$_SERVER['SERVER_PORT'] #服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html”。
$_SERVER['PHP_AUTH_USER'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER['PHP_AUTH_PW'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型
$_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关。
$_SERVER['argv'] #传递给该脚本的参数。
$_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
$_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称。
$_SERVER['SERVER_SOFTWARE'] #服务器标识的字串,在响应请求时的头部中给出。
$_SERVER['SERVER_PROTOCOL'] #请求页面时通信协议的名称和版本。如,“HTTP/1.0”。
$_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”“HEAD”,“POST”,“PUT”。
$_SERVER['QUERY_STRING'] #查询(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER['HTTP_ACCEPT'] #当前请求的 Accept: 头部的内容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
$_SERVER['HTTP_ACCEPT_ENCODING'] #当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#当前请求的 Accept-Language: 头部的内容。例如:“en”。
$_SERVER['HTTP_CONNECTION'] #当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容。
$_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] #当前请求的 User_Agent: 头部的内容。
$_SERVER['HTTPS'] — 如果通过https访问,则被设为一个非空的值(on),否则返回off
$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址。
$_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名。
$_SERVER['REMOTE_PORT'] #用户连接到服务器时所使用的端口。
$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。
$_SERVER['SERVER_ADMIN'] #管理员信息
$_SERVER['SERVER_PORT'] #服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html”。
$_SERVER['PHP_AUTH_USER'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER['PHP_AUTH_PW'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型
标签:
$_SERVER详细参数
持续集成CruiseControl电子书
CruiseControl简介
持续集成(Continuous Integration)这个术语源自 XP(极限编程)的一个最佳实践,随着XP 社区在近几年的壮大,XP 的很多实践得到了广泛的推广,持续集成就是其中之一,但是持续集成并非 XP 的专利,持续集成完全可以应用在采取非XP 方法(例如 RUP)的项目里面。持续集成也不是一个新的概念,在这个术语出现之前,daily build提供同样的含义,他们的主要区别就在于实施的频率上,随着 XP 社区的大师级人物 Martin Fowler的一篇《Continuous Integration》正式为其正名,持续集成这个术语就越来越多地出现daily build中。同时,Martin Fowler 所在的公司 ThoughtWorks 开放了其持续集成的工具 CruiseControl 的源代码,持续集成对于大部分开发人员来说就不再只是停留在口头上的漂亮的术语,任何人在掌握了持续集成的基础理论后,都可以使用 CruiseControl 来体会持续集成在项目开发中的巨大威力。
点击:电子书下载
官方网址
http://cruisecontrol.sourceforge.net/
持续集成(Continuous Integration)这个术语源自 XP(极限编程)的一个最佳实践,随着XP 社区在近几年的壮大,XP 的很多实践得到了广泛的推广,持续集成就是其中之一,但是持续集成并非 XP 的专利,持续集成完全可以应用在采取非XP 方法(例如 RUP)的项目里面。持续集成也不是一个新的概念,在这个术语出现之前,daily build提供同样的含义,他们的主要区别就在于实施的频率上,随着 XP 社区的大师级人物 Martin Fowler的一篇《Continuous Integration》正式为其正名,持续集成这个术语就越来越多地出现daily build中。同时,Martin Fowler 所在的公司 ThoughtWorks 开放了其持续集成的工具 CruiseControl 的源代码,持续集成对于大部分开发人员来说就不再只是停留在口头上的漂亮的术语,任何人在掌握了持续集成的基础理论后,都可以使用 CruiseControl 来体会持续集成在项目开发中的巨大威力。
点击:电子书下载
官方网址
http://cruisecontrol.sourceforge.net/
订阅:
博文 (Atom)