面试题部分
一 六间房面试题
1. PHP s
a. 读取一个文件,将其Base64编码,每76个字符加一个换行
b.写一个函数,参数为$n,生成一个数组,其元素为1~$n,各元素位置随机排列,不得重复
2. Smarty
用Smarty写出下面代码,其中td的个数随$array的元素个数而定,class xx假设已经存在
提示:考虑每行元素个数,考虑class="xx"出现的规律
x1 | x2 | x3 |
x4 | x5 | x6 |
x7 | x8 | x9 |
3. UNIX/MySQL/Apache
a. 写一句脚本,分析apache的access.log,得出访问量最高文件前5名 (Unix/Apache)
b. 创建一个数据库,里面有一张表(见后面),并将其授权给所有192.168.1.*网段的用户表需求:每天文件访问情况,包括文件名、访问IP、访问时间、客户端浏览器名称,考虑如何高效地查找每天什么时段访问量最高
c. 配置操作系统(FreeBSD/Linux),使其在开机进入操作系统后执行启动apache、mysql的脚本
解答
1
a
chunk_split( base64_encode( file_get_content( $filename ) ),76,"/n" );
b
function getElement($arr,$n) {
$rand = rand(1,$n);
if (in_array($n,$arr)) {
getElement($arr,$n);
}
return $rand;
}
function createArray($n) {
$arr = array();
for($i=1;$i<=$n;$i++) {
$arr[] = getElement($arr,$n);
}
return $arr;
}
print_r(createArray(8));
二 常用函数部分
1 服务器和执行环境信息函数
2 获取环境变量的值
3 时间/日期函数
1、格式化一个本地时间/日期
2、返回unix时间戳
3、返回一个日期的unix时间戳
4、获取日期和时间信息
5、将英文的时间描述转换成unix时间戳,获取前一天的日期
6、返回当前 Unix 时间戳和微秒数
7、 设定(取得)用于一个脚本中所有日期时间函数的默认时区
4 检查变量是否是数字或数字字符串,数组,字符串
5 发送一个http标头
答案
1
http://localhost/xxt_tupoe/test.php?te=1&fd=1
E:/wamp/www/xxt_tupoe/test.php
$_SERVER
DOCUMENT_ROOT=E:/wamp/www/ 当前运行脚本所在的文档根目录。在服务器配置文件中定义。
PHP_SELF = /xxt_tupoe/test.php
SCRIPT_FILENAME = E:/wamp/www/xxt_tupoe/test.php 当前执行脚本的绝对路径名
REQUEST_URI = /xxt_tupoe/test.php?te=1&fd=1
REQUEST_METHOD = GET 访问页面时请求的方法
QUERY_STRING = te=1&fd=1 查询的字符串
SERVER_ADDR = 127.0.0.1 这个是服务器ip地址
REMOTE_ADDR = 127.0.0.1 这个是用户的Ip地址
SERVER_NAME = localhost; 服务器主机的名称
SCRIPT_NAME = localhost 包含当前脚本的路径。这在页面需要指向自己时非常有用。
URL = http://.$_SERVERP['SERVER_NAME'] . $_SERVER['REQUEST_URI']
http://doc.cnnas.com/web/html/14/t-14.html
$_SERVER['HTTP_HOST ']
当前请求的 Host: 头部的内容
$_SERVER['HTTP_REFERER']
链接到当前页面的前一页面的 URL 地址
$_FILES
包含有所有上传的文件信息。
2getenv("DOCUMENT_ROOT");
3
1、date("Y-m-d,H:i:s") 第二个参数默认的是time() date_default_timezone_set(),date("Y-m-d,H:i:s",time()+8*60*60)北京时间
date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d')-1,date('Y')))
2、time();是以秒为单位的,返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数
3、mktime(0,0,0,12,12,2011);
4、getdate();
5、strtotime, date("Y-m-d",strtotime("+1 day")),同1
6、microtime();
7、date_default_timezone_get , date_default_timezone_set
4 is_numeric
5 header();
http报头参数详解
http://blog.csdn.net/wiwipetter/archive/2009/09/16/4559183.aspx
6 字符串函数
1、查找字符串首次出现的位置,查找字符串最后一次出现的位置
2、获取字符串的长度
3、返回字符的ASC码值,返回指定的字符,两者是互操作
4、比较字符串函数
5、查找字符串的首次出现,并截取;查找字符串在另一个字符串中最后出现的位置,并返回从该位置到字符串结尾的所有字符;在字符串中搜索指定字符中的任意一个,截取第一次出现的位置开始的剩余部分
6、字符串替换函数
7、格式化输出字符,输出字符串,输出一个或多个字符串
8、使用正则表达式分割字符串
9、使用反斜线引用字符串;在指定的字符前添加反斜杠及相反的操作
10、去除最后一个非空格后的所有的空格(或其他字符)即去除字符串末端的空白字符(或其他字符),去除字符串开头的空白字符(或其他字符),去除字符串两端的空白(或其他字符)
11、使用一个字符串分割字符串,并说出第三个参数的用法及相反的操作将数组中的元素使用某个字符串相连 ;把字符串分割到数组中
12、将特殊字符转换成html字符及相反操作,将所有的适用的字符转换成html及其相反的操作;
13、将字符串分割成小块,并可以在某个字符后面插入任意字符后分割
14、使用uuencode编码或解码一个字符串
15、生成一个crc32多项式
16、将字符串的第一个字符小写,将字符串的首字母转换成大写,将字符串转换成小写,将字符串转换成大写,将字符串中每个单词的首字母转换成大写
17、计算字符串和文件的md5散列,计算文件的sha-1散列,计算字符串的sha散列
18、在字符串的每个新行(/n)之前插入html换行符(<br />)
19、通过千位分组来格式化数字
20、把查询字符串解析到变量中,解析URL
21、根据指定的格式解析来自一个字符串的输入,从文件中格式化输入
22、随机打乱字符串中所有的字符
23、把字符串填充为指定的长度;把字符串重复指定的次数;返回字符串中的单词数:反转字符串
24、返回在找到任何指定的字符之前,在字符串查找的字符数;返回在字符串中包含的特定字符的数目。
25、剥去 HTML、XML 以及 PHP 的标签。
26、计算子串在字符串中出现的次数。
27、按照指定长度对字符串进行折行处理。
28、返回字符串的字串
答案
6
1、strpos("dfDfdf","d",1)=5这个区分大小写 stripos();不区分大小写,strrpos(),strripos()
2、strlen();
strlen和mb_strlen 的区别
http://hi.baidu.com/kbsy/blog/item/ba848419e5001b6fdbb4bd67.html
3、ord("A"),chr("65")
4、
strcmp() 区分大小写 ;
strcasecmp() 不区分大小写;
strncmp("abcd","abdd",2) 用于比较字符串的一部分,区分大小写,这里是比较前两个字符 ;
strncasecmp() 不区分大小写 ;
strnatcmp(),strnatcasecmp() 字符比较里面有数字的话要使用这个比较,否则在计算机中2是大于10的,可以被用作回调函数使用,例如: $arr = array(1,12,2,10); usort($arr,strcmp) -> 1,10,12,2 usort($arr,$strnatcmp) -> 1,2,10,12
strcoll('heloo','Hello');这个不是二进制安全的
substr_compare("hello","hfllo",0,2)->-1 后面的大
这几个函数的返回值都是一样的,<0 >0 ==0
5、
strstr("name@example.com","@",true);-> name stristr() 不区分大小写 同strchr()
strrchr("hello world", 'wo') -> world
strpbrk("hello world","oe") ->ello world 这个不同之处就是只要出现第一个符合的字符就算
6、
strtr("Hilla","ia","eo") -> Hello 同下面的不同点就是这个是单个字符匹配的,大小写敏感,参数可以使用数组 strtr('abcd',array('b'=>'B','d'=>'D')) -> aBcD
str_replace('ab','AB','abcdeab',$i)->ABcdeAB,$i=2;str_ireplace不区分大小写,并且可以使用数组替换
substr_replace("ABCDE","bob",0,1) -> bobBCDE; 0表示从第一个位置开始替换,1表示替换掉几个字符如果没有这个参数那么就是替换所有的
preg_replace("/(/w+) (/d+), (/d+)/i","/${1}1,/$3","April 15, 2003"); 具体的参见手册上的实例
preg_replace_callback() 使用方法和上面基本上是一样的,回调函数有一个参数,这个参数是一个数组,对应的是每一个匹配项
PHP正则表达式作用:匹配提取、匹配替换。
7、
printf("二进制:%d",7); php的格式化类型说明参见http://blog.csdn.net/aw_vip/archive/2008/12/05/3453055.aspx
printf("%s world. Day number %u",$str,$number); 依据格式参数返回字符串
fprintf() 是输出到文件
sprintf() 是输出到变量
vprintf() 与printf的不同是arg位于一个数组中,vprintf("%s world. Day number %u",array("Hello",123));
Hello world. Day number 123
print() 不是一个函数而是一个语言结构,所以可以不用括号
echo 同样其不是函数而是一个语言结构 同上面的区别是echo可以输出多个字符串 echo 'a','b','c';
8、
split,spliti不区分大小写
preg_split("/[/s,]+/","a b,c");->array('a','b','c');
9、
addslashes php.ini中的设置参考手册,在使用这个的时候要判读设置是否已经打开,get_magic_quotes_gpc()
stripslashes('fd/'f') - > fd'f
addcslashes("dc","d") -> /dc
stripcslashes("/dc") ->dc
10、
chop("dfdf df /t","/t")这样的会保留空白,只去掉第二个参数的字符,同rtrim();
$data = "hello df" ; ltrim($data,"hel") 返回值是 o df,但是hello前面不能有空白,否则将不操作,这是后就要
ltrim($data," hel") hel前面也添加一个空格
trim(); trim('$data','hef') 返回值是llo d, 对数组的操作要同array_walk()相配合 使用回调函数来解决
11、
expolde("|","1|2|3|4",-2)->array(1,2);explode("|","a|b|c|d",3) = array(a,b,c|d) ; implode(”cd“,"array('a','b')")->acdb; 别名join
str_split('world',2); -> array('wo','rl','d');
strtok("word fg/tdiim/ndf"," /t/n")->word,fg,diim,df这里的不同是对多个分割字符都有效,首次调用需要使用string,以后就不需要了,只要有split字符就行了,这里每次只执行一次分割,需要使用循环的方式解决
12、
htmlspecialchars("<ddd>"); htmlspecialchars_encode(">");,两者的第二个参数,主要的作用是是否将单引号也转换
htmlentities("<a href='test'>Test 地方 </a>", ENT_QUOTES,'utf-8');这个时候urf-8就起作用了,这个同上的区别就是这里会将中文字符转换 html_entity_decode()
13、chunk_split($str,4,'d') 默认的参数参见手册
14、convert_uuencode() 比原数据大35倍左右; 本函数把所有字符串(包括二进制的)转换为可打印的字符串,确保其网络传输的安全。convert_uudecode() ;
base64_encode()和base64_decode() 此编码方式可以让中文字或者图片也能在网络上顺利传输
15、crc32($str) 生成32位的循环冗余校验吗多项式,常用来检测传输的数据是否完整,实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。
16、lcfirst(); ucfirst(); strtolower(); strtoupper(); ucwords()
17、
md5() ; md5_file() 这里用于比较文件是否有修改
$md5file= md5_file("test.txt");
file_put_contents("md5file.txt",$md5file);
$md5fileOld = file_get_contents("md5file.txt");
if(md5_file("test.txt")) == $md5file() {}
http://www.w3school.com.cn/php/func_string_md5_file.asp
sha1_file() 同样存储,可以判断文件是否修改
http://www.w3school.com.cn/php/func_string_sha1_file.asp
sha1()
18、nl2br($str); 主要是用于文本的处理,将文本的格式通过html显示
19、number_format ; number_format('1000000' , 2 , '.' , ' ,')
20、
parse_str($str,$arr); 查询字符串就是url中页面传递参数,使用$_SERVER['QUERY_STRING']获取
parse_str("a=1&b=2"); -> $a = 1,$b=2, parse_str("a=1&b=2",$arr); -> $arr['a']= 1,$arr['b']=2
parse_url("http://www.sina.com/db/gh?df=33&bb = 09"); 返回[scheme] = http; [host] = www.sina.com;[path] = /db/gh; [query] = df33&bb=09
21、sscanf("april,10,2002","%s %d %d")-> array(april,10,2002); fscanf()
22、str_shuffle()
23、
str_pad(); str_pad($str,strlen($str)+2,'.',STR_PAD_BOTH);
str_repeat("ab",2); 输出abab
str_word_count("hello word") -> 2 ; str_word_count("hello word",1) -> 返回的是包含单词的数组,其他参数参见 w3school
strrev("hello") ->olleh
24、strcspn("abcdffd","bc") -> 1 ;strspn("abcbcdffd","bc",1,6)-> 4 重复的字符必须是连续出现的
25、strip_tags("<a>hello</a> <p>world</p>")->hello word strip_tags("<a>hello</a> <p>world</p>","<a>") ->
hello <p>world</p>
26、substr_count("he is this a g","is",4,10) -> 1
27、wordwrap('helloword',4,"<br />/n",true); -> hell owor d
28、substr(),mb_substr("中文截取",0,3,'utf-8'),mb_strcut("中文截取",0,3,'utf-8') 后俩个适合中文的截取,第二个是按照字符来切分的,第三个是按照字节来切分
7 执行正则表达式的搜索和替换,正则表达式的匹配
8 常用的文件系统方面的操作
1、检查文件或目录是否存在
2、将整个文件读入字符串,将字符串写入文件
3、改变目录,当前的
4、获取当前目录
5、directory类
6、读取目录的操作
7、列出指定路径中的文件和目录
8、拷贝文件,删除文件,建立目录,重新命名一个文件或目录,删除目录
9、返回路径中的目录部分,返回路径中的文件名部分,返回文件的路径信息
10、从读取的文件中去掉html和php标签
11、将文件读入一个数组中
12、获取文件的大小和类型
13、判断给定的文件名是否是一个目录,是否是可执行的,是否为一个正常的文件(包括是否存在的判断),是否是通过http post上传的
14、返回文件的路径信息
答案
7 preg_replace,ereg,preg_match()的效率比ereg要快,eregi不区分大小写
实例参见日记
8
1、file_exists
2、file_put_contents,file_get_contents 如果要打开有特殊字符的url,就需要使用urlencode()进行url编码
3、chdir
4、getcwd
5、dir,方法handle(),path(),read() $dir = dir(e:/xxt); while(flase !== ($entry = $dir->read()))
6、$handle = opendir($dir),readdir($handle),closedir($handle)
7、scandir($dir,1) 这输出是排序的,1表示倒序
8、copy($file,$newfile) 如果文件存在将会被覆盖 , delete()或 unlink(),mkdir(),rename($old,$new),rmdir();
9、dirname('E:/tmp/sqls/slowquery.log'); 得到的是 E:/tmp/sqls,basename('E:/tmp/sqls/slowquery.log','log');
fileinfo("/www/htdocs/index.html", PATHINFO_BASENAME);
10、fgetss()
11、file()
12、filesize(); filetype();
13、is_dir(),is_executable(),is_file().is_uploaded_file()
14、pathinfo("F:/log/bug.doc?dd=1") 返回的结果是 [dirname] = F:/log ; [basename] = bug.doc?dd=1; [extension] = doc?dd=1 ;[filename]= bug
9 运算函数
1、进一取整法
2、绝对值
3、二进制转换为十进制
4、将十进制转换为二进制
5、返回8机制,十六进制
6、舍去法取整
7、返回最大值和最小值
8、对浮点数进行四舍五入
9、产生一个随机整数
10、返回除法的浮点数余数
10 数据库操作
1) 获取上一步insert操作产生的id
答案
9
1、ceil();
2、abs();
3、bindec
4、decbin
5、decoct dechex
6、floor
7、max min 参数可以是数组
8、round
9、rand(5,10) 一般使用mt_rand() 其速度是前者的四倍
10、fmod(5.7,1.3)
10 1) mysql_insert_id9):
11 数组操作
1、将数组最后一个单元出栈
2、移除数组中重复的值
3、把数组中的值复制给一些变量
4、返回字符串键名都是大写或小写的数组 ;返回数组中所有的值;返回数组中所有的键名
5、将数组分割成多个
6、合并一个数组 ;创建一个数组;用给定的数组作为键名,给定的值作为键值;用给定的值填充数组;建立一个包含指定范围单元的数组
7、检查给定的键名或索引是否存在于数组中;检查数组中是否存在某个值;搜索给定的值,返回相应的键名
8、对数组中的每个成员应用用户函数;将回调函数作用到给定的数组单元上;用回调函数过滤数组中的单元;使用回调函数迭代的将数组简化为单一的值
9、统计数组中所有值出现的次数;计算数组中的单元数目或对象中属性的个数
10、带索引检查计算数组的差集;计算数组的差集;带索引检查计算数组的交集;计算数组的交集;使用键名比较计算数组的差集;使用键名计算比较数组的交集
11、用回调函数比较数据来计算数组的差集;带索引检查计算数组的差集,用回调函数比较数据; 计算数组的交集,用回调函数比较数据; 带索引检查计算数组的交集,用回调函数比较数据 ;带索引检查计算数组的差集,用回调函数比较数据和索引; 带索引检查计算数组的交集,用回调函数比较数据和索引; 用回调函数对键名比较计算数组的差集; 用回调函数比较键名来计算数组的交集
12、交换数组中的键和值;返回一个单元顺序相反的数组
13、对多个数组或多维数组进行排序
14、用值将数组补充到指定的长度
15、将数组的最后一个单元弹出;将一个或多个单元压入到数组的末尾;将数组开头的单元移出数组;在数组的开头插入一个或多个单元:从数组中随机取出一个或多个单元;从数组中取出一段;将数组中的一部分去掉并使用其他值取代
16、计算数组中所有值的乘机;计算数组中所有值的和
17、对数组进行逆向排序,并保持索引关系;对数组进行排序,并保持索引关系 ;对数组进行排序 ;对数组逆向排序; 对数组按照键名排序;对数组按照键名进行逆向排序; 使用用户自定义的比较函数对数组中的键名进行排序; 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联; 用“自然排序”算法对数组排序; 用“自然排序”算法对数组进行不区分大小写字母的排序
18、返回数组中的当前的单元; 将数组中的内部指针向前移动一位; 将数组的内部指针倒回一位; 将数组的内部指针指向最后一个单元;
将数组的内部指针指向第一个单元;返回数组中当前的键值对并将数组指针向前移动一步
19、 从关联数组中取得键名;将数组打乱
答案
1、array_pop();
2、array_unique();
3、list($a,$b) = explode(" ",microtime());
4、
array_change_key_case(array("first"=>"fd","second" =>3),CASE_UPPER)) -> array([FIRST] = > 'fd' [SECODE]=>3)
array_values( array("dq","d"=>3) ) 返回的是一个数组 array("dq",3)
array_keys( array("dq","d"=>3),"3" ) ) 返回的是一个数组 array( [0] => 'd')
5、array_chunk( array_chunk( array("ke" =>'df','a','b'),2,true ) ); -> 生成的是一个多维数组
6、
array_merge( array_merge( array('1'=>1,2), array('1'=>3,4) ) ); 此数组合并后数字索引的将不会被覆盖,否则相同的键名的将会被覆盖
array_merge_recursive( array('b'=>1,2), array('b'=>3,4) ) ) ; 相同键名的不会被覆盖,而是会被合并一个子数组,递归下去
array_combine( array("a","b"), array("c","d") );用一个数组的值作为其键名,另一个数组的值作为其值 array([a]=>c,[b]=>d)
array_fill_keys($arr,"val"); $arr中的元素作为新的数组的键名,val作为新的数组的键值
arrar_fill(5,6,"aa");键名从5开始,6组数据,所有的键值都是aa
range('a','h',3) ->a,d,g ;3是递进的数量
7、
array_key_exists( array_key_exists( 'dq',array("dq","d"=>3)) ) ->false 对于数组中值为null的也会返回true,而isset就会返回false, isset( array([first]=>null) ) 返回的就是false
in_array( "12" , array(12,'e','c) ,true) ->false 有true是要检查类型的,这里是区分大小写的
array_search("12", array("b"=>"12",'c'=>"12","d"=>3) ) -> b 这里只返回匹配一次的,多次参见array_keys
8、
array_walk($arr,'functionname') 回调函数的参数可以使用传址方式修改数组
array_walk_recursive() 对数组中的每个成员递归地调用回调函数 , 如果数组元素是数组的话,则其键值不会使用
array_map('funciton',$arr,$arr2)
array_filter( $arr, 'function' ) 返回符合回调函数的元素,如果只有一个参数那么元素中的等值为false将被删掉
array_reduce( $arr , 'function' , 10 ) 第三个函数将做为第一个数组元素参与运算
9、
array_count_values($arr) 返回的是一个数组,键名是元素数组的值,值是出现的次数
count($arr, 1) 参数1是递归计算 同sizeof
10、
array_diff_assoc($arr1,$arr2) 返回的是数组,在arr1而不在arr2中的值,其检测包括键值也要相同
array_diff($arr1,$arr2) 同上面是相同的,唯一的区别是忽略键值,保留键名
array_intersect_assoc($arr1,$arr2) 返回的是数组,在arr1中出现也在其他数组中出现的元素,其检测包括键值
array_intersect($arr1,$arr2) 同上,唯一的区别就是忽略键值
array_diff_key($arr1,$arr2)
array_intersect_key($arr1,$arr2)
11、
array_udiff($arr1,$arr2,"function" );
array_udiff_assoc($arr1,$arr2,'function' ) 同上,区别就是这个需要比较键名
array_uintersect($arr1,$arr2, 'function' ) 回调函数可以是系统函数,字符串比较函数 例如 strcasecmp
array_uintersect_assoc($arr1,$arr2, 'function' ) 同上,比较键名
array_udiff_uassoc($arr1,$arr2,callback1,callback2) 要有两个比较函数
array_uintersect_uassoc($arr1,$arr2,callback1,callback2) 同样是要有两个比较函数
array_diff_ukey($arr1,$arr2,'key_compare_func') 区分大小写
array_intersect_ukey($arr1,$arr2,' key_compare_func' )
12、
array_flip( array("a" => 1, "b" => 2, "c" => 2) ) -> 1=>a,2=>c;
array_reverse( array("a" => 1, "b" => 2, "c" => 2) ) -> array("c" => 2, "b" => 2, "a" => 1)
13、array_multisort(); 这个数组非常有用,参见手册,最后一个实例
14、array_pad( array(1,2,3),-5,5 ) -> array(5,5,1,2,3)
15、
array_pop( array(1,2,3) ) -> array(1,2)
array_push( array(1,2) , 2,3) -> array(1,2,2,3) ;array_push ( array(1,2) , array(3,4)) -> array(1,2,array(3,4))
array_shift( array(1,2,3) ) -> array(2,3)
array_unshift( array(1,2,3),4,5 ) ->array(4,5,1,2,3)
array_rand( array(1,3,4) ,2 ) ; 取出两个单元,-> array(0=>3,1=>4)
array_slice( array(1,2,3,4) ,2,-1 ) -> 3 ;array_slice( array(1,2,3,4),-3,-1 )->2,3 有点类似substr
array_splice( array(1,2,3,4), -2, 1,arry(5,6)) -> array(1,2,5,6,4)
16、
array_product(array(1,2)) -> 2;array_product( array(1,"a") ) -> 0 字符串都转化为零
array_sum( array(1,2) ) ->3
17、
arsort( array( 'a'=>'b','c'=>'a','b'=>'c') ) -> array( 'b'=>'c',a'=>'b','c'=>'a' )
asort( array( 'a'=>'b','c'=>'a','b'=>'c') ) -> array( 'c'=>'a',a'=>'b','b'=>'c' );
sort( array(img12,img2,img10,img1) ) -> array( img1,img10,img12,img2) 会丢到索引,新的索引是数字
rsort()
ksort()
krsort()
uksort($arr,cmp_function) 使用对返回值的设置来控制是倒序还是正序排列 return ( $a > $b ) ? - 1 : 1 ; 这是倒序
uasort();
natsort( array(img12,img2,img10,img1) ) -> array(img1,img2,img10,img12) 注意同sort()的区别
natcasesort( array(img1,Img10,img12,mig2) ) -> array( img1,img2,Img10,img12) 上面的话就是Img10在第一位
18、
current( array(1,2,3) ) -> 1 同 pos()
next( array(1,2,3) ) ->2
prev( array(1,2,3) ) -> 1 每个都以上一个为标准的
end( array(1,2,3) ) -> 3
reset( array(1,2,3) ) ->1
each( array(1,2,3) ) ->[0] = 0,[1]=1
19、
key(array('a' => 1,'b'=>2)) -> a 只会显示一个键值
shuffle($arr)
12 error Handling
1) 生成一个php的回溯
2) 获取最后一个错误信息
3) 将错误信息放到一个文件中
4) 设置php的报错级别
5) 设置错误处理程序,恢复以前的错误处理程序
6) 设置异常处理程序,恢复以前的异常处理程序
7) 调用系统当前的错误处理函数并输出自己定义的错误信息
13 output Control
1) 打开输出缓存器
2) 获取缓存器中的内容
3) 输出缓存器中的内容并关闭缓存器
答案
12
1) debug_backtrace(); 这里的回溯就是产生一个函数信息,可以让你随时使用
2) error_get_last(); 可以用作调试
3) error_log("You messed up!" , 3 , "/var/tmp/my-errors.log" ); 参数3的意思是追加
4) error_reporting(E_ALL) 配置文件中涉及到display_errors = off;error_reporting=E_ALL
5) set_error_handler() 出现错误的时候并不会显示出错信息而是执行这里面的回调函数,
restore_error_handler() 但调用这个函数的时候,再出现错误的时候不会执行set_error_handler()中的回调函数,而是执行在其之前使用的错误处理函数,可能是系统函数也可能是自己定义的函数,如果执行了两个set_error_handler()那么就会返回到第一次中
6) set_exception_handler("functionName"); 当执行throw new exception("dfd");时调用的处理函数,restore_exception_handler().同上一个的解释,或者参考手册例子更好
7) trigger_error或user_error
13
1) ob_start()
2) ob_get_contents()
3) ob_end_flush()
http://developer.51cto.com/art/200912/166834.htm 详解php ob_start()函数的功能要点整个control函数可以参考这个例子
14 calendar函数
1、针对指定的年份和日历,返回一个月中的天数
15 对压缩文件操作的函数
16 字符编码
1、字符集转换
17 其他基本扩展
1、对json格式的字符串进行编码,对变量进行json编码
2、获取服务器响应一个http请求所发送的所有标头
3、生成 URL-encode 之后的请求字符串,也就是生成一个适用于get传递参数的一个字符串
4、 解析 URL,返回其组成部分
5、 使用 MIME base64 对数据进行编码,和解码 ,按照 RFC 1738 对 URL 进行编码和解码 ,普通编码URL字符串或解码
答案
14
1、cal_days_in_month(CAL_GREGORIAN, 8, 2003);
15 zlib函数
16
1、iconv("utf-8","GB2312",$data); GB2312后面最好是加上//IGNORE可以防止由于出错而丢失数据
17
1、json_decode() json_encode()
2、get_headers()
3、http_build_query() 生成适用于get传递的参数 $data = array("a"=》"b","c"=>"d") http_build_query($data);
得到a=b&c=d
4、parse_url('http://www.sina.com/path?arg=value&dd=cc#anchor')
5、
base64_encode(),base64_decode(); 设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。但是会多占用33%左右的空间
rawurlencode(),rawurldecode(); 是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。
urlencode(),urldecode(); 空格会转换为+号
6、session_start()
http://www.osphp.com.cn/read.php/323.htm
http://www.jb51.net/article/15510_2.htm
http://www.cncfan.com/html/?79_5176.html
http://www.jwzzsw.com/?p=563 php5常用函数
http://www.w3school.com.cn/php/func_error_trigger_error.asp 参数解释
18 session扩展
1、获取或设置一个session 名字
2、初始化session数据
3、获取或设置当前的session的id
4、 指定会话页面所使用的缓冲控制方法
5、设置缓存过期时间
19 BBCode函数
答案
18 session扩展
1、session_name()
2、session_start()
3、session_id()
4、session_cache_limiter()
现在表单的填写,我们可以用AJAX对用户随时进行验证,进行友好的提示,但是在用户没有留意AJAX友好提示,提交了错误的表单,跳回原页,而填写的信息却全部丢失了。要支持页面回跳,有以下的办法:
1)使用session_cache_limiter方法
session_cache_limiter( 'private,must-revalidate' );
2)用header来设置控制缓存的方法
header( 'Cache-control:private,must-revalidate' );
当session_cache_limiter('private')时,用处是让表单history.go(-1)的时候,填写内容不丢失。
5、session_cache_expire()
http://hi.baidu.com/sockerboy/blog/item/a55de5ddf874c4eb76c638b5.html 参见这里
19
BBCode 代码是一种 HTML 的特别语法, 它提供了更好的操作方便性和控制面板的编排, 您可以在文章发表的表格上方发现 BBCode 代码的便捷按钮
主要是处理文字在页面的显示效果包括各种标签,就先解决wiki或csdn博客中的文字编辑
http://www.cnblogs.com/nodot/articles/1870545.html 这是自己写的
BB Code 是一種快速易用的方式來為您的文章增加效果或格式化。
什么是 BBCode 和表情?
http://www.source.edu.cn/bbs/faq.php?mode=bbcode&sid=0a9d238962cda17bc80e1f21af97b45f#0
20 文本处理pcre函数
1、返回与模式匹配的数组单元
2、进行全局正则表达式的匹配
3、进行正则表达式匹配
4、转义正则表达式字符
5、用回调s函数执行正则表达式的搜索和替换
6、执行正则表达式的搜索和替换
7、使用正则表达式分割字符
答案
20
1、
$array = array("1.3",'3333.2222','23.43','edef');
$fl_array = preg_grep ("/^(/d+)?/./d+$/", $array);
结果:Array ( [0] => 1.3 [1] => 3333.2222 [2] => 23.43 )
2、preg_match_all()
3、从URL中取出主机名
preg_match ( "/^(http:)?([^//]+)/i" , "http://www.php.net/index.html" , $matches );
$host = $matches [ 2 ];
4、preg_quote('is *very*') is /*very/*
正则表达式的特殊字符包括:. / + * ? [ ^ ] $ ( ) { } = ! < > | :
5、preg_replace_callback() ;主要用于处理匹配的数据,如果有多个子匹配那么将循环执行回调函数,回调函数的参数是一个数组里面是匹配的值
6、preg_replace(); 可以使用 //1和/$1表示第一个匹配的
7、preg_split() ;
21 class/object类
1、为类创建一个别名;获取父类的名称;如果此对象是该类的子类,则返回true;获取对象的名称
2、检查类是否已经定义;检查接口是否已经定义;返回由已定义类的名称组成的数组;返回由已定义接口的名称组成的数组;检查类的方法是否存在
3、返回由类的方法名组成的数组;返回有类的默认属性组成的数组;返回由对象属性组成的关联数组
4、检查对象或类是否具有该属性
答案
1、
class_alias(old,new)
get_parent_class($this) ; get_parent_class('classname')
is_subclass_of(new class,'parentObjectName') ->第一个参数是对象,第二个参数是父类的名称
get_class($obj) ;参数可以是对象或者在类中可以是$this
2、
class_exists(classname)
interface_exists(interfacename)
get_declared_classes()
get_declared_interfaces()
method_exists($obj, $method_name)
3、
get_class_method() 参数可以是obj也可以是字符串
get_class_vars(string classname)
get_class_object(object) 属性没有设置,则返回的数组中的值为空
4、
property_exists($class,$property)
22 filter
1、是一个过滤的函数可以检测邮箱名称是否正确
23 function handler
1、调用一个用户函数,参数以数组的形式传递;调用一个用户函数,只有一个参数
2、判断函数是否存在
24 variable handler
1、检测一个变量是否为空;检测变量是否设置;释放给定的变量
2、获取变量的浮点值;获取变量的整数值;获取变量中的字符串;设置变量的类型;获取变量的类型
3、检测变量是否为数组;检查变量是否为布尔值;是否是浮点型;是否为整型;是否为字符串;是否为一个对象;是否为一个数字或数字字符串;是否为null
4、序列化,产生一个可存储值的表示;反序列化
答案
22
1、filter_var("someone@example....com",FILTER_VALIDATE_EMAIL)
23
1、
call_user_func_array ( "foobar" , array( "one" , "two" )); 回调的参数名称是foobar,具体的其他的用法参见手册,还可以用类0
call_user_func(array('classname','methodname'),'param') ; 这是调用一个类的方法
3、function_exists('functionname')
24
1、
empty()
isset() ->对于$a= null 和上面的是一样的判断,是不认为这个变量被初始化,对于array_key_exists('a',array('a'=>null)) 是为true的
unset($v) ; unset($arr['a']) ; unset($v,$v1,$v2)
2、
floatval("123.44jdf") -> 123.44
intval("123.5fd") -> 123
strval(123.'e') ->123.e
settype('123ef' ,'integer') ->123 ; settype('true','string') -> '1'
gettype(12) -> integer 不要用于检测类型,可使用is_**来检测
3、is_array(),is_bool(),is_float()或is_double(),is_int()或is_integer()或is_long() , is_string() , is_object(), is_numeric() ,is_null()
4、serialize() ; unserialize()
五 试题
1 区分empty和isset的区别
答案
1 empty判断变量是否为空,isset是判断变量是否设置,所以对于$p = 0 empty为真,即表示这个变量等同于空,isset 也为真,认为这个变量是被设置过的,如果一个判断一个变量不允许为0,使用empty,否则使用isset,
http://hi.baidu.com/_renaisance/blog/item/64b02d2966804bfa98250a4d.html
六 预定义
DIRECTORY_SEPARATOR
手册 fileinfo
正则表达式
http://www.7880.com/info/Article-626cd6a0.html