php面试题汇总三(基础篇附答案)

问题javascript

1. 如何访问会话变量(session)?php

A.经过$_GEThtml

B.经过$_POSTjava

C.经过$_REQUESTweb

D.经过全局变量正则表达式

E.以上都不对数据库

2. 哪一个函数能让服务器输出以下 header?数组

set-Cookie: foo=bar;浏览器

答案:_______________安全

3. 在忽略浏览器 bug 的正常状况下,如何用一个与先前设置的域名(domain)不一样的新

域名来访问某个 cookie?

A.经过 HTTP_REMOTE_COOKIE 访问

B.不可能

C.在调用 setcookie()时设置一个不一样的域名

D.向浏览器发送额外的请求

E.使用 Javascript,把 cookie 包含在 URL 中发送

4. index.php 脚本如何访问表单元素 email 的值?(双选)

 

 

A.$_GET[‘email’]

B.$_POST[‘email’]

C.$_SESSION[‘text’]

D.$_REQUEST[‘email’]

E.$_POST[‘text’]

5. 如下脚本将如何影响$s 字符串?(双选)

25

$s = '

 

Hello

 

‘;

$ss = htmlentities ($s);

echo $s;

?>

A.尖括号<>会被转换成 HTML 标记,所以字符串将变长

B.没有变化

C.在浏览器上打印该字符串时,尖括号是可见的

D.在浏览器上打印该字符串时,尖括号及其内容将被识别为 HTML 标签,所以不可

E.因为调用了 htmlentities(),字符串会被销毁

6. 若是不给 cookie 设置过时时间会怎么样?

A.马上过时

B.永不过时

C.cookie 没法设置

D.在浏览器会话结束时过时

E.只在脚本没有产生服务器端 session 的状况下过时

7. 思考以下代码:若是用户在两个文本域中分别输入“php”和“great”,脚本输出什么?

 

 

echo $_GET['element'];

?>

A.什么都没有

B.Array

C.一个提示

D.phpgreat

E.greatphp

8. 在 HTTPS 下,URL 和查询字串(query string)是如何从浏览器传到 Web 服务器上的?

A.这两个是明文传输,以后的信息加密传输

B.加密传输

C.URL 明文传输,查询字串加密传输

D.URL 加密传输,查询字串明文传输

E.为确保加密,查询字串将转换为 header,夹在 POST 信息中传输

9. 当把一个有两个同名元素的表单提交给 PHP 脚本时会发生什么?

A.它们组成一个数组,存储在超级全局变量数组中

B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中

C.第二个元素将覆盖第一个元素

D.第二个元素将自动被重命名

E.PHP 输出一个警告

10.如何把数组存储在 cookie 里?

A.给 cookie 名添加一对方括号[]

B.使用 implode 函数

C.不可能,由于有容量限制

D.使用 serialize 函数

E.给 cookie 名添加 ARRAY 关键词

11.如下脚本输出什么?

ob_start();

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

echo $i;

}

$output = ob_get_contents();

ob_end_clean();

echo $ouput;

?>

A.12345678910

B.1234567890

C.0123456789

D.什么都没有

E.一个提示

12.默认状况下,PHP 把会话(session)数据存储在______里。

A.文件系统

B.数据库

C.虚拟内容

D.共享内存

E.以上都不是

13.你在向某台特定的电脑中写入带有效期的 cookie 时老是会失败,而这在其余电脑上都

正常。在检查了客户端操做系统传回的时间后,你发现这台电脑上的时间和 web 服务

器上的时间基本相同。并且这台电脑在访问大部分其余网站时都没有问题。请问这会

是什么缘由致使的?(双选)

A.浏览器的程序出问题了

B.客户端的时区设置不正确

C.用户的杀毒软件阻止了全部安全的 cookie

D.浏览器被设置为阻止任何 cookie

E.cookie 里使用了非法的字符

14.假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过时并被

回收?

A.1440 秒后

B.在 session.gc_maxlifetime 设置的时间过了后

C.除非手动删除,不然永不过时

D.除非浏览器重启,不然永不过时

E.以上都不对

15.哪一个函数能把换行转换成 HTML 标签

答案:____________

 

答案

1. 尽管在 register_globals 被设置为 on 时,能够经过全局变量来访问 session,但在较新版

本的 PHP 中,为了不形成安全隐患,php.ini 文件已经把 register_globals 设置为 off

了。所以答案是 E。

2. 虽然 header 函数在这里也能用,但这题显然是在说 setcookie 或 setrawcookie 函数。

3. 答案是 B。浏览器不容许来自某个域名的 HTTP 事务更改另外一个域名下的 cookie,否

则这将形成严重的的安全问题。

4. 既然表单采用 post 方式传输,那么脚本将只可能从$_POST 和$_REQUEST 两个超级全

局变量数组中取到值。元素名称(email)是键名,所以答案是 B 和 D。注意,因为可

能致使潜在的安全问题,这里不鼓励使用$_REQUEST。

5. 本题考验你对 HTML 编码的认识以及代码查错能力。变量$s 在被函数 htmlentities()处

理事后,结果返回给了变量$ss,而$s 本身并无被改变。所以答案是 B 和 D。你可能

以为本身被戏弄了,可是记住,发现这样的小错误是捉虫能力中很重要的一部分。

6. 若是没有设置过时时间,cookie 将在用户会话结束时自动过时。cookie 不须要服务器

端会话的支持,所以答案是 D。

7. 表单使用 post 方式传输,因此不管在文本框中输入什么,其值都会传给$_POST 超级

全局变量,这里的$_GET 数组没有值。答案是 A。

8. HTTPS 传输发生时,浏览器与服务端马上完成加密机制的握手,以后的数据都是加密

传输而不是明文传输——包括 URL,查询字串。而在 HTTP 传输中,它们都是明文传

输的,所以答案是 B。

9. 对于收到的查询字串和 POST 信息,PHP 只是简单的把元素添加进对应的超级变量数

组中。结果就是若是有两个元素同名,前一个会被后一个覆盖。答案是 C。

10.只有 B 永远正确。虽然你能够用 implode 函数把数组转化成字符串,而后存在数组里,

但却没法保证往后必定能用 serialize()把这个字符串还原成数组。浏览器对单个 cookie

有容量限制,所以在 cookie 里存储数组不是个好主意。但事情也并不是永远是这样,你

仍然能够存储一些比较小的数组。

11.这又是一个考验 debug 能力的题。注意到了吗,在脚本的末尾,echo 语句中的$output

变量拼错了!脚本不会输出任何东西,答案是 E。

12.答案是文件系统(A)。默认状况下,PHP 把全部会话信息存储在/tmp 文件夹中;在没

有这个文件夹的操做系统中(好比 Windows),必须在 php.ini 中给 session.save_path 设

置一个合适的位置(如 c:\Temp)。

 

13.B 和 D 是最有可能出问题并应该深刻调查的地方。因为浏览器访问其余网站都正常,

因此不多是浏览器程序出了问题。杀毒软件一般不会选择性的只阻止安全的 cookie

(不过有可能会阻止全部的 cookie)。你首先应当检查浏览器是否被设置为阻止全部

cookie,这是最有可能致使该问题的缘由。同时,错误的时区设置也多是根源——给

cookie 设置有效期时用得是 GMT 时间。可能会出现 cookie 在写入时就马上过时,从

而没法被脚本接收的状况。

14.session.gc_maxlifetime 设置的是用户最后一次请求到 session 被回收之间的时间间隔。

尽管数据文件并无被真正删除,不过一旦 session 被回收,你将没法对此 session 进行

访问。巧合的是,session.gc_maxlifetime 的默认设置正好是 1440 秒,但这个数字是可

以被系统管理员调整的。因此答案应该是 B。

15.函数 nl2br 能实现这个功能。

数组

PHP 最强大的功能大概就是处理数组了。PHP 容许开发者建立由各类不一样数据类型的

键和值组成的数组,并容许你对它进行排序、分割和组合等多种操做。

力量越大,责任越大。找到最佳的办法来处理如此复杂的数组并非一件轻松的事。

本章一方面考察你对数组工做机制的认识——不光是理论上的,还要求实践。另外一方面考

察你“人工处理”简单脚本——指出哪里出错或者脚本将输出什么的能力。

 

 

问题

1. 索引数组的键是______,关联数组的键是______。

A.浮点,字符串

B.正数,负数

C.偶数,字符串

D.字符串,布尔值

E.整型,字符串

2. 考虑以下数组,怎样才能从数组$multi_array 中找出值 cat?

$multi_array = array("red",

"green",

42 => “blue”,

“yellow” => array(“apple”,9 => “pear”,”banana”,

“orange” => array(“dog”,”cat”,”iguana”)));

?>

A.$multi_array['yellow']['apple'][0]

B.$multi_array['blue'][0]['orange'][1]

C.$multi_array[3][3][2]

D.$multi_array['yellow']['orange']['cat']

E.$multi_array['yellow']['orange'][1]

3. 运行如下脚本后,数组$array 的内容是什么?

$array = array ('1', '1');

foreach ($array as $k => $v) {

$v = 2;

}

?>

A.array (’2′, ’2′)

B.array (’1′, ’1′)

C.array (2, 2)

D.array (Null, Null)

E.array (1, 1)

 

4.对数组进行升序排序并保留索引关系,应该用哪一个函数?

A.ksort()

B.asort()

C.krsort()

D.sort()

E.usort()

5.哪一个函数能把数组转化能字符串?

答案:____________

6. 如下脚本将按什么顺序输出数组$array 内的元素?

$array = array ('a1', 'a3', 'a5', 'a10', 'a20');

natsort ($array);

var_dump ($array);

?>

A.a1, a3, a5, a10, a20

B.a1, a20, a3, a5, a10

C.a10, a1, a20, a3, a5

D.a1, a10, a5, a20, a3

E.a1, a10, a20, a3, a5

7. 哪一个函数能把下方数组的内容倒序排列(即排列为:array(‘d’, ‘c’, ‘b’, ‘a’))?(双选)

$array = array ('a', 'b', 'c', 'd');

?>

A.array_flip()

B.array_reverse()

C.sort()

D.rsort()

E.以上都不对

8. 如下脚本输出什么?

 

$array = array ('3' => ‘a’, ’1b’ => ‘b’, ‘c’, ‘d’);

echo ($array[1]);

?>

A.1

B.b

C.c

D.一个警告

E.a

9.哪一种方法用来计算数组全部元素的总和最简便?

A.用 for 循环遍历数组

B.用 foreach 循环遍历数组

C.用 array_intersect 函数

D.用 array_sum 函数

E.用 array_count_values()

10.如下脚本输出什么?

$array = array (0.1 => ‘a’, 0.2 => ‘b’);

echo count ($array);

?>

A.1

B.2

C.0

D.什么都没有

E.0.3

11. 如下脚本输出什么?

$array = array (true => ‘a’, 1 => ‘b’);

var_dump ($aray);

?>

A.1 => ‘b’

B.True => ‘a’, 1 => ‘b’

C.0 => ‘a’, 1 => ‘b’

D.什么都没有

E.输出 NULL

12.在不考虑实际用途的前提下,把数组直接传给一个只读函数比经过引用传递的复杂度

低?

A.是的,由于在把它传递给函数时,解释器须要复制这个数组

B.是的,若是函数修改数组的内容的话

C.是的,若是这个数组很大的话

D.是的,由于 PHP 须要监视函数的输出,已肯定数组是否被改变

E.不是

12. 如下脚本输出什么?

function sort_my_array ($array)

{

return sort ($array);

}

$a1 = array (3, 2, 1);

var_dump (sort_my_array (&$a1));

?>

A.NULL

B.0 => 1, 1 => 2, 2 => 3

C.一个引用错误

D.2 => 1, 1 => 2, 0 => 3

E.bool(true)

13. 如下脚本输出什么?

$result = '';

function glue ($val)

{

global $result;

$result .= $val;

}

$array = array ('a', 'b', 'c', 'd');

 

array_walk ($array, 'glue');

echo $result;

?>

答案:____________

15.如下脚本输出什么?

$array = array (1, 2, 3, 5, 8, 13, 21, 34, 55);

$sum = 0;

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

$sum += $array[$array[$i]];

}

echo $sum;

?>

A.78

B.19

C.NULL

D.5

E.0

 

复制代码
答案

1. 键名是整型数字(integer)的数组叫索引数组,键名是字符串的数组叫关联数组。正

确答案是 E。

2. cat 被包含在另外两个数组中。顺藤摸瓜,首先,键 yellow 必需要用到,它跟在 orange

后面。最内部的数组是个索引数组,字符串 cat 是第二个值,它的索引是 1。正确答

案是 E。

3. 答案是 B。foreach 操做的是$array 的副本,所以对原来的值没有影响。

4. 只有 asort 函数能在保留原有索引关系的前提下进行排序。答案是 B。

5. serialize 函数能把复杂的数据结构转换成字符串,并能够用 unserialize 函数再转换回原

先的结构。还有 implode 函数,它能够把数组中的全部元素组成一个字符串。

6. 函数 natsort()使用“天然排序”法对数组进行排序。在本题中,数组元素已经“天然”

排列了,所以函数根本没有改变数组。答案是 A。

7. array_flip()只能把数组中每一个元素的键和值进行交换。rsort()和 array_reverse()则能把题

目中的数组逆向排序为须要的形式(’d’,’c’,’b’,’a’)。答案是 B 和 D。

8. 给数组中的元素设置数字键时,PHP 从可用的最小的数字开始,递增设置。若是没有

指定从哪一个数字开始,PHP 将从 0 开始。本题中,3 是第一个元素的键,所以,第三

个元素的键将被设置为 4,最后一个元素是 5。注意,1b 不是数字。所以,键是 1 的

值不存在,答案是 D。

9. array_sum 函数计算数组中全部元素的总和。答案是 D。

10. 脚本输出 1(答案是 A)。由于只有整型数字和字符串能够被用来作数组的键——浮点

数字会被转换成整型数字。因此 0.1 和 0.2 会被转换成 0,$array 中只有 0=>’b’这个元

素。

11. 这题试图把你的注意力从真正的问题上转移开。true 等同于数字 1,所以$array 数组

将只包含一个元素。然而在 var_dump()函数里出现了一个错误——$array 被错拼成了

$aray,少了一个“r”。所以 var_dump 将输出 NULL(也多是一个提示 ,这取决于

你的设置)。答案是 E。

12. 这题有些绕人。首先,注意两点:第一,你并不是必定要使用这两种方式来传递数组。

若是须要用一个函数来修改数组的内容,经过引用传递将是惟一的方法——但题中不

是这种状况;第二,题目强调把数组传递个一个只读函数。若是不是这样,因为对数

组进行改变将产生一个该数组的副本,答案会是 B。然而常规状况下,PHP 须要建立

一套结构来维持一个引用,另外一方面,因为 PHP 采用懒拷贝(lazy-copy)——又叫写

 

时拷贝(copy-on-write)——机制,变量在被改变以前不会产生副本,因此经过引用

将数组传递给一个不修改数组内容的函数比经过值传递要慢,而经过值传递是一种快

速、安全的在函数间共用数组的方式。答案是 E。

13. 答案是 E。sort 函数不产生或返回数组副本,而是直接对传递给它的数组本体进行操

做。该函数只返回布尔值 true,表明排序成功(或者 false,表明出错)。注意,这里

将数组$a1 引用传递给了 sort_my_array(),咱们不同意这样作,应该在函数中从新声

明引用。

14. array_walk 函数将一个指定函数应用在数组中的每一个元素上。所以脚本 glue 函数将把

数组中的全部元素连在一块儿,输出 abcd。

15. 本题主要考验你分析脚本的能力。你也许以为这题很费解——但咱们在调试别人写的

代码时却不得不常常面对此类使人不悦的问题。相对于咱们所见过的一些代码,这已

经算至关简单了。脚本中的 for 循环了 5 次,每次都把键是数组$array 中键为$i 的值

的值加进$sum。这听起来有点像绕口令,但若是你一步一步想,你将发现, 当$i 等

于零时,$array[$array[$i]]等同于$array[$array[0]],也就是$array[1],也就是 2。顺着

这个思路,最终的答案是 78。

 

字符串与

正则表达式

字符串是 PHP 的“瑞士军刀”——做为一种 Web 开发语言,PHP 最常打交道的就是

字符串。所以对于开发者来讲,处理字符串是一项很是基础的技能。

幸运的是,因为 PHP 开发团队的努力,PHP 对字符串的处理至关易学。你只需迈过第

一个难关,接下来就一马平川了。

可是,PHP 的这一部分功能并不是完美。本章考验你对字符串的了理解及对处理字符串

的函数的认识。此外,你还必须面对正则表达式——一个很是有用,却老是被开发者忽试

的工具——的编写艺术。
复制代码
相关文章
相关标签/搜索