网络编程[10图像处理][11Session与Cookie][12正则..
时间:2009-04-15 来源:rbt328
10 PHP中的图像处理
访问图像属性:array getimagesize(string $filename [, array &$imageinfo]),返回一个四个单元的数组。0为图像宽度的像素值, 1为图像高度的像素值。2是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF等等。3是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG 标记。
使用GD库 6-7.php,7-4.php
1、创建图像:resource imagecreate(int $x_size, int $y_size),返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的空白图像。
<?php |
注意: 第一次对 imagecolorallocate() 的调用会给基于调色板的图像填充背景色。
2、创建图像并在上面画图
画直线:bool imageline(resource image, , , ,)
画矩形:bool imagerectangle()
填充矩形:boolimagefilledrectangle()
画椭圆:bool imageellipse()
填充椭圆:bool imagefilledellipse()
3、在图片上写字:
bool imagestring ( resource $image, int $font, int $x, int $y, string $s, int $col )
用col颜色将字符串s画到image所代表的图像的x,y坐标处(这是字符串左上角坐标,整幅图像的左上角为0,0)。如果font是1,2,3,4 或 5,则使用内置字体。
<?php |
4、绘制直方统计图
<?php |
5、创建缩略图
<?php |
11 Session与Cookie
php.ini中session.auto_start为1时自动检查,0相反
常用的Session函数
session_start(void),初始化一个新Session
session_destroy(void),结束目前的Session
session_name(string [name]),取得或重新设定目前Session的名称
session_module_name(string [module]),取得或重新设定目前Session的模组
session_save_path(string [path]),取得或重新设定目前Session的路径
session_id(string [id]),取得或重新设定目前存放Session的代号
session_register(string name),在全局变量中增加一个变量到目前的Session之中
session_unregister(string name),与session_register()相反,删除全局变量上的变量
session_is_registered(string name),检查某个变量名是否已经被注册为Session。
session_decode(string data),将Session内的资料解码
session_encode(void),将Session资料编码,
所有与特定会话相关的数据都被存储在由php.ini文件的session.save_path选项所指定的目录下的一个文件中。每个对话建立一个文件。
如果php.ini未开启register_globals,则只可以用_SESSION数组来引用Session变量。
如,$var变量只能用$_SESSION[“var”]引用。
使用Cookie, 执行前不能有任何的HTML输出。
bool setcookie ( string $name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly]]]]]] )
$name名称;$value值,为空字串则表示取消值;$expire有效时间$path相关路径;$domain网站;$secure在https的安全传输时用。
例 setcookie("username","$username");
echo $_COOKIE[username];
设置Cookie生命期:$expire = time()+N,N表示秒数
一年:setcookie(name, value, time()+60*60*24*30*365)
Cookie实例:网页风格转换
<?php //11-7.php
<?php //11-8.php
|
12 正则表达式的使用
模式匹配
1、元字符“^”、“$”,匹配字符串的开始和结尾
“^The”匹配以The开头的字符串。
“of despair$”匹配以of despair结尾的字符串。
“^abc$”匹配以abc开头和结尾的字符串,只有abc与之匹配。
“notice”匹配包含notice的字符串。
2、元字符“*”、“+”、“?”,表示一个字符可以出现的次数或顺序。分别表示:0次或者多次;1次或者多次;0次或者1次。
“ab*”匹配a和0个或多个b组成的字符串。如“a”“ab”“abbb”
“ab+”最少有一个b。如“ab”“abb”
“ab?”只有两种可能:“a”“ab”
3、综合使用“^”、“$”、“*”、“+”、“?”
“a?b+$”匹配以一个或者0个a再加上一个以上的b结尾的字符串。
“^a*b?a$”匹配以0个或者多个a开头再加上0个或者1个b再以a结尾的字符串。
4、元字符“{”、“}”,数量限定符开始和结束的标记
“ab{2}”匹配一个a后面跟两个b(一个也不能少)。如“abb”
“ab{2,}”两个或者多个b,即最少跟两个b。如“abb”,“abbbb”等
“ab{3,5}”a后面跟3~5个b(仅有3、4、5个3种情况)。“abbb”“abbbb”“abbbbb”
只能使用“{0,2}”,而不能使用“{,2}”。
5、元字符“(”、“)”
“a(bc)*”匹配a后面跟0个或者1个“bc”。如“a”、“abc”,只有两种情况
“a(bc){1,5}”匹配后面跟1个到5个“bc”。如“abc”、“abcbcbc”等
6、元字符“|”,相当与OR(或)
“hi|hello”匹配含有“hi”或者“hello”的字符串。
“(b|cd)ef”匹配含有“bef”或者“cdef”的字符串。
“(a|b)*c”匹配含有0个到多个a或者b,后面跟一个c的字符串。
7、元字符“.”,一个(‘.’)可以代表所有的单一字符
“a.[0-9]”匹配一个a跟一个字符再跟一个数字的字符串。
“^a.{3}$”匹配以a开头3个任意字符结尾。
8、元字符“[”“]”,中括号括住的部分只匹配单一字符。
“[ab]”,匹配单个的a或者b,和“a|b”一样。
“[a-d]”匹配a到d的单个字符,和“[abcd]”一样。
“^[a-zA-Z]”匹配以字母开头的字符串。
“[0-9]%”匹配含有形如“x%”的字符串。
“,[a-zA-Z0-9]$”匹配以逗号再加一个字母或数字结尾的字符串。
9、中括号内的元字符“^”,中括号里面的“^”符号表示逻辑非。
“&[^a-zA-Z]%”匹配两个百分号中间有一个非字母的字符串。如“%1%”。
POSIX扩展的正则表达式
替换字符串:
string ereg_replace ( string $pattern, string $replacement, string $string )
在 string 中扫描与 pattern 匹配的部分,并将其替换为 replacement。返回替换后的字符串。(如果没有可供替换的匹配项则会返回原字符串)
$string2=ereg_replace("a","b",$string1); //将a替换为b
$string2=ereg_replace("[a-b]","c",$string1); //将a和b替换为c
匹配字符串:int ereg ( string $pattern, string $string [, array &$regs] )。以区分大小写的方式在 string 中寻找与给定的正则表达式 pattern 所匹配的子串。找到则返回Ture,没有则返回False。
注意: 使用 Perl 兼容语法的 preg_match() 函数通常是比 ereg() 更快的替代方案。
ereg("a",$s); //是否包含字母a。
ereg("[a-z]",$s); //是否包含小写字母。
替换字符串(忽略大小写):eregi_replace(),同ereg_replace()
匹配字符串(忽略大小写):eregi(),同ereg()
分割字符串到数组:array split ( string $pattern, string $string [, int $limit] )
返回一个字符串数组,每个单元为 string 经区分大小写的正则表达式 pattern 作为边界分割出的子串。如果设定了 limit,则返回的数组最多包含 limit 个单元,而其中最后一个单元包含了 string 中剩余的所有部分。如果出错,则返回 FALSE。
preg_split() 函数使用了 Perl 兼容正则表达式语法,通常是比 split() 更快的替代方案。如果不需要正则表达式的威力,则使用 explode() 更快,这样就不会招致正则表达式引擎的浪费。
$temp=split(":",$string1); //以“:”分割$string1
$temp=split("[0-9]+",$string1); //以数字分割$string1
分割字符串到数组(忽略大小写):spliti(),同split()。
返回包含指定字符的正则表达式:string sql_regcase ( string $string ),返回与 string 相匹配的正则表达式,不论大小写字母。可以用于在仅支持区分大小写正则表达式的产品中完成不区分大小写的模式匹配。
Perl兼容的正则表达式
表达式应被包含在定界符中,如斜线(/)。任何不是字母、数字或反斜线(\)的字符都可以作为定界符。如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。自 PHP 4.0.4 起,也可以使用 Perl 风格的 (),{},[] 和 <> 匹配定界符。
模式修正符,见PHP手册。
返回匹配数组:array preg_grep (string $pattern, array $input [, int $flags])。
返回一个数组,其中包括了 input 数组中与给定的 pattern 模式相匹配的单元。
自 PHP 4.0.4 起,preg_grep() 返回的结果使用从输入数组来的键名进行索引。如果不希望这样的结果,用 array_values() 对 preg_grep() 返回的结果重新索引。
$temp2=preg_grep("/^(\d)\d*/",$temp); //任一十进制数
print_r($temp2); //输出数组
print_r() — 打印关于变量的易于理解的信息。
全局表达式匹配:
int preg_match_all(string $pattern, string $subject, array $matches [, int $flags])
在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。
flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起来用没有意义): 例见PHP手册。
正则表达式匹配:
int preg_match ( string $pattern, string $subject [, array $matches [, int $flags]] )
在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。
转义正则表达式字符:string preg_quote ( string $str [, string $delimiter] )
以 str 为参数并给其中每个属于正则表达式语法的字符前面加上一个反斜线。
执行正则表达式的搜索和替换:mixed preg_replace ( mixed $pattern, mixed $replacement, mixed $subject [, int $limit] )
在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
用回调函数执行正则表达式的搜索与替换:mixed preg_replace_callback ( mixed $pattern, callback $callback, mixed $subject [, int $limit] ),同mixed preg_replace()
用正则表达式分割字符串
array preg_split(string $pattern, string $subject [, int $limit [, int $flags]])
返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。
构造检查Email的正则表达式:
用户名可以含有大小写字母、阿拉伯数、句号(.)、减号(-)、下划线(_),服务器名字除下划线。 用不区分大小写的eregi()取代ereg()可简化。
eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$string)
对图像UBB代码进行替换
eregi_replace(“\[img\]”,“<img src=”, $input);
eregi_replace(“\[\/img\]”,“>”, $input);
例:$string1="[img]1.jpg[/img]"; //定义变量$string1
$string2="[IMG]2.gif[/IMG]"; //定义变量$string2
$temp1=eregi_replace("\[img\]","<img src=",$string1);
$temp1=eregi_replace("\[\/img\]",">",$temp1);
$temp2=eregi_replace("\[img\]","<img src=",$string2);
$temp2=eregi_replace("\[\/img\]",">",$temp2);
提取字符串:ereg()、eregi()
高级代换:ereg_replace()、eregi_replace()
13 PHP面向对象编程
创建类:class classname
{
function functionname()
{
}
}
创建对象:$objectname = new classname
调用对象的函数:$objectname-> functionname()
类内部访问自身的变量和函数:$this->
类的继承:class son_class extends class
类的重载:在子类中定义和父类中一样的变量和函数
关键字:self和parent。 例,在子类访问父类的方法:parent:: functionname()。
类的引用:class_name::method_name;
构造函数:当使用new创建一个类的实例时,自动调用的同名函数。
如果构造函数带有参数,那么在为类创建对象时也要带上参数,否则会出错。
创建一个对象时,如果类没有构造函数,而父类有,则父类的构造函数会被调用。
与类、对象相关的函数
1、检查类是否已定义:bool class_exists ( string $class_name [, bool $autoload] )
如果由 class_name 所指的类已经定义,此函数返回 TRUE,否则返回 FALSE。
2、返回由类的方法名组成的数组:array get_class_methods ( mixed $class_name )
返回由 class_name 指定的类中定义的方法名所组成的数组。如果出错,则返回 NULL。
3、返回由类的默认属性组成的数组:array get_class_vars ( string $class_name )
返回由类的默认公有属性组成的关联数组,此数组的元素以 varname => value 的形式存在。
array array_keys ( array $input ), 返回 input 数组中的数字或者字符串的键名。
注意: 在 PHP 4.2.0 之前,get_class_vars() 不会包含未初始化的类变量。
4、返回对象的类名:string get_class ( [object $obj] )
返回对象实例 obj 所属类的名字。如果 obj 不是一个对象则返回 FALSE。
5、返回由已定义类的名字所组成的数组:array get_declared_classes ( void )
返回由当前脚本中已定义类的名字组成的数组。 会有预定义类存在于返回数组中。
6、返回由对象属性组成的关联数组:array get_object_vars ( object $obj )
返回由 obj 指定的对象中定义的属性组成的关联数组。未声名变量赋予NULL。
7、返回对象或类的父类名:string get_parent_class ( [mixed $obj] )
如果 obj 是对象,则返回对象实例 obj 所属类的父类名。 如果 obj 是字符串,则返回以此字符串为名的类的父类名。
8、此对象是否为该类的子类:bool is_subclass_of( object $object, string $class_name )
如果对象 object 所属类是类 class_name 的子类,则返回 TRUE,否则返回 FALSE。
9、检查类的方法是否存在:bool method_exists ( object $object, string $method_name )
如果 method_name 所指的方法在 object 所指的对象类中已定义,则返回 TRUE,否则返回 FALSE。
面向对象的购物车类:13-17.php。