php 面试题

php面试题及答案,经典php笔试题与答案

问题

1. 考虑如下脚本。标记处应该添加什么代码才能让脚本输出字符串 php?

$alpha = 'abcdefghijklmnopqrstuvwxyz';

$letters = array(15, 7, 15);

foreach($letters as $val) {/* 这里应该加入什么 */

}

?>

A.echo chr($val);

B.echo asc($val);

C.echo substr($alpha, $val, 2);

D.echo $alpha{$val};

E.echo $alpha{$val+1}

2. 以下哪一项不能把字符串$s1 和$s2 组成一个字符串?

A.$s1 + $s2

B.”{$s1}{$s2}”

C.$s1.$s2

D.implode(”, array($s1,$s2))

E.以上都可以

3. 变 量 $email 的 值 是 字 符 串 [email protected] , 以 下 哪 项 能 把 字 符 串 转 化 成

example.com?

A.substr($email, strpos($email, “@”));

B.strstr($email, “@”);

C.strchr($email, “@”);

D.substr($email, strpos($email, “@”)+1);

E.strrpos($email, “@”);

4. 给定一个用逗号分隔一组值的字符串,以下哪个函数能在仅调用一次的情况下就把每

个独立的值放入一个新创建的数组?

A.strstr()

B.不可能只调用一次就完成

C.extract()

D.explode()

E.strtok()

5. 要比较两个字符串,以下那种方法最万能?

A.用 strpos 函数

B.用==操作符

C.用 strcasecmp()

D.用 strcmp()

6. 以下哪个 PCRE 正则表达式能匹配字符串 php|architect?

A..*

B.…|………

C.\d{3}\|\d{8}

D.[az]{3}\|[az]{9}

E.[a-z][a-z][a-z]\|\w{9}

7. 以下哪些函数能用来验证字符串的完整性?(三选)

A.md5()

B.sha1()

C.str_rot13()

D.crypt()

E.crc32()

8. 哪个 PHP 函数与以下脚本在 UNIX 系统下执行的效果近似?

function my_funct ($filename)

{

$f = file_get_contents ($filename);

return explode ("\n", $f);

}

?>

A.fopen()

B.fread()

C.flock()

D.split_string()

E.file()

9. 基于指定的式样(pattern)把一个字符串分隔开并放入数组,以下哪些函数能做到?(双

选)

A.preg_split()

B.ereg()

C.str_split()

D.explode()

E.chop()

10.以下脚本输出什么?

echo 'Testing ' . 1 + 2 . '45';

?>

A.Testing 1245

B.Testing 345

C.Testing 1+245

D.245

E.什么都没有

11.以下脚本输出什么?

$s = '12345';

$s[$s[1]] = '2';

echo $s;

?>

A.12345

B.12245

C.22345

D.11345

E.Array

12.方框中的正则表达式能与以下哪些选项匹配?(双选)

/.*\*123\d/

A.******123

B.*****_1234

C.******1234

D._*1234

E._*123

13.以下哪个比较将返回 true?(双选)

A.’1top’ == ’1′

B.’top’ == 0

C.’top’ === 0

D.’a’ == a

E.123 == ’123′

14.如果用+操作符把一个字符串和一个整型数字相加,结果将怎样?

A.解释器输出一个类型错误

B.字符串将被转换成数字,再与整型数字相加

C.字符串将被丢弃,只保留整型数字

D.字符串和整型数字将连接成一个新字符串

E.整形数字将被丢弃,而保留字符串

15.考虑如下脚本。假设 http://www.php.net 能被访问,脚本将输出什么?

$s = file_get_contents ("http://www.php.net");

strip_tags ($s, array ('p'));

echo count ($s);

?>

A.www.php.net 的主页的字符数

B.剔除

 

标签后的 www.php.net 主页的字符数

C.1

D.0

E.剔除

 

以外的标签后的 www.php.net 主页的字符数

16.哪个函数能不区分大小写得对两个字符串进行二进制比对?

A.strcmp()

B.stricmp()

C.strcasecmp()

D.stristr()

E.以上都不能

17.以下哪些函数能把字符串里存储的二进制数据转化成十六进制?(双选)

A.encode_hex()

B.pack()

C.hex2bin()

D.bin2hex()

E.printf()

18.哪个函数能用来确保一个字符串的字符数总是大于一个指定值?

答案:____________

19.以下脚本输出什么?

$a = 'able osts indy';

echo wordwrap ($a, 1, "c", false);

?>

答案:____________

20.以下脚本输出什么?

$x = 'apple';

echo substr_replace ($x, 'x', 1, 2);

?>

A.x

B.axle

C.axxle

D.applex

E.xapple

答案


1. substr 函数能够胜任,但考虑到输出三个字母就需要三次调用该函数,所以排除此方法。

那么$alpha{$val}和$alpha{$val+1}是仅有的两个可能输出题目要求的字符串的选项。因

为 0 是数组的第一个索引,所以答案是 D。

2. 除了 A 以外的选项都能输出题目要求的字符串。PHP 中,加号(+)不能把两个字符

串合并成一个。

3. substr 函数返回字符串的一部分,而 strpos 函数擅长从一个字符串中找出某个指定的子

串。同时使用这两个函数将满足题目要求。注意,前一个函数从 0 开始索引,而后者

不是,因此需要+1。答案是 D。

4. 答案是 D。explode 函数使用一个字符串分隔另一个字符串,并把结果放入一个新建的

数组。strtok 函数也可以做同样的事,但需要多次调用。

5. 答案是 D。strcmp()提供了安全的字符串比较机制。注意,选项 C 是错的,strcasecmp()

不是一个“万能”函数,因为它不区分大小写。

6. 选项中没有一个正则表达式能真正代表题目所给字符串的匹配方式,但是选项 A 和 E

仍然能勉强匹配。选项 A 太普通了,它能够匹配任何字符串,因此答案是 E。

7. 正确答案是 A,B 和 E。用 crypt()和 str_rot13()来验证一个字符串是否被改变,效率很

低。crc32()比前面两个函数好些,如果能容忍一些小错误的话,它是个不错的选择。

8. file 函数将文件的文本内容读入一个数组,每个元素是一行。因此答案 E 正确。也许你

想知道为什么要把这样一个题目放在讲字符串的章节中,那是为了提醒你每一章的题

目所包含的知识点并不是绝对严格区分开的,正如写 PHP 脚本时,file 函数不能脱离

字符串函数单独存在一样。

9. 尽管条件不同,但 preg_split 和 explode 函数都能满足题目要求。ereg()拿一个正则表达

式匹配一个字符串;str_split()按固定长度分隔字符串;而 chop()则是 rtrim()别名,用来

移除字符串末尾处的空格。

10.本题考察你对字符串操作及操作符优先级的认识。连接运算符(.)的优先级比加号(+)

高。因此 PHP 解释器实际执行的运算可以表示为(‘Testing ‘ . 1) + (2 . ’45′)。由于字符串

test 1 不是数字,所以加号前面的运算等于 0。加号后面的运算等于 245,PHP 输出的

结果是 0+245,等于 245,所以答案是 D。

11.可以用访问数组元素的方式访问字符串中的字符,因此脚本只是把字符串中的第二个

字符($s[1])替换成了字符 2,最终将输出 12245。答案是 B。

12.本题的要点是理解这个正则表达式的含义——从左往右,首先是零个或多个任意字符

(.*),跟着是一个星号(\*),然后是 123,最后是一个数字。因此答案是 C 和 D。

13.B 和 E 正确。选项 B 中,在比较时,字符串 top 等同于数字 0。==操作符不比对数据

类型,所以将返回 true。答案 E 中,字符串 123 等同于数字 123,比较将返回 true。

14.字符串将被转换成数字(如果无法发生转换就是 0),然后与整型数字相加。答案是 B。

15.代码的本意是剔除 www.php.net 主页上除了 p 以外的的所有 HTML 标签。可实际上,

在代码的最后一行使用了 count 函数,它统计变量中的元素数量,而不是字符串中的字

符数。由于字符串是标量,对字符串使用 count 函数将永远返回 1。答案是 C。

16.题目其实就是在描述 strcasecmp 函数的作用,因此答案是 C。

17.正确答案是 B 和 D。pack 函数能对二进制数据进行复杂的格式化,包括将字符串中的

字符转化成十六进制表示。bin2hex 函数也有同样的转化功能。注意,printf()能将整数

转化成十六进制数,但无法转化字符串。

18.这是在说 str_pad 函数,它可以把字符串填充到指定长度。

19.脚本将输出 ablecostscindy。wordwrap 函数通常用来把字符串切割成指定长度。然而在

本题中,长度被设置为 1,因此函数将从空格处切割(第四个参数被设置为 false,因

此函数不会从单词的中间进行切割)。填充字符串是 c,等于把每个空格都换成了 c。

20.substr_replace 函数是用一个指定字符串替换原字符串中的某个部分,因此脚本输出

axle,答案是 B。

 

文件操作

你可能觉得PHP的文件操作功能并不怎样,但实际上它对开发者来说非常有用。即使你

是做网站开发的,学会相关技能也能让你如虎添翼。多亏了流包装器(stream wrappers,将

在第十章详细介绍),PHP才能够打开并读取远程文件,让在本地使用第三方网站的内容变

得可能。

站在更底层的角度,文件输入/输出能完成多种任务。可以用他读取预制文件的内容,

比如第三方提供的内容;或者通过PHP脚本让浏览器打开一个二进制文件,使得你能更切实

的控制它。无论如何,本章不仅考验你打开、关闭和读取文件的能力,还考查多进程下进行

文件操作的基础知识——例如文件锁。



php面试题及答案,经典php笔试题与答案

1. 函数______能读取文本文件中的一行。读取二进制文件或者其他文件时,应当使用

______函数。

A.fgets(), fseek()

B.fread(), fgets()

C.fputs(), fgets()

D.fgets(), fread()

E.fread(), fseek()

2. 文件指针能在PHP脚本结束时自动关闭,但你也可以用______函数来关闭。

答案:____________

3. 考虑如下PHP脚本,它一行一行的读取并显示某文本文件的内容。在问号处填入什么才

能使脚本正常运作?

$file = fopen("test", "r");

while(!feof($file)) {

echo ????????????;

}

fclose($file);

?>

A.file_get_contents($file)

B.file($file)

C.read_file($file)

D.fgets($file)

E.fread($file)

4. 以下哪种方法能保证锁在任何竞争情况下都安全?

A.用flock()锁住指定文件

B.用fopen()在系统的临时文件夹里打开文件

C.用tempnam()创建一个临时文件

D.用mkdir()创建一个文件夹来当

E.用tmpfile()创建一个临时文件

5.以下哪个函数能够获得文件的全部内容,并能够用在表达式中?(双选)

A.file_get_contents()

B.fgets()

C.fopen()

D.file()

E.readfile()

6. 在不把文件内容预加载到变量中的前提下,如何解析一个以特殊格式格式化过的多行文

件?

A.用file()函数把它分割放入数组

B.用sscanf()

C.用fscanf()

D.用fgets()

E.用fnmatch()

7.考虑如下脚本,最后文件myfile.txt的内容是什么?

$array = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

$f = fopen ("myfile.txt", "r");

for ($i = 0; $i < 50; $i++) {

fwrite ($f, $array[rand(0, strlen ($array) - 1)]);

}

?>

A.什么都没有,因为$array实际上是一个字符串,而不是数组

B.49个随机字符

C.50个随机字符

D.41个随机字符

E.什么都没有,或者文件不存在,脚本输出一个错误

8.函数delete是做什么的?

A.删除文件

B.删除文件夹

C.释放变量

D.移除数据库记录

E.没有这个函数!

9.考虑如下脚本,哪个PHP函数和它的功能最接近?

function my_funct ($file_name, $data)

{

$f = fopen ($file_name, 'w');

fwrite ($f, $data);

fclose ($f);

}

?>

A.file_get_contents()

B.file_put_contents()

C.没有这样的函数

D.file()

E.fputs()

10.如果你的脚本无法正确识别一个存储于另一个平台上的文件的行结尾,你该怎么办?

A.改变auto_detect_line_ending的设置

B.用正则表达式侦测行的最后一个字母

C.用fpos()

D.用ftok()

E.每次读取一个字符

11.如果想要可读可写得打开一个文件,该给fopen()传什么参数?(双选)

A.w

B.r

C.a

D.+

12.能够读写常规文件中的二进制数据的函数是______,该函数返回的资源能被fgets()使用。

答案:__________

13.以下哪些函数能读取文件的全部内容?(三选)

A.fgets()

B.file_get_contents()

C.fread()

D.readfile()

E.file()

14.哪个函数能够往文本文件中写入一个字符串?

答案:____________

15.考虑如下脚本。运行时,尽管文件test.txt已经被用unlink()函数删除,脚本仍然输出1,1。

在脚本的最后添加什么函数才能解决这个问题?

$f = fopen ("test.txt", "w");

fwrite ($f, "test");

fclose ($f);

echo (int) file_exists("test.txt") . ', ';

unlink ("c:\\test.txt");

echo (int) file_exists ("test.txt");

?>

A.clearstatcache()

B.fflush()

C.ob_flush()

D.touch()

E.以上都不对

16.函数______能判断一个文件是否可写。

答案:____________

17.以下哪个选项能将文件指针移到开头?

A.reset()

B.fseek(-1)

C.fseek(0, SEEK_END)

D.fseek(0, SEEK_SET)

E.fseek(0, SEEK_CUR)

18.stat()和fstat()有什么区别?

A.stat()基于文件指针工作,fstat()基于路径工作

B.fstat()基于文件指针工作,stat()基于路径工作

C.fstat()不能处理文件

D.stat()不能处理文件

E.fstat()是stat()的别名

19.以下哪个选项准确的描述出了方框中的脚本的作用?

echo number_format (disk_free_space ('c:\\') /

disk_total_space('c:\\') * 100, 2) . '%';

?>

A.计算Windows系统C盘的剩余磁盘空间大小

B.输出一个表示C盘剩余空间所占比例的两位小数

C.输出C盘剩余容量的byte数

D.计算C盘总容量与剩余空间的比率

E.以上都不对

20.假设image.jpg存在并能够被PHP读取,调用以下脚本时,浏览器上显示什么?

header ("Content-type: image/jpeg");

?>

readfile ("image.jpg");

?>

A.一张JPEG图片

B.一个二进制文件

C.下载一个二进制文件

D.下载一张JPEG图片

E.一张残破的图片

答案

1. fgets函数主要用来从文本文件中读取一行,当然你也可以指定每次读取的最大长度。

fread函数主要用来读取二进制数据。答案是D。

2. 函数fclose能关闭文件指针。

3. fgets函数能从文件中读取单独一行。因此答案是D。

4. 正确答案是D。这题很难,而且在实践中不大可能会碰到这样的问题——但这不正是你

读这本书的原因吗?!你必须记住,flock()使用一种“协议”锁定机制,即所有其他访

问此文件的进程也必须要使用flock()。如果某个进程没有这么做,竞争就会产生,锁就

不安全。用mkdir创建一个文件夹能保证任何时刻只有一个进程处理能处理某文件,即

保证操作的原子性。因此,你可以创建一个临时文件夹并“护”住它,直到I/O操作完成。

5. 只有file_get_contents和file函数返回文件的全部内容,因此答案是A和D。readfile函数也

能读取文件的全部内容,但它直接把内容送入了输出缓存,因此不能用在表达式中。

6. fscanf函数能根据指定格式解析文件内容,因此答案是C。sscanf函数只能用来操作字符

串。

7. 答案是E。注意,文件被以r模式打开,即只读模式。因此,如果文件不存在,PHP将输

出一个错误来指出没有找到文件。如果文件存在,fopen()将被成功调用,但由于是以只

读方式打开,fwrite()会失败。如果我们用w代替r,脚本就能正常运行,并且myfile.txt

内将有50个随机字符(记住,可以像访问数组那样使用索引来访问字符串)。

8. 答案是E。PHP里没有叫delete()的函数。删除文件用unlink(),删除文件夹用rmdir(),数

据库记录用SQL语句删除,释放变量用unset()。

9. 脚本实现的功能与file_put_contents()最接近,但这个函数直到PHP5才被引入,因此答案

是C。

10.PHP4.3.0开始,php.ini引入了auto_detect_line_endings设置,系统在保存文本文件时能够

自动侦测行结束符号的类型,因此答案是A。

11.要可读可写的打开文件,你必须使用r+模式,因此答案是B和D。

12.这是在说fopen()函数。

13.正确答案是B,D和E。file,readfile和file_get_contents都能读取文件的全部内容。

14.fwrite()和fputs()两个函数在这里都可以,而后者其实是前者的别名。在PHP中,写入二

进制数据和写入字符串没有区别。

15.PHP会缓存某些文件系统函数的返回值——包括file_exists(),这样能提高脚本处理重复

操作时的效率。当脚本里有大量删除文件的操作时,缓存很容易就会过时,因此需要清

理缓存。答案是A。

16.这是在说is_writeable函数,它返回一个表示文件是否可写的布尔值。

17.正确答案是D。fseek()用来移动文件指针。SEEK_SET指出偏移量从文件开头开始计算。

如果没有特别指出,SEEK_SET就是fseek()的默认模式。注意,rewind函数等效于

fseek(0,SEEK_SET)。

18.答案是B。fstat函数通过已打开的文件指针取得文件信息,stat()获取指定路径的文件信

息。

19.正确答案是B。disk_free_space函数能确定指定设备上(本题中即Windows下的C盘)的

剩余磁盘空间(单位是byte),而disk_total_space()能确定设备的总容量。两者相除,再

乘以百分率,最后用number_format()保留两位小数,脚本输出的就是剩余磁盘空间所占

的比例。最后在加上百分号以防混淆。

20.答案是E。你注意到两个代码块之间的空行了吗?它将被输出到浏览器上,使得整个图

片的二进制数据出错。因此浏览器将显示一个破碎的图片(或者是一条信息,指出图片

出错)。 译者注:原文中两个代码块之间并没有空行,而在我添加了空行之后,也没有

调试出答案中描述的情况。)

管理

日期与时间

从某一点上来看,几乎所有的网站都需要处理日期与时间。假如你需要收集用户的生

日,或者记录某个特定事件的发生时间,PHP 的日期函数将很好的帮助你完成任务。

但是 PHP 的日期/时间管理功能并不完美。它基于 UNIX 时间戳运行,容易受到攻击,

作为开发者,你必须谨慎处理可能遇到的恶意数据。

同时,在 Web 上进行日期管理是一件国际性的事务。你必须能依据时区、地区的不同

来显示对应的日期信息。

你可能感兴趣的:(php 面试题)