现在的位置: 首页 > 综合 > 正文

php面试题5—php面试题系列

2013年12月05日 ⁄ 综合 ⁄ 共 7556字 ⁄ 字号 评论关闭

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

问题

1. 考虑如下 SQL 语句。哪个选项能对返回记录的条数进行限制?(双选)

SELECT * FROM MY_TABLE

A.如果可能,用把查询转换成存储例程

B.如果程序允许,给查询指定返回记录的范围

C.如果可能,添加 where 条件

D.如果 DBMS 允许,把查询转换成视图

E.如果 DBMS 允许,使用事先准备好的语句

2. 可以用添加______条件的方式对查询返回的数据集进行过滤?

答案:____________

3. 内关联(inner join)是用来做什么的?

A.把两个表通过相同字段关联入一张持久的表中

B.创建基于两个表中相同相同行的结果集

C.创建基于一个表中的记录的数据集

D.创建一个包含两个表中相同记录和一个表中全部记录的结果集

E.以上都不对

4. 以下哪个 DBMS 没有 PHP 扩展库?

A.MySQL

B.IBM DB/2

C.PostgreSQL

D.Microsoft SQL Server

E.以上都不对

5. 考虑如下脚本。假设 mysql_query 函数将一个未过滤的查询语句送入一个已经打开的数

据库连接,以下哪个选项是对的?(双选)

$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);

?>

A.MYTABLE 表中的记录超过 1 条

B.用户输入的数据需要经过适当的转义和过滤

C.调用该函数将产生一个包含了其他记录条数的记录

D.给 URL 传递 ID=0+OR+1 将导致 MYTABLE 中的所有表被删除

E.查询语句中应该包含数据库名

6.______语句能用来向已存在的表中添加新的记录。

答案:____________

7.以下哪个说法正确?

A.使用索引能加快插入数据的速度

B.良好的索引策略有助于防止跨站攻击

C.应当根据数据库的实际应用按理设计索引

D.删除一条记录将导致整个表的索引被破坏

E.只有数字记录行需要索引

8.join 能否被嵌套?

A.能

B.不能

9.考虑如下数据表和查询。如何添加索引能提高查询速度?

CREATE TABLE MYTABLE (

ID INT,

NAME VARCHAR (100),

ADDRESS1 VARCHAR (100),

ADDRESS2 VARCHAR (100),

ZIPCODE VARCHAR (10),

CITY VARCHAR (50),

PROVINCE VARCHAR (2)

)

SELECT ID, VARCHAR

FROM MYTABLE

WHERE ID BETWEEN 0 AND 100

ORDER BY NAME, ZIPCODE

A.给 ID 添加索引

B.给 NAME 和 ADDRESS1 添加索引

C.给 ID 添加索引,然后给 NAME 和 ZIPCODE 分别添加索引

D.给 ZIPCODE 和 NAME 添加索引

E.给 ZIPCODE 添加全文检索

10.执行以下 SQL 语句后将发生什么?

BEGIN TRANSACTION

DELETE FROM MYTABLE WHERE ID=1

DELETE FROM OTHERTABLE

ROLLBACK TRANSACTION

A.OTHERTABLE 中的内容将被删除

B.OTHERTABLE 和 MYTABLE 中的内容都会被删除

C.OTHERTABLE 中的内容将被删除,MYTABLE 中 ID 是 1 的内容将被删除

D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化

E.数据库没用变化

11.DESC 在这个查询中起什么作用?

SELECT *

FROM MY_TABLE

WHERE ID > 0

ORDER BY ID, NAME DESC

A.返回的数据集倒序排列

B.ID 相同的记录按 NAME 升序排列

C.ID 相同的记录按 NAME 倒序排列

D.返回的记录先按 NAME 排序,再安 ID 排序

E.结果集中包含对 NAME 字段的描述

12.以下哪个不是 SQL 函数?

A.AVG

B.SUM

C.MIN

D.MAX

E.CURRENT_DATE()

13.如果一个字段能被一个包含 GROUP BY 的条件的查询语句读出,以下哪个选项的描述

正确?

A.该字段必须有索引

B.该字段必须包括在 GROUP BY 条件中

C.该字段必须包含一个累积值

D.该字段必须是主键

E.该字段必须不能包含 NULL 值

14.以下查询输出什么?

SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2

ON TABLE1.ID <> TABLE2.ID

A.TABLE1 和 TABLE2 不相同的记录

B.两个表中相同的记录

C.TABLE1 中的记录条数乘以 TABLE2 中的记录条数再减去两表中相同的记录条数

D.两表中不同记录的条数

E.数字 2

15.______能保证一组 SQL 语句不受干扰的运行?

答案:____________

 

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

 

答案

1. 有两个方法能限制返回记录的条数——使用 where 条件和指定查询返回的记录的范围。

通常情况下,如果没有特殊需要,尽量不要用 select *,这会浪费大量的数据缓存。答

案是 B 和 C。

2. 有很多种方式能过滤查询返回的数据,但这题描述的显然是 where 条件。

3. 答案是 B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相

同的所有记录的数据集。

4. 答案是 E。PHP 有 PostgreSQL 和 MySQL 扩展库。访问 DB/2 可以用 ODBC,访问 Microsoft

SQL Server 可以用 TDS 和 mssql 扩展。这题考验你对 PHP 的兼容性的了解——在决定

开发小组要使用什么数据库时会用得上。

5. 答案是 B 和 D。用户输入未经过滤就直接送往了数据库,这非常危险。如果 URL 包含

ID=0+OR+1 这样的参数时,实际的查询为 DELETE FROM MYTABLE WHERE ID = 0

OR 1,数据库将删除表中所有的记录。

6. 答案显然是 INSERT。

7. 答案是 C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中

的冗余查询同样也能提高数据库效率。

8. 能。你可以嵌套任意数量的 join 条件,但最终的结果可能并不是你想要的。

9. 答案是 C。给 ID 字段设置索引能提高 where 条件执行的效率,给 NAME 和 ZIPCODE

设索引则能使排序更快。

10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是

E。

11.答案是 C。DESC 能反转默认的排序机制。因此在本题中,数据将先按 ID 升序排列,

再按 NAME 降序排列。

12.CURRENT_DATE 函数不是标准 SQL 中的函数(但某些特定的数据库平台可能包含了

这个函数)。

13.答案 B 和 C 正确。在标准 SQL 中,如果出现 GROUP BY,结果集中所有的字段都必

须是聚集值,或者是 GROUP BY 结构本身的一部分。某些 DBMS——比如 MySQL—

—允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。

14.本题描述了一种在使用 join 时常犯的概念性错误。很多人可能觉得这个查询将返回两

75

个表中非共有记录。但实际上数据库却认为是“读出所有 ID 非共有的记录”。DBMS

将读取读取左边表中所有的记录加上右边表中 ID 非共有的记录。因此,该查询将读取

TABLE1 中的每条记录乘以 TABLE2 中的每条记录再减去两表中相同的记录条数。

15.事务能实现这个功能。事务能将任意个 SQL 语句组合起来一起执行,或者一起回滚。

76

10

流与网络编程

当要处理外部数据源时,PHP 提供了许多不同的方式来与外部世界连接。这当中包括

文件访问与 E-Mail 管理。然而,这两种机制的针对性都太强:文件管理只能处理本地文件

系统,而 E-Mail 函数也只能解决网络连接中很小一部分的问题。

要实现更多的功能,PHP 提供了一种叫“流(stream)”的工具,使得处理任何文件形

式的数据源成为可能。比如,“fopen 封装器”能将外部服务器上的页面读入你的脚本中,

这是使用流的最好的例子。它让你能够使用文件函数从英特网中获得内容。

最后,更复杂的操作可以通过 socket 编程实现,使得高层应用成为可能。

本章考察你对这两个领域中知识的了解。

 

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

 

问题

1. 以下哪一项不是合法的 PHP 文件资源?

A.\\server\path\filename

B.http://www.example.com/index.php

C.myfile.txt

D.compress.zlib://myfile.txt

E.以上都不合法

2. 哪个函数能创建并注册一个 PHP 的流封装器?

答案:____________

3.用 stream_get_meta_data 函数,流 API 无法提供下列哪种信息?

A.是否仍然有数据未读

B.流是否过期

C.流是否被阻挡

D.通过流传输了多少数据

E.流构建的成分

4.以下哪些是 PHP 支持的流传输方式?(双选)

A.http

B.STDIO

C.ftp

D.STDOUT

E.stream

5. Stream context 提供了通过当前流传输的数据的信息,并能对以下哪个部分进行配置?

(双选)

A.流过滤器(Stream Filter)

B.流传输器(Stream Transport)

C.文件封装器(File Wrapper)

D.单独的读/写流

E.以上全部

78

6.哪个函数能用来手动打开一个 socket,来连接一台文件封装器不支持的服务器?

答案:____________

7.PHP 不支持以下那种传输协议?

A.tcp

B.udp

C.udg

D.pdc

E.unix

8. 假设你需要通过 tcp 周期性的向一台服务器发送数据。时间间隔不确定,你必须能在发

送完成后立刻进行下次发送。而你的脚本还需要在传输间隔中完成其他操作。你在编

写脚本时发现,如果服务器响应时间过长,则经常要在 fread()上等待,使得其他操作

无法正常进行。如何解决这个问题?

A.降低 max_execution_time,迫使 fread()减少等待时间

B.调用 fsockopen()进行连接时,降低超时等待的时间

C.关闭 socket 阻隔

D.打开 socket 阻隔

E.以上都不对

9.处理 socket 超时时,连接超时与读写超时可以分开设置。哪个函数能实现这个功能?

答案:____________

10.假设你需要编写一个脚本,用来通过任意一个流读取文本数据,并用另一个 ROT13

编码的流写回。编码必须在用第二个流写回时进行。怎么做最合适?

A.把编码后的数据存在临时变量中,把这个变量写入流

B.用流过滤器即时编码

C.创建一个 ROT13 查询表,然后一个字符一个字符的即时写入

D.ROT13 无法即时编码

E.以上都不对

11.以下脚本输出什么?

echo long2ip (ip2long ('127.0.256'));

?>

A.一个警告

B.255.255.255.255

C.-1

D.127.0.1.0

E.127.0.256.0

12.以下脚本输出的是什么?

echo getservbyname ('ftp', 'tcp');

?>

A.本地 FTP 服务器列表

B.名为“tcp”的 FTP 服务器的地址

C.与 TCP 服务器相连的名为“FTP”的端口

D.除了 FTP 以外所有服务的端口列表

13.gethostbynamel 函数有什么用?

A.返回某个主机名的 IP

B.返回某个主机名的所有 IP 列表

C.以长整型数的形式返回某个主机的 IP

D.以长整型数的形式返回某个主机的所有 IP 列表

E.以上都不对

14.以下那种操作不能用 ftp://流封装?(双选)

A.读取文件

B.写入文件

C.建立一个稳定的连接并改变当前目录

D.创建新目录

15.如何创建一个自定义的流处理器?

A.调用 stream_wrapper_register()函数,并定义一个进行流操作的类

B.用 stream_wrapper_register()注册一个处理函数

C.创建一个和要处理的流封装器同名的类,并用 fopen()打开

D.用 stream_load()加载流封装器

 

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

 

答案

1. 正确答案是 E,所有选项都是合法的封装器。PHP 中,几乎所有的文件访问功能能用

选项中的任何一种方式来操作本地和远程文件。

2. stream_wrapper_register 函数用来注册一个用户自定义的文件封装器(以类的形式创建)

作为封装协议。它需要两个参数:新协议的名称和操作它的类的名称

3. 正确答案是 D。stream_get_meta_data 函数无法告诉你通过流传输了多少数据——它只

能告诉你还剩多少数据需要传输。

4. 正确答案是 B 和 E。PHP 只支持两种流传输(本地操作用 STDIO,远程操作用 stream),

并且将根据创建的流的类型来自动选择合适的传输方式。

5. 答案是 B 和 C。Stream context 能用来修改当前文件封装器或者流本身传输的行为方式。

通常不需要创建 stream context,因为 PHP 已经能够很好的处理相关问题了。

6. 一般都用 fsockopen 函数来打开一个指向 PHP 不支持其协议的服务器的端口。这能就

能让用户自定义的文件封装器与 PHP 不支持其协议的服务器进行连接。

7. 答案是 D——pdc,它不是网络传输协议。在选项之外,PHP 还支持安全传输协议,比

如 ssl 和 tls。

8. 正确答案是 C。默认情况下,fsockopen 函数创建的 socket 的阻隔是打开的。这意味着

任何读写数据的操作将“阻隔”其他操作,直到当前操作完成。阻隔关闭时,如果没

有数据需要 fread()读取,函数将很快返回,你就可以做其他的事了。

9. 要调整 socket 读写数据的时间,你必须使用 stream_set_timeout 函数。不能分开设置读

和写的超时。不过,请注意,调用 fsockopen()时,流的超时设置不影响连接的超时设

置。

10.正确答案是 B。流过滤器(stream filter)能应用在任何流上,并且能对数据流同时进

行多个操作。举例来说,可以给一个流同时添加 ROT13 过滤器和 base64 过滤器,来合

并成 base64/ROT13 编码。

11.答案是 D。ip2long 函数将字符串 127.0.256 转换成合法的 IP 地址 127.0.1.0,long2ip()

的功能正好相反。这是检查一个 IP 是否合法的有效手段(PHP 手册里就是这么说的)。

12.答案是 C。getservbyname 函数返回特定服务器的端口和协议——这里是 FTP 和 TCP,

通常在 21 端口(并不总是这样,你可以编辑服务器配置文件来改变这个端口)。

13.答案是 B。gethostbynamel 函数返回一个包含某个指定地址的主机下所有 IP 的数组。

14.正确答案是 C 和 D。ftp://流封装器能从 FTP 服务器读写数据,但不能改变当前目录或

新建目录——FTP 客户端才行。

15.答案是 A。stream_wrapper_register 函数能注册一个新的流封装器,它需要接收用来操

作流的类的名称。

 

 

编写安全的

PHP 程序

PHP 太强大、太容易了,因此开发者常常忘记 Web 安全相关的问题。

抛开重要性不看,安全问题往往是网站中最容易被人忽视的一个部分。不幸的是,有

很多种方法可以从内部或外部危害系统的安全,你必须不断的找出并修补这些潜在的危险

因素。

在进行安全检测时,有很多需要强调的问题——不止是与安全直接相关的,还包括许

多其他的内容。

要编写安全的程序,首先必须掌握一些基础技术,这样你才能应付本章的题目。

 

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

 

 

问题

1. 以下哪种方法能防止你的 PHP 程序遭受外部入侵?

A.使用复杂的加密算法

B.保护数据库密码

C.如果有可能的话,使用 SSL

D.验证输入

E.只使用来源可信的输入

2. 假设$action 和$data 变量用来接受用户输入,并且 register_globals 是打开的。以下代码

是否安全?

if(isUserAdmin()) { $isAdmin = true; }

$data = validate_and_return_input($data);

switch($action)

{

case 'add':

addSomething($data);

break;

case 'delete':

if($isAdmin) {

deleteSomething($data);

}

break;

case 'edit':

if($isAdmin) {

editSomething($data);

}

break;

default:

print "Bad Action.";

}

?>

A.安全。在执行受保护的操作前先检查$isAdmin 是否为 true

B.不安全。没有确认$action 是不是合法输入

C.不安全。$isAdmin 可以通过 register_globals 被篡改

D.安全。因为它验证了用户数据$data

E.A 和 B

85

3.要防止跨站攻击,以下哪些是需要做的?(三选)

A.永远不要使用 include 和 require 引入靠用户输入决定路径的文件(比如:

include”$username/script.txt”;)

B.除非网站需要,否则关闭 allow_url_fopen

C.避免使用如 curl 这类用来打开远程连接的扩展库

D.使用类似 strip_tags()一类的函数过滤一个用户输入给另一个用户看的内容

E.以上都对

4.如果 register_globals 必须要被打开,如何才能防止恶意用户危害系统安全?(双选)

A.过滤所有来自非信任源的数据

B.过滤所有外部数据

C.所有变量在使用前先初始化

D.使用难猜变量名来防止用户篡改数据

E.以上都对

5.SQL 查询常常基于用户输入的数据来构建。以下哪种方法能避免安全隐患?

A.在数据服务器和 web 服务器之间放置防火墙

B.转义用户数据,使其中无法包含 DBMS 能执行的 SQL 命令

C.使用存储例程

D.使用面向对象编程,把每个查询定义为单独的类

6. 某些时候需要在 PHP 脚本中使用第三方功能,来实现一些 PHP 不能完成的任务(比如

调用压缩软件压缩某种 PHP 不支持其格式的文件)。在 PHP 脚本中执行系统命令时,

以下哪些选项能确保没有命令注入?(双选)

A.总是给要在 exec()中执行的命令加`

B.总是使用 shell_exec 函数,它能够在执行前对命令进行安全检查

C.使用 escapeshellcmd 函数转义命令中的特殊字符

D.在执行命令前,先用 ini_set()打开 safe_mode,

E.用 escapeshellarg 函数在执行前转义命令参数

7. 处理 HTTP 文件上传时,PHP 把文件储存在$_FILES 中。在 PHP 脚本的执行周期中,

这些文件将放在本地的临时文件夹里,而在脚本结束后,文件将被自动删除。在处理

HTTP 文件上传时,如果确保当前操作的文件是正确的文件?(双选)

A.操作前,将文件名与浏览器报告的文件名对比

86

B.操作前,用 file_exists 函数确保文件存在

抱歉!评论已关闭.