1.关于字符串的处理相关函数
(1)rtrim(string,charlist)函数从字符串的末端开始删除空白字符或其他预定义字符。
参数 描述
string 必需。规定要转换的字符串。
charlist 可选。规定从字符串中删除哪些字符。
如果未设置该参数,则全部删除以下字符:
"/0" - ASCII 0, NULL
"/t" - ASCII 9, 制表符
"/n" - ASCII 10, 新行
"/x0B" - ASCII 11, 垂直制表符
"/r" - ASCII 13, 回车
例子
在本例中,我们将使用 rtrim() 函数从字符串右端删除字符:
<?php
$str = "Hello World!/n/n";
echo $str;
echo rtrim($str);
?>
以上代码输出的源代码:
<html>
<body>
Hello World!
Hello World!
</body>
</html>
输出:
Hello World! Hello World!
(2)stripcslashes() 函数删除由 addcslashes() 函数添加的反斜杠。
语法
stripcslashes(string)
参数 描述
string 必需。规定要检查的字符串。
提示和注释
释:该函数用于清理从数据库中取回的数据。
例子
<?php
echo stripcslashes("Hello, /my na/me is Kai Ji/m.");
?>
输出:
Hello, my name is Kai Jim
(3)htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号) 成为 &
" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
htmlspecialchars(string,quotestyle,character-set)
参数 描述
string 必需。规定要转换的字符串。
quotestyle 可选。规定如何编码单引号和双引号。
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
character-set 可选。字符串值,规定要使用的字符集。
ISO-8859-1 - 默认。西欧。
ISO-8859-15 - 西欧(增加 Euro 符号以及法语、芬兰语字母)。
UTF-8 - ASCII 兼容多字节 8 比特 Unicode
cp866 - DOS 专用 Cyrillic 字符集
cp1251 - Windows 专用 Cyrillic 字符集
cp1252 - Windows 专用西欧字符集
KOI8-R - 俄语
GB2312 - 简体中文,国家标准字符集
BIG5 - 繁体中文
BIG5-HKSCS - Big5 香港扩展
Shift_JIS - 日语
EUC-JP - 日语
提示和注释
提示:无法被识别的字符集将被忽略,并由 ISO-8859-1 代替。
例子
<html>
<body>
<?php
$str = "John & 'Adams'";
echo htmlspecialchars($str, ENT_COMPAT);
echo "<br />";
echo htmlspecialchars($str, ENT_QUOTES);
echo "<br />";
echo htmlspecialchars($str, ENT_NOQUOTES);
?>
</body>
</html>
浏览器输出:
John & 'Adams'
John & 'Adams'
John & 'Adams'
如果在浏览器中查看源代码,会看到这些 HTML:
<html>
<body>
John & 'Adams'<br />
John & 'Adams'<br />
John & 'Adams'
</body>
</html>
(4)stripos() 函数返回字符串在另一个字符串中第一次出现的位置。如果没有找到该字符串,则返回 false。
语法
stripos(string,find,start)
参数 描述
string 必需。规定被搜索的字符串。
find 必需。规定要查找的字符。
start 可选。规定开始搜索的位置。
提示和注释
注释:该函数对大小写不敏感。如需进行对大小写敏感的搜索,请使用 strpos() 函数。
例子
<?php
echo stripos("Hello world!","WO");
?>
输出:6
(5)stristr() 函数查找字符串在另一个字符串中第一次出现的位置。如果成功,则返回字符串的其余部分(从匹配点)。如果没有找到该字符串,则返回 false。
语法
stristr(string,search)
参数 描述
string 必需。规定被搜索的字符串。
find 必需。规定要查找的字符。如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符。
提示和注释
注释:该函数是二进制安全的。
注释:该函数对大小写不敏感。如需对大小写敏感的搜索,请使用 strstr()。
例子 1
<?php
echo stristr("Hello world!","WORLD");
?>
输出:
world!
例子 2
<?php
echo stristr("Hello world!",111);
?>
输出:
o world!
(6)strtoupper() 函数把字符串转换为大写。
定义和用法
strtoupper() 函数把字符串转换为大写。
语法
strtoupper(string)参数 描述
string 必需。规定要转换的字符串。
例子
<?php
echo strtoupper("Hello WORLD!");
?>输出:
HELLO WORLD!PHP String 函数
(7)strtolowwer()
2.关于数字的处理相关函数
(1)ceil — 进一法取整
返回不小于 value 的下一个整数,value 如果有小数部分则进一位。
ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。
<?phpecho
ceil(4.3); // 5echo ceil(9.999); // 10
?>
3.关于日期的处理相关函数
(1)date() 函数的第一个参数规定了如何格式化日期/时间。它使用字母来表示日期和时间的格式。这里列出了一些可用的字母:
d - 月中的天 (01-31)
m - 当前月,以数字计 (01-12)
Y - 当前的年(四位数)
您可以在我们的 PHP Date 参考手册中,找到格式参数中可以使用的所有字母。
可以在字母之间插入其他字符,比如 "/"、"." 或者 "-",这样就可以增加附加格式了:
<?php
echo date("Y/m/d");
echo "<br />";
echo date("Y.m.d");
echo "<br />";
echo date("Y-m-d");
?>
以上代码的输出类似这样:
2006/07/11
2006.07.11
(2)mktime() 函数可为指定的日期返回 Unix 时间戳。
语法
mktime(hour,minute,second,month,day,year,is_dst)如需获得某一天的时间戳,我们只要设置 mktime() 函数的 day 参数就可以了:
<?php
$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
?>
以上代码的输出类似这样:
明天是 2006/07/12
3.数组方面
(1)
定义和用法
in_array() 函数在数组中搜索给定的值。
语法
in_array(value,array,type)参数 描述
value 必需。规定要在数组搜索的值。
array 必需。规定要搜索的数组。
type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
说明
如果给定的值 value 存在于数组 array 中则返回 true。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。
如果没有在数组中找到参数,函数返回 false。
注释:如果 value 参数是字符串,且 type 参数设置为 true,则搜索区分大小写。
例子 1
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
if (in_array("Glenn",$people))
{
echo "Match found";
}
else
{
echo "Match not found";
}
?>输出:
Match found例子 2
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland", 23);
if (in_array("23",$people, TRUE))
{
echo "Match found<br />";
}
else
{
echo "Match not found<br />";
}if (in_array("Glenn",$people, TRUE))
{
echo "Match found<br />";
}
else
{
echo "Match not found<br />";
}if (in_array(23,$people, TRUE))
{
echo "Match found<br />";
}
else
{
echo "Match not found<br />";
}
?>输出:
Match not found
Match found
Match found
(2)array_unshift()
array_unshift() 函数在数组开头插入一个或多个元素。
被加上的元素作为一个整体添加,这些元素在数组中的顺序和在参数中的顺序一样。
该函数会返回数组中元素的个数。
语法
array_unshift(array,value1,value2,value3...)
参数
描述
array必需。规定输入的数组。
value1必需。规定插入的值。
value2可选。规定插入的值。
value3可选。规定插入的值。
提示和注释
注释:所有的数值键名将修改为从零开始重新计数,所有的字符串键名保持不变。
例子 2
返回键值:
<?php $a=array("a"=>"Cat","b"=>"Dog"); print_r(array_unshift($a,"Horse")); ?>
输出:
3
例子 3
数组带有数值键:
<?php $a=array(0=>"Cat",1=>"Dog"); array_unshift($a,"Horse"); print_r($a); ?>
输出:
Array ( [0] => Horse [1] => Cat [2] => Dog )
(3)PHP array_push() 函数
定义和用法
array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
该函数等于多次调用 $array[] = $value。
语法
array_push(array,value1,value2...)
参数
描述
array
必需。规定一个数组。
value1
必需。规定要添加的值。
value2
可选。规定要添加的值。
提示和注释
注释:即使数组中有字符串键名,您添加的元素也始终是数字键。(参见例子 2)
注释:如果用 array_push() 来给数组增加一个单元,还不如用 $array[] =,因为这样没有调用函数的额外负担。
注释:如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。
例子 1
<?php $a=array("Dog","Cat"); array_push($a,"Horse","Bird"); print_r($a); ?>
输出:
Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )
例子 2
带有字符串键的数组:
<?php $a=array("a"=>"Dog","b"=>"Cat"); array_push($a,"Horse","Bird"); print_r($a); ?>
输出:
Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird )
(4)array_pop
说明
mixed array_pop ( array &$array )
array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL。
Note: 使用本函数后会重置(reset())数组指针。
Example #1 array_pop() 例子
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
print_r($stack);
?>
经过此操作后,$stack 将只有 3 个单元:
Array ( [0] => orange [1] => banana [2] => apple )
并且 rasberry 将被赋给 $fruit。
(5)array_shift
array_shift
(PHP 4, PHP 5)
array_shift — 将数组开头的单元移出数组
说明
mixed array_shift ( array &$array )
array_shift() 将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。如果 array 为空(或者不是数组),则返回 NULL。
Note: 使用本函数后会重置(reset())数组指针。
Example #1 array_shift() 例子
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);
?>
这将使 $stack 剩下 3 个单元:
Array ( [0] => banana [1] => apple [2] => raspberry )
并且 orange 被赋给了 $fruit。
4.Filesystem 函数
(1)PHP dirname() 函数
定义和用法
dirname() 函数返回路径中的目录部分。
语法
dirname(path)参数 描述
path 必需。规定要检查的路径。
说明
path 参数是一个包含有指向一个文件的全路径的字符串。该函数返回去掉文件名后的目录名。
例子
<?php
echo dirname("c:/testweb/home.php");
echo dirname("/testweb/home.php");
?>输出:
c:/testweb
/testweb
从今将以这种形式来记录日常的遇到函数,便于增强记忆 ———2011.04.27
===========================================================================
->函数名 :ignore_user_abort()
定义和用法
ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行。
本函数返回 user-abort 设置的之前的值(一个布尔值)。
语法
ignore_user_abort(setting)
参数 描述
setting 可选。如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行。
如果未设置该参数,会返回当前的设置。
提示和注释
注释:PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止。简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数。
例子
<?php ignore_user_abort(); ?>
输出:
0
===========================================================================
->函数名:set_time_limit()
函数说明
(PHP 4中,PHP 5中) set_time_limit - 限制最大的执行时间
函数定义
void set_time_limit ( int $seconds )
设置允许脚本运行的秒数。如果这是达成共识,该脚本返回一个致命的错误。默认限制为30秒,或者,如果它存在,价值的max_execution_time在php.ini定义。
在调用时,set_time_limit()函数从零重新启动超时计数器。换句话说,如果超时默认的30秒,25秒到脚本的执行参数或者set_time_limit,如电话(20)制成,该脚本将运行45秒的总超时之前。
参数
参数 描述
$seconds 为整型,最大执行时间,以秒计。如果设置为零,没有时间方面的限制。
返回值
没有返回值。警告
这个函数没有影响当PHP运行在安全模式 。有没有解决方法以外的其他安全模式下关闭或改变了 php.ini 程序运行时间。注意
set_time_limit()函数和配置指令max_execution_time仅仅只影响脚本本身的执行时间。任何时间运行程序的操作,在脚本执行系统调用,如使用 system(),流操作,数据库查询等,不包括在确定的最大时间,该脚本已运行。这不是在Windows如此,因为测量的时间是真实的。实例说明
例-1
如果打开没有安全模式,设置程序运行时间为25秒。例如:<?php
if( !ini_get('safe_mode') ){
set_time_limit(25);
}
?>
例-2
当用了set_time_limit()函数设置运行时间, sleep()函数在执行程序时的持续时间将会被忽略掉。例如:<?php
set_time_limit(20);
while ($i<=10)
{
echo "i=$i ";
sleep(100);
$i++;
}
?>[1]
===========================================================================
->函数名:file_get_contents()
定义和用法
file_get_contents() 函数把整个文件读入一个字符串中。
和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
语法
file_get_contents(path,include_path,context,start,max_length)
参数 描述
path 必需。规定要读取的文件。
include_path 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context 可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。
max_length 可选。规定读取的字节数。该参数是 PHP 5.1 新加的。
说明
对 context 参数的支持是 PHP 5.0.0 添加的。
提示和注释
注释:本函数可安全用于二进制对象。
例子
<?php echo file_get_contents("test.txt"); ?>
输出:
This is a test file with test text.
===========================================================================
->函数名: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] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=left>this is a test</div>",
$out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."/n";
print $out[1][0].", ".$out[1][1]."/n";
?>
本例将输出:
<b>example: </b>, example:
<div align=left>this is a test</div>, 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. 从某文本中取得所有的电话号码<?php
preg_match_all ("//(? (/d{3})? /)? (?(1) [/-/s] ) /d{3}-/d{4}/x",
"Call 555-1212 or 1-800-555-1212", $phones);
?>
例子 2. 搜索匹配的 HTML 标记(greedy)
<?php
// //2 是一个逆向引用的例子,其在 PCRE 中的含义是
// 必须匹配正则表达式本身中第二组括号内的内容,本例中
// 就是 ([/w]+)。因为字符串在双引号中,所以需要
// 多加一个反斜线。
$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all ("/(<([/w]+)[^>]*>)(.*)(<2>)/", $html, $matches);
for ($i=0; $i< count($matches[0]); $i++) {
echo "matched: ".$matches[0][$i]."/n";
echo "part 1: ".$matches[1][$i]."/n";
echo "part 2: ".$matches[3][$i]."/n";
echo "part 3: ".$matches[4][$i]."/n/n";
}
?>
本例将输出:
matched: <b>bold text</b>
part 1: <b>
part 2: bold text
part 3: </b>
matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: click me
part 3: </a>
===========================================================================
->函数名:array_unique( )
定义和用法
array_unique() 函数移除数组中的重复的值,并返回结果数组。当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。
返回的数组中键名不变。
语法
array_unique(array)
参数
描述
array
必需。规定输入的数组。
说明
array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。提示和注释
注释:被返回的数组将保持第一个数组元素的键类型。
例子
<?php $a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat");
print_r(array_unique($a));
?>
输出:
Array ( [a] => Cat [b] => Dog )
===========================================================================
->函数名:fopen()
定义和用法
fopen() 函数打开文件或者 URL。
如果打开失败,本函数返回 FALSE。
语法
fopen(filename,mode,include_path,context)
参数 描述
filename 必需。规定要打开的文件或 URL。
mode 必需。规定要求到该文件/流的访问类型。可能的值见下表。
include_path 可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。
mode 参数的可能的值
mode 说明
"r" 只读方式打开,将文件指针指向文件头。
"r+" 读写方式打开,将文件指针指向文件头。
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x" 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_ WARNING 级别的错误信息。如果文件不存在则尝试创建之。
这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
"x+" 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_ WARNING 级别的错误信息。如果文件不存在则尝试创建之。
这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件
提示和注释
注释:不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于 Unix 的系统使用 /n 作为行结束字符,基于 Windows 的系统使用 /r/n 作为行结束字符,基于 Macintosh 的系统使用 /r 作为行结束字符。 如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。
Windows 下提供了一个文本转换标记("t")可以透明地将 /n 转换为 /r/n。与此对应还可以使用 "b" 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 "b" 或者用 "t" 作为 mode 参数的最后一个字符。
默认的转换模式依赖于 SAPI 和所使用的 PHP 版本,因此为了便于移植鼓励总是指定恰当的标记。如果是操作纯文本文件并在脚本中使用了 /n 作为行结束符,但还要期望这些文件可以被其它应用程序例如 Notepad 读取,则在 mode 中使用 "t"。在所有其它情况下使用 "b"。
在操作二进制文件时如果没有指定 "b" 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 /r/n 字符的奇怪问题。
注释:为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 "b" 标记。
注释:再一次,为移植性考虑,强烈建议你重写那些依赖于 "t" 模式的代码使其使用正确的行结束符并改成 "b" 模式。
例子
<?php $file = fopen("test.txt","r"); $file = fopen("/home/test/test.txt","r"); $file = fopen("/home/test/test.gif","wb"); $file = fopen("http://www.example.com/","r"); $file = fopen("ftp://user:password@example.com/test.txt","w"); ?>
====================================================================================
->函数名:fwrite()
定义和用法
fwrite() 函数写入文件(可安全用于二进制文件)。
语法
fwrite(file,string,length)
参数 描述
file 必需。规定要写入的打开文件。
string 必需。规定要写入文件的字符串。
length 可选。规定要写入的最大字节数。
说明
fwrite() 把 string 的内容写入文件指针 file 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
fwrite() 返回写入的字符数,出现错误时则返回 false。
例子
<?php $file = fopen("test.txt","w"); echo fwrite($file,"Hello World. Testing!"); fclose($file); ?>
输出:
21
====================================================================================
->函数名:sleep()
定义和用法
sleep() 函数延迟代码执行若干秒。
语法
sleep(seconds)
参数
描述
seconds
必需。以秒计的暂停时间。
返回值
若成功,返回 0,否则返回 false。
错误/异常
如果指定的描述 seconds 是负数,该函数将生成一个 E_WARNING。
例子
<?php
echo date('h:i:s') . "<br />";
//暂停 10 秒
sleep(10);
//重新开始
echo date('h:i:s');
?>
输出:
12:00:08 12:00:18
遇到函数 ———2011.05.03
===========================================================================
->函数名 :PHP highlight_file() 函数
定义和用法
highlight_file() 函数对文件进行语法高亮显示。
语法
highlight_file(filename,return)
参数 描述
filename 必需。要进行高亮处理的 PHP 文件的路径。
return 可选。如果设置 true,则本函数返回高亮处理的代码。
说明
本函数通过使用 PHP 语法高亮程序中定义的颜色,输出或返回包含在 filename 中的代码的语法高亮版本。
许多服务器被配置为对带有 phps 后缀的文件进行自动高亮处理。例如,在查看 example.phps 时,将显示该文件被语法高亮显示的源代码。要启用该功能,请把下面这一行添加到 httpd.conf:
AddType application/x-httpd-php-source .phps
返回值
如果 return 参数被设置为 true,那么该函数会返回被高亮处理的代码,而不是输出它们。否则,若成功,则返回 true,失败则返回 false。
提示和注释
警告:需要注意的是,在使用 highlight_file() 函数时,请不要因为疏忽而泄露诸如密码或其他类型的敏感信息,否则会出现潜在的安全风险。
例子
"test.php":
<html> <body> <?php highlight_file("test.php"); ?> </body> </html>
输出:
<html> <body> <?php highlight_file("test.php"); ?> </body> </html>
在浏览器中查看的结果类似这样:
<html> <body> <code> <span style="color: #000000"><html> <br /> <body> <br /> <span style="color: #0000BB"><?php <br />highlight_file</span> <span style="color: #007700">(</span> <span style="color: #DD0000">"test.php"</span> <span style="color: #007700">);<br /></span> <span style="color: #0000BB">?><br /></span> </body> <br /> </html></span> </code> </body> </html>
遇到函数 ———2011.05.04
===========================================================================
->函数名 :parse_url
array parse_url ( string $url )
本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。
本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分。不完整的 URL 也被接受,parse_url() 会尝试尽量正确地将其解析。
返回值
对严重不合格的 URL,parse_url() 可能会返回 FALSE 并发出 E_WARNING。否则会返回一个关联数组,其组成部分为(至少有一个):
- scheme - 如 http
- host
- port
- user
- pass
- path
- query - 在问号 ? 之后
- fragment - 在散列符号 # 之后
注释
Note:
本函数不能用于相对 URL。
Note:
parse_url() 是专门用来解析 URL 而不是 URI 的。不过为遵从 PHP 向后兼容的需要有个例外,对 file:// 协议允许三个斜线(file:///...)。其它任何协议都不能这样。
->函数名 :fsockopen
语法: int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);
返回值: 整数
函数种类: 网络系统
hostname 参数表示到 socket 的主机,
port 配置为 主机端口。
timeout 选项表示多久没有连上就中断,可省略。
errno 及 errstr 也是可省略的,主要当做错误处理使用。
在使用本函数之后会返回文件指针,供文件函数使用,包括 fgets()、fgetss()、fputs()、fclose() 与 feof()。
使用本函数,会使用搁置模式 (blocking mode) 处理,可用 set_socket_blocking() 转换成无搁置模式。
下面实例用来模拟成 HTTP 连接。
<?php
$fp = fsockopen(“php.wilson.gs”, 80, &$errno, &$errstr, 10);
if(!$fp) {
echo “$errstr ($errno)<br>/n”;
} else {
fputs($fp,”GET / HTTP/1.0/nHost: php.wilson.gs/n/n”);
while(!feof($fp)) {
echo fgets($fp,128);
}
fclose($fp);
}
?>
当服务器没开启fsockopen功能的时候,用fsockopen会提示undefine fsockopen,解决办法如下:
1.打开php.ini文件,将allow_url_fopen 的值设置成 On
2.php.ini文件中找到
extension=php_openssl.dll
如果前面有分号,去掉分号
3.重启web服务器,apache或IIS
->函数名 :stream_set_blocking()
stream_set_blocking ($resource, $flag); $flag 取值为0或1
0是非阻塞,1是阻塞
阻塞的意义是什么呢?
某个函数读取一个网络流,当没有未读取字节的时候,程序该怎么办?
是一直等待,直到下一个未读取的字节的出现,还是立即告诉调用者当前没有新内容?
前者是阻塞的,后者是非阻塞的。
阻塞的好处是,排除其它非正常因素,阻塞的是按顺序执行的同步的读取。
借用小说里的说法就是“神刀出鞘,无血不归”。在读到新内容之前,它不会往下走,什么别的事情都不做。
而非阻塞,因为不必等待内容,所以能异步的执行,现在读到读不到都没关系,执行读取操作后立刻就继续往下做别的事情。
如果你不放心,可以过一定的时间再来检查执行的结果。之前我写过一个用popen pclose来让程序并发执行的例子。
当时的遗憾就是调用之后不管,所以没法知道程序是否执行成功了。现在popen之后设定为非阻塞模式,就可以创建一个数组作为任务池。
使用一个while(1)的“死循环”来检查当前任务池中各个任务的状态,有老任务执行完毕时,$status = stream_get_meta_data($resource);
状态值$status['eof']为真,就表示那个任务执行完毕了。我本次实现的程序功能比较单一,只需要知道它执行完毕就可以了。如果你的任务有多种结果,那就继续分析读取到的内容吧。发现有任务执行完毕,从任务池中剔除该任务,如果任务队列中还有未做的任务,就把新任务从队列中移到任务池中执行。
说的比较啰嗦,如果你用过网络蚂蚁或网际快车之类的下载软件,你会发现我讲的这些其实就是它们的工作原理。
ps:多进程异步抓取很爽啊
stream_set_timeout用法
stream_set_timeout的使用方法
2007-12-11 15:45
PHP函数stream_set_timeout(Stream Functions)作用于读取流时的时间控制。fsockopen函数的timeout只管创建连接时的超时,对于连接后读取流时的超时,则需要用到 stream_set_timeout函数。由于国内的网络环境不是很稳定,尤其是连接国外的时候,不想程序出现Fatal error: Maximum execution time of 30 seconds exceeded in …的错误,该函数尤其有用。stream_set_timeout需配合stream_get_meta_data使用,如果没有timeout, stream_get_meta_data返回数组中time_out为空,反之为1,可根据此判断是否超时。另外由于PHP默认的Maximum execution time为30秒,这是一次执行周期的时间,为了不出现上述的Fatal error,还需要设置一个总的读取流的时间,具体方法参见下面详细代码。
$server="www.yahoo.com";
$port = 80;
$data="GET / HTTP/1.0rn";
$data.="Connection: Closern";
$data.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)rnrn";
$start_time = time();
$fp=fsockopen($server, $port, $errno, $errstr, 5);
if (!$fp) {
die("Connect Timeout.n");
} else {
stream_set_blocking($fp, True);
stream_set_timeout($fp, 3);
fputs($fp, "$data");
while (!feof($fp)) {
$text .= fread($fp, 2000);
$diff = time() - $start_time;
if ($diff > 24) {
die("Timeout!n");
}
$status = stream_get_meta_data($fp);
if ($status[’timed_out’]) {
die("Stream Timeout!n");
}
}
}
fclose($fp);
?>
遇到函数 ———2011.05.09
==========================================================================
->函数名 :array_change_key_case()
array_change_key_case() 函数将数组的所有的 KEY 都转换为大写或小写。
数组的数字索引不发生变化。如果未提供可选参数(即第二个参数),则默认转换为小写字母。
语法
array_change_key_case(array,case)
参数 描述
array 必需。规定要使用的数组。
case 可选。可能的值:
- CASE_LOWER - 默认值。以小写字母返回数组的键。
- CASE_UPPER - 以大写字母返回数组的键。
提示和注释:
注释:如果在运行该函数时两个或多个键相同,则最后的元素会覆盖其他元素(参见例子 2)。
例子 1
<?php $a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse"); print_r(array_change_key_case($a,CASE_UPPER)); ?>
输出:
Array ( [A] => Cat [B] => Dog [C] => Horse )
例子 2
<?php $a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse","B"=>"Bird"); print_r(array_change_key_case($a,CASE_UPPER)); ?>
输出:
Array ( [A] => Cat [B] => Bird [C] => Horse )
->函数名 :setcookie()
创建 cookie
通过 setcookie() 函数来创建一个 cookie ,成功返回 TRUE ,否则返回 FALSE 。
语法:
bool setcookie( string name [, string value [, int expire [, string path [, string domain ]]]] )参数说明:
参数 说明
name cookie 名称
value 可选,cookie 值
expire 可选,过期时间,时间戳格式
path 可选,服务器端有效路径,/ 表示整个域名有效,默认为当前设置 cookie 时页面的路径
domain 可选,该 cookie 有效的域名
创建 cookie 的例子:
<?php setcookie("username", "xiaoli", time()+3600); ?>
在该例子中,我们设置了一个名称为 username 的cookie,其值为 xiaoli ,并在1小时候后过期。如果时间也被省略,cookie 将会在会话结束后(一般是浏览器关闭)失效。
cookie 会以一定格式被存储在用户计算机特定位置。
一个更完整的例子:
<?php setcookie("username", "xiaoli", time()+3600, "/", ".5idev.com"); ?>
该例子使用了 path 和 domain 参数,即在 5idev.com 域名的 / 路径下该 cookie 都有效(即全站有效)。
读取 cookie
PHP 内置了 $_COOKIE 变量以访问设置的 cookie 值。
例子:
<?php echo $_COOKIE["username"]; //输出 xiaoli ?>
使用 isset() 函数来检测 cookie 变量是否已经被设置:
<?php if (isset($_COOKIE["username"])) { echo "欢迎你: ".$_COOKIE["username"]; } else { echo "请登陆"; } ?>
销毁 cookie
可以通过设置 cookie 过期时间为以前的时间点来销毁一个 cookie :
<?php setcookie("username", "", time()-3600); ?>
提示
- 由于协议限制,在设置 cookie 之前,不能有任何内容向浏览器输出
- cookie 不会在设置的当前页生效,要访问设置的 cookie ,必须是另一个页面在过期之前访问
- 由于 cookie 信息存储于用户的计算机中,那么就有可能伪造 cookie 从而造成 cookie 欺骗,一般可以对 cookie 的值进行加密来预防欺骗。读取 cookie 的时候,对 cookie 解密即可
遇到函数 ———2011.05.26
==========================================================================
定义和用法
parse_str() 函数把查询字符串解析到变量中。
语法
parse_str(string,array)
参数
描述
string
必需。规定要解析的字符串。
array
可选。规定存储变量的数组名称。该参数指示变量存储到数组中。
提示和注释
注释:如果未设置 array 参数,由该函数设置的变量将覆盖已由同名变量。
注释:php.ini 中的 magic_quotes_gpc 设置影响该函数的输出。如果已启用,那么在 parse_str() 解析之前,变量会被 addslashes() 转换。
例子
例子 1
<?php parse_str("id=23&name=John%20Adams"); echo $id."<br />"; echo $name; ?>
输出:
23 John Adams
例子 2
<?php parse_str("id=23&name=John%20Adams",$myArray); print_r($myArray); ?>
输出:
Array ( [id] => 23 [name] => John Adams )
array_slice() 返回根据 offset
和 length
参数所指定的 array
数组中的一段序列。
如果 offset
非负,则序列将从 array
中的此偏移量开始。如果 offset
为负,则序列将从 array
中距离末端这么远的地方开始。
如果给出了 length
并且为正,则序列中将具有这么多的单元。如果给出了 length
并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从 offset
开始一直到 array
的末端。
注意 array_slice() 默认将重置数组的键。自 PHP 5.0.2 起,可以通过将 preserve_keys
设为 TRUE
来改变此行为。