传智播客PHP面试题及答案宝典下卷高级篇精Word文档格式.docx
《传智播客PHP面试题及答案宝典下卷高级篇精Word文档格式.docx》由会员分享,可在线阅读,更多相关《传智播客PHP面试题及答案宝典下卷高级篇精Word文档格式.docx(50页珍藏版)》请在冰豆网上搜索。
cat_nameVARCHAR(30)NOTNULLDEFAULT'
'
COMMENT'
类别名称'
parent_idSMALLINTUNSIGNEDNOTNULL
DEFAULT0COMMENT'
类别父ID'
)engine=MyISAMcharset=utf8;
编写一个函数,递归遍历,实现无限分类
10.写一个函数,算出两个文件的相对路径,如$a='
/a/b/c/d/e.php'
;
$b='
/a/b/12/34/c.php'
计算出$b相对于$a的相对路径应该是../../c/d(新浪)
11.mysql_fetch_row()和mysql_fetch_array()有什么分别?
mysql_fetch_row()把数据库的一列储存在一个以零为基数的数组中,第一栏在数组的索引0,第二栏在索引1,如此类推。
mysql_fetch_assoc()把数据库的一列储存在一个关联数组中,数组的索引就是字段名称,例如我的数据库查询送回“first_name”、“last_name”、“email”三个字段,数组的索引便是“first_name”、“last_name”和“email”。
mysql_fetch_array()可以同时送回mysql_fetch_row()和mysql_fetch_assoc()的值。
P开发资源网主页:
到它的内容?
方法1(对于PHP5及更高版本):
$readcontents=fopen("
$contents=stream_get_contents($readcontents);
fclose($readcontents);
echo$contents;
方法2:
echofile_get_contents("
13.谈谈对mvc的认识
由模型(model),视图(view),控制器(controller)完成的应用程序,由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图。
14.WhatdoestheGDlibrarydo?
(Yahoo)
GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。
在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
自从PHP4.3.0版本后GD便内建在PHP系统中。
15.Whatfunctioncanyouusetoopenafileforreadingandwriting?
A.fget();
B.file_open();
C.fopen();
D.open_file();
答案:
C
fget()这不是一个PHP函数,会引致执行错误。
file_open()这不是一个PHP函数,会引致执行错误。
fopen()这是正确答案,fopen()可以用来开启档案以便读写。
open_file()这不是一个PHP函数,会引致执行错误。
16.Smarty的原理
smarty是个模板引擎,最显著的地方就是有可以把模板缓存起来。
一般模板来说,都是做一个静态页面,然后在里面把一些动态的部分用一切分隔符切开,然后在PHP里打开这个模板文件,把分隔符里面的值替换掉,然后输出来,你可以看下PHPLib里面的template部分。
而smarty设定了缓存参数以后,第一运行时候会把模板打开,在php替换里面值的时候把读取的html和php部分重新生成一个临时的php文件,这样就省去了每次打开都重新读取html了。
如果修改了模板,只要重新刷下就行了。
相关题目1:
能够使HTML和PHP分离开使用的模板
smarty,phplib等
相关题目2:
您是否用过模板引擎?
如果有您用的模板引擎的名字是?
Smarty
17.PHP如何实现页面跳转
方法一:
php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。
header("
Location:
网址"
);
//直接跳转
refresh:
3;
url="
//三秒后跳转
方法二:
利用meta
echo"
<
metahttp-equiv=refreshcontent='
0;
url=网址'
>
"
18.PHP可以和sqlserver/oracle等数据库连接吗?
可以
19.使用哪些工具进行版本控制?
SVN或者CVS
您是否用过版本控制软件?
如果有您用的版本控制软件的名字是?
TortoiseSVN-1.2.6svn-1.2.3
20.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
$script="
以下内容不显示:
scriptlanguage='
javascript'
alert('
cc'
/script>
echopreg_replace("
/<
script[^>
].*?
.*?
/si"
"
替换内容"
$script);
21.Givenalineoftext$string,howwouldyouwritearegularexpressiontostripalltheHTMLtagsfromit?
方案一,使用PHP内建函数strip_tags()除去HTML标签
方案二,自定义函数,如下:
22.请写一个函数验证电子邮件的格式是否正确(要求使用正则)(新浪)
preg_match('
/^[\w\-\.]+@[\w\-]+(\.\w+)+$/'
$email);
请用正则表达式写一个函数,验证电子邮件的格式是否正确。
(鑫众人云)
23.请对POSIX风格和兼容Perl风格两种正则表达式的主要函数进行类比说明(腾讯)主要区别有以下三种:
1)
2)
案。
24.请写出并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?
(腾讯)
首先进入php安装目录
php-fd:
/wamp/www/1.php
php-rphpinfo();
其中-f参数指定要执行的php文件其中-r表示直接执行php代码,无需写开始结束标记preg_replace()里面的正则可以写成型如:
/..../"
而ereg_replace()里面的正则需写成型如"
....."
preg_replace()能操作数组,而ereg_replace()不可以在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个使用Perl兼容正则表达式语法的preg_match()函数通常是比ereg()更快的替代方
25.使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空格等)。
此处假设需提取test标签的attr属性值,请自行构建包含该标签的串(腾讯)
编写如下函数:
functiongetAttrValue($str,$tagName,$attrName){
$pattern1="
.$tagName."
(\\s+\\w+\s*=\\s*([\\'
\\\"
]?
)([^\\'
]*)
(\\2))*\\s+"
.$attrName."
\\s*=\\s*([\\'
]*)(\\5)
(\\s+\\w+\\s*=\\s*([\\'
]*)(\\9))*\\s*>
/i"
$arr=array();
$re=preg_match($pattern1,$str,$arr);
if($re){
br/>
\$arr[6]={$arr[6]}"
}
else{
没找到。
测试:
$str1="
testattr='
ddd'
getAttrValue($str1,"
test"
attr"
//找test标签中attr属性的值,结果为ddd
$str2="
test2attr='
attr2='
ddd2'
t1=\"
t1value\"
t2='
t2value'
getAttrValue($str2,"
test2"
t1"
//找test2标签中t1属性的值,结果为t1value
26.Whatdoesthefollowingcodedo?
Explainwhat'
sgoingonthere.$date='
08/26/2003'
“([0-9]+)/([0-9]+)/([0-9]+)”,\\2/\\1/\\3,$date);
(Yahoo)printereg_replace(ereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)”
这是把一个日期从MM/DD/YYYY的格式转为DD/MM/YYYY格式。
输出26/08/2003
27.Whatfunctionwouldyouusetoredirectthebrowsertoanewpage?
A.redir()
B.header()
C.location()
D.redirect()
B
redir()这不是一个PHP函数,会引致执行错误。
header()这个是正确答案,header()函数发送头信息,可以用来使浏览器转向到另一个页面,例如:
http:
//www.search-
location()这不是一个PHP函数,会引致执行错误。
redirect()这不是一个PHP函数,会引致执行错误。
28.Whenturnedon____________will_________yourscriptwithdifferentvariablesfromHTMLformsandcookies.(腾讯)
A.show_errors,enable
B.show_errors,show
C.register_globals,enhance
D.register_globals,inject
29.一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on。
allow_call_time_pass_reference
是否启用在函数调用时强制参数被按照引用传递
30.在HTML语言中,页面头部的meta标记可以用来输出文件的编码格式,以下是一个标准的meta语句<
METAhttp-equiv='
Content-Type'
content='
text/html;
charset=gbk'
,请使用PHP语言写一个函数,把一个标准HTML页面中的类似meta标记中的charset部分值改为big5。
请注意:
(1)需要处理完整的html页面,即不光此meta语句
(2)忽略大小写
(3)'
和"
在此处是可以互换的
(4)'
两侧的引号是可以忽略的,但'
两侧的不行
(5)注意处理多余空格
编写正则表达式如下:
$reg1="
/(<
meta\\s*http-equiv\\s*=\\s*(['
\"
)Content-Type(\\2)\\s*content\\s*=\\s*(['
])text\/html;
charset=)(UTF-8)(\\4)(\\s*\/?
)/i"
31.PHP中如何判断一个字符串是否是合法的日期模式:
2007-03-1313:
13:
13。
要求代码不超过5行。
(酷讯)
32.PHP中,如何获得一个数组的键值?
(酷讯
使用foreach遍历数组)
33.如果模板是用smarty模板。
怎样用section语句来显示一个名为$data的组。
比如:
$data=array(
0=>
array('
id'
=>
8,'
name'
name1'
),
1=>
10,'
name2'
2=>
15,'
name3'
)
写出在模板页的代码?
若用foreach语句又要怎样显示呢?
用section语句:
{sectionname=testloop=$datastart=0step=1}>
id:
{$data[test].id}>
name:
{$data[test].name}>
{sectionelse}>
数组为空
{/section}>
用foreach语句:
{foreachfrom=$dataitem=test}>
{$test.id}>
{$test.name}>
{foreachelse}>
{/foreach}>
34.哪个选项会匹配下边的这个正则表达式?
(/.*\*xyz\d/)
A.******xyz
B.*****_xyz1
C.******xyz2
D._*xyz
35.以下哪个错误无法被标准的错误控制器获取?
A.E_WARNING
B.E_USER_ERROR
C.E_PARSE
D.E_NOTICE
36.以下哪种错误类型无法被自定义的错误处理器捕捉到?
(奇矩互动)
37.(^\s*)|(\s*$)这个正则表达式作用是:
__________;
匹配以0个或多个空白符开头或者0个或多个空白符结尾的字符串
38.编写函数取得上一月的最后一天
39.在很多时候,我们可以通过apache的主配置文件来设置对test目录的访问权限控制,如http:
//IP/test请问如果需设置test下的一个子目录的访问控制权限,是否可以在主配置文件中修改,如果不可以应如何解决。
可以,还可以在需要控制的子目录下创建.htaccess文件,写入访问控制。
40.如果我的网站用的utf-8编码,为防止乱码出现,都需要注意哪些地方?
5)从以下几个方面考虑:
数据库中库和表都用utf8编码php连接mysql,指定数据库编码为utf8mysql_query(“setnamesutf8”);
php文件指定头部编码为utf-8header(“content-type:
charset=utf-8”);
网站下所有文件的编码为utf8html文件指定编码为utf-8<
metahttp-equiv="
Content-Type"
content="
charset=utf-8"
/>
41.在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码?
urlencode()
42.写出两种对变量加密的函数?
md5($str);
sha1($str);
43.如何把2009-9-210:
30:
25变成unix时间戳?
44.如何把一个GB2312
格式的字符串装换成UTF-8格式?
45.如果需要原样输出用户输入的内容,在数据入库前,要用哪个函数处理?
htmlspecialchars或者htmlentities
46.写出五种以上你使用过的PHP的扩展的名称(提示:
常用的PHP扩展)
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO等
47.了解MVC模式吗?
请写出三种以上目前PHP流行的MVC框架名称(不区分大小写)
FleaPHP、ZendFramework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等
48.php中WEB上传文件的原理是什么,如何限制上传文件的大小?
上传文件的表单使用post方式,并且要在form中添加enctype='
multipart/form-data'
。
一般可以加上隐藏域:
inputtype=hiddenname='
MAX_FILE_SIZE'
value=dddddd>
,位置在file域前面。
value的值是上传文件的客户端字节限制。
可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
使用file文件域来选择要上传的文件,当点击提交按钮之后,文件会被上传到服务器中的临时目录,在脚本运行结束时会被销毁,所以应该在脚本结束之前,将其移动到服务器上的某个目录下,可以通过函数move_uploaded_file()来移动临时文件,要获取临时文件的信息,使用$_FILES。
限制上传文件大小的因素有:
3)客户端的隐藏域MAX_FILE_SIZE的数值(可以被绕开)。
服务器端的upload_max_filesize,post_max_size和memory_limit。
这几项不能够用脚本来设置。
自定义文件大小限制逻辑。
即使服务器的限制是能自己决定,也会有需要个别考虑的情
况。
所以这个限制方式经常是必要的。
49.简述UBBcode的实现原理。
(YG)
UBB代码是HTML的一个变种,通过程序自定义我们的标签,比如“[a]PHP中UBB的使用[/a]”这样的标签,其实质就是利用技术查找[a][/a]标签,将其替换成<
a>
/a>
的标准html,说白了,就是将标准的html标记通过技术手段使其简化,其输出出来的结果还是标准的html。
明白了ubb的原理,那么再制作一个简单的ubb编辑器就不难了,和fck之类的编
辑器比较起来,ubb代码最大的优点就是代码简单,功能很少,简单的ubb只需要一个文件,而且ubb标签可以自己来定义,更改起来很方便,在php中就是利用替换函数就可以将html进行标签化,输出时进行标签的转化。
.怎么把文件保存到指定目录?
怎么避免上传文件重名问题?
5050.
可以通过上传的文件名获取到文件后缀,然后使用时间戳+随机数+文件后缀的方式为文件重新命名,这样就避免了重名。
可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成将文件保存到指定目录。
51._____函数能返回脚本里的任意行中调用的函数的名称。
该函数同时还经常被用在调试中,用来判断错误是如何发生的。
debug_print_backtrace()
52.在Smarty模板语法中怎么能遍历数组$a=array(array('
0),array('
……)id=>
0-10000,1),array('
2),2),…………)怎么判断当id=>
500,让输出的值在HTML里变为红
色?
(亿邮)
设数组分配过来的数组名为$ids
{sectionname=temploop=$ids}
{if$ids[temp].id==500}
spanstyle=‘color:
#f00;
’>
{$ids[temp].id}<
/span>
{esle}
{$ids[temp].id}
{/if}
{/section}
53.在Smarty模板语法中如何获取当前时间,并且使用Y-m-dH:
i:
s的格式输出?
使用{$smarty.now}来获取当前时间,得到的是unix系统时间戳
使用变量调节器进行格式化,如下:
{$smarty.now|date_format:
“%Y-%m-%d%H:
%M:
%S”}
54.在Smarty模板语法中如何获取php的全局环境变量(亿邮)
$smarty.get.变量#显示通过get方式传过来的指定变量的值
$smarty.post.变量#显示通过post方式传过来的指定变量的值
$smarty.cookies.变量#显示通过cookie中指定变量的值
$smarty.server.SERV