PHP面试试卷

文章目录

一、 选择题

1、 PHP是一种什么型的语言?( c )

A、编译型
B、解释型
C、两者都是
D、两者都不是

2、PHP中,单引号和双引号所包围的字符串有什么区别?( ad )

A.单引号速度快,双引号速度慢
B.双引号速度快,单引号速度慢
C.两者没有速度差别
D.双引号解析其中以$开头的变量,而单引号不解析

3、以下代码执行结果为( a )

<? $num=24linux”+6; echo $num; ?>

A. 30
B. 24linux6
C. 6
D. 30linux

4、session和 cookie的区别说法错误的是?( c )

A. session和 cookie都可以记录数据状态
B.在设置session和cookie之前不能有输出
C.在使用cookie前要使用 cookie_start()函数初始
D. Cookie是客户端技术,session是服务器端技术

5、 mysql_connect()与@mysql_connect()的区别是( b )

A @mysql_connect()不会忽略错误,将错误显示到客户端
B. mysql_connect()不会忽略错误,将错误显示到客户端
C.没有区别
D.功能不同的两个函数

6、请看代码,数据库关闭指令将关闭哪个连接标识?( 都没有关闭,如果需要关闭,应该为:mysql_close( l i n k 1 ) ; m y s q l c l o s e ( link1);mysql_close( link1);mysqlclose(link2)😉

<?
  $link1 = mysql_connect(“localhost”,”root”,");
  $link2 = mysql_connect(“localhost”,”root”,”");
  mysql_close();
?>

A. $link1 B. $link2 C.全部关闭 D.报错

7、关于 mysql_fetch_object说法中,正确的是:( d )

A、mysql_fetch_object和 mysql_fetch_array一样,没什么区别
B、mysql_fetch_object返回值是个对象,所以在速度上比 mysql_fetch_array要慢
C、mysql_fetch_object返回值是个数组,所以在速度上和 mysql_fetch_array及 mysql_fetch_row差不多
D、mysql_fetch_object返回值是个对象,在速度上和 mysql_fetch_array及mysql_fetch_row差不多

8、关于 exit( )与 die( )的说法正确的是(cd )

A、当 exit( )函数执行会停止执行下面的脚本,而 die()无法做到
B、当 die()函数执行会停止执行下面的脚本,而 exit( )无法做到
C、die()函数等价于 exit()函数
D、die()函数与 exit()函数没有直接关系

9、 下面的代码的输出是什么?( b)

<?php
  $s =12345;
  $s[$s[1]] =2;
  echo $s;
?>

A. 12345
B. 12245
C. 22345
D. 11345
E. array

10、 在用浏览器查看网页时出现 404错误可能的原因是(b )

A页面源代码错误
B文件不存在
C与数据库连接错误
D权限不足

二、 问答题

1.PHP的环境变量有哪些?请写出所有短名称及与之对应的长名称环境变量

$GLOBALS[] :存储当前脚本的所有全局变量
$_SERVER[]:当前web服务器变量数组    ->$HTTP_SERVER_VARS
$_GET[]:以get方法提交的表单数据     ->$HTTP_GET_VARS
$_POST[]:以post方法提交的表单数据   ->$HTTP_POST_VARS
$_COOKIE[]:取得或设置用户浏览器cookie中存储的变量数组   $HTTP_COOKIE_VARS
$_FILES[]:存储上传文件提交到当前脚本的数据             $HTTP_POST_FILES
$_ENV[]:存储当前web环境变量                          $HTTP_ENV
$_REQUEST[]:提交表单的数据							 
$_SESSION[]:当前脚本的会话变量数组                       $HTTP_SESSION_VARS

2.试举例说明,include()与 require()的区别

Include(),require()是php的两种引入文件的方式。
Require(“a.php”)这个函数通常放在php程序的最前面,php程序在执行之前,会先读入require所指定引入的文件,使它变成php程序网页的一部分。
Include(“a.php”)这个函数一般是放在流程控制的处理部分。Php程序网页在读到include的文件时,才将它读进来。这种方式,可以把程序执行时的流程简化。
两者的根本区别在于对错误处理的方式不同。
Require一个文件存在错误时,程序会终止执行,并且显示致命错误
Include一个文件存在错误时,程序不会中断,而是继续执行,并且显示一个警告错误

3.请以空格做为间隔,拆分字符串‘Apple Orange Banana Strawberry ‘,组成数组

$fruit,数组中所有元素都用小写字母,并按照字母先后次序排列:

   $str = “Apple Orange Banana Strawberry”;
   $_fruit = explode(“ ”, $string);
   foreach($_fruit as $v){
	 $fruit[] = strtolower($v);
   }
   sort($fruit);
   var_dump($fruit);

4.对于用户输入一串字符串 s t r i n g , 要 求 string,要求 stringstring 中只能包含大于 0 的数字和英

文半角逗号(,),请用正则表达式验证,对于不符合要求的$string返回出错信息

public function check($string){
	$param =/^(1-9)+$/;
	if(preg_match($param,$str)){
		return true;
	}else{
		return false;
	}
}

5.谈谈优化网站访问速度一些常用的方法和技巧

1、尽可能的减少http的请求数 [content]
常用的方法,合并css,js文件(将一个页面中的css和js文件分别合并)以及image map和css sprites等。而css sprites 是指只用将页面上的背景图合并成一张,然后通过css的background-position属性定义不过的值来取他的背景。
2、使用CDN(content delivery network)[server]
通过在现有的internet中增加一层新的网络架构,将网站的内容发布到最接近用户的cache服务器内,通过DNS负载均衡的技术,判断用户来源就近访问cache服务器取得所需内容,这样就可以有效减少数据在网络上的传输的时间,提高速度。
3、添加expires头(或者cache-control)[server]
现在越来越多的图片,脚本,css,flash被签入到页面中,当访问时作多次的http请求。可以通过设置expires header 来缓存这些文件。Expire 其实就是通过header报文来指定特定类型的文件在浏览器中的缓存时间。下次访问,可以大大加快速度。
4、Gzip组件[server]
将文件先在服务器端进行压缩,然后在传输,这样可以减少文件传输的大小。
5、将css样式凡在页面的上方
6、将脚本移动到底部(包括内联的)[javascript]
7、避免使用css中的expression[css]
8、将javascript和css独立成外部文件[javascript] [css]
9、减少dns查询[content]
10、压缩javascript和css (包括内联的)[javascript][css]
11、避免重定向[server]
12、移除重复的脚本[javascript]
13、配置实体标签(ETags)[css]

6.网站可能存在的安全隐患以及对应的解决方法

可能存在的隐患:
1)sql注入
2)跨站脚本攻击
3)IIS短文件/文件夹漏洞
4)系统敏感信息泄漏
解决方法:
1)在服务器与网络的接口处配置防火墙,阻断外界用户对服务器的扫描和探测
2)限制后台网站访问权限如:禁止公网ip访问后台;禁止服务员使用弱命令,
3)关闭错误提示 display_errors = off
4)对用户输入的数据进行安全检查或过滤
5)防xss攻击 clean_xss(),strip_tags(),htmlspecialchars()
6)防注入,插入数据时提权
Addslashes( s t r ) ; m y s q l e s c a p e s t r i n g ( str); mysql_escape_string( str);mysqlescapestring(str); PDO连接数据库
7)限制敏感页面或目录的访问权限

7.Cookie和 Session有什么区别

Cookie 是一种能够让网站服务器把少量的数据存储到客户端的硬盘和内存里,或者是从客户端的硬盘读取数据的一种技术。当你浏览某网站时,由web服务器置于你硬盘上的一个非常小的文件,记录用户id,密码,浏览过的网页,停留的时间等。
Session能在客户端存储一些变量,可以让程序员方便的调用,可以使用session对象存储特定的用户会话信息。由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制需要借助cookie机制来达到保存标识的目的。
如果不设置过期时间,则cookie生命周期为浏览器的会话时间,只要浏览器窗口关闭,cookie就消失了。这种生命周期为浏览器会话的cookie被称为会话cookie,一般保存在内存里。
Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息。程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识为session_id,如果已经包含一个session_id则说明以前已经为这个客户创建过session,服务器就按照sesison_id将这个sesison_id检索出来使用,如果客户端请求不包含session_id,则为此客户重新创建一个session并且生成一个与次相关的sesion_id,在这次响应中返回给客户端。
Server端程序调用httpServletRequest.getSession(),然后创建session()

8.什么是 MVC,PHP怎么实现 MVC,实际工作中是怎么体现的

MVC简单的说就是将网站源码分类、分层。
Mvc指:
m: model 模型负责数据库操作
v:view 视图,负责调用model调取数据,在用模版展示最终结果
c: controller控制器,程序的入口,决定调用哪个view,并告诉view该做什么。
Php实现mvc的思想:
有三个基类:controller、view、model,然后不同的c、v、m分别继承他们对应的属性和方法。
实际应用:
可以定义一些属性,例如操作那些表,操作那些字段
1、controller类的设计
一个main()方法,供程序调用,如要通过get和post决定如何处理
一个getmodel( m o d e l ) 方 法 , 在 需 要 调 用 数 据 库 的 时 候 , 调 用 对 应 的 m 一 个 D i s p l a y ( model)方法,在需要调用数据库的 时候,调用对应的m 一个Display( model)mDisplay(view)方法,在main()方法中调用,载入对应的v,并调用v的main()方法
2、view类的设计与controller很相似
一个main()方法,当C载入V的时候调用这个方法,使程序能继续执行下去。
一个getmodel( m o d e l ) 方 法 , 在 需 要 调 用 数 据 库 的 时 候 , 调 用 对 应 的 m 一 个 D i s p l a y ( model)方法,在需要调用数据库的 时候,调用对应的m 一个Display( model)mDisplay(view)方法,调用对应的模版文件,并把数据传递给模版
3、model类的设计
一个getDB()方法 ,获得一个数据库实例
一个Load()方法,载入数据
一个Add()方法,根据定义好的属性自动构造sql语句,并执行插入操作
一个Update()方法,执行修改操作
一个Del()方法,执行删除操作

9.已有 10万 cdkey号码(数字,字母组成的序列号,每个序列号可在现有的网

站上兑换一定的物品,比如购物券、会员资格等等)。给出发放 cdkey的一个方
案(只考虑发放,不必考虑生成 cdkey、兑换 cdkey环节)。
要求:1)确定目标群体,一般以产品的使用用户为主
2)如果总的目标发放者小于等于10万,提示在某个时间段,所有登录用户,每人发一个cdkey号码,并且如果将该活动转发给新用户,新用户注册成功,可在另一份,发完为止,先到先得。
3)如果目标发放者大于10万,则规定将该活动转发,新用户注册成功,两人均可得到一个cdkey号码。
4)若涉及到等级问题,则是在达到某个等级才可获得
5)涉及到支付,则可跟消费额挂钩,或者在指定的门店消费
6)涉及到支付,也可使用步骤3.
7)以上步骤也可结合使用,注明不可累计(可累计)

10.谈谈 mysql表的几种类型的优缺点,以及优化时需要注意的地方

目前mysql一共向用户提供了包括DBD、HEAP、ISAM、MEREG、MyIAS、InnDB和Gemeni七种mysql表类型。其中DBD、InnoDB属于事务安全类表,其他属于事务非安全类表。
DBD
Berkeley DB(DBD)表是支持事务处理的表,它提供MySQL用户期待已久的功能–事务控制。事务控制在任何数据库系统中都是一个极有价值的功能,因为它们确保一组命令能成功地执行或回滚。
HEAP
HEAP表是MySQL中存取数据最快的表。这是因为他们使用存储在动态内存中的一个散列索引,不过如果MySQL或服务器崩溃,这些内存数据将会丢失。
ISAM
ISAM表是早期MySQL版本的缺省表类型,直到MyIASM开发出来。建议不要再使用它。
MERGE
MERGE是一个有趣的新类型,在3.23.25之后出现。一个MERGE表实际上是又一个MyISAM表的集合,合并而成的一个表,主要是为了效率的考虑,因为这样不仅仅可以提高速度、搜索效率、修复效率而且还节省了磁盘空间。
MyIASM
MyIASM基于了IASM代码,应该可以说是IASM的衍生品,不过增加了不少有用的扩展。它是MySQL的默认数据表类型,基于了传统的ISAM类型,ISAM是Indexed Sequential Access Method(有索引的顺序访问方法)的缩写,一般来说,它是存储记录和文件的标准方法。与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具。ISAM表格可以被压缩,而且它们支持全文搜索,不过它们是事务不安全的,而且也不支持外键。如果事务回滚将会造成不完全回滚,从而不具备原子性。所以假如忽略事务以及访问并发性的话,并且需要执行大量的SELECT检索语句的话,MyISAM将是最好的选择。
InnoDB
InnoDB是MySQL 4.0之后推出的一种比较新的数据表类型,这种类型是事务安全的。它与BDB类型具有相同的特性,它们还支持外键。InnoDB表格速度很快具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它。如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,同样应该使用InnoDB表。对于支持事务的InnoDB类型的表来说,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动提交,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能。
Gemeni
Gemeni表,据听说也是在MySQL 4.0之后推出的,不过截至当前,很少有针对它的介绍,同样应用也就更少了,我们暂时不作介绍。
MySQL的数据表类型很多,其中比较重要的是MyISAM,InnoDB这两种。
这两种类型各有优缺点,需要根据实际情况选择适合的,MySQL支持对不同的表设置不同的类型。MyISAM表类型是一种比较成熟稳定的表类型,但是MyISAM对一些功能不支持。

11. SQL注入

由于程序中对用户输入检查不严格,用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些敏感信息。

  1. 数字型的输入必须是合法的数字 2)字符型的输入必须对 ’ 进行特殊处理 3) 验证Post, Get, Cookie 4)使用静态查询语句,如PreparedStatement
场景1:                                                            攻击方法:
select count(*)                                                        
  from User                                                               
where username = 'admin'                
    and password = 'p@fd_123'       
select count(*) 
	from User
where username = 'admin'
  	and password = '1' or '1'='1'

场景2:                                  
Statement stmt = conn.createStatement();
stmt.executeQuery(
"select username,password,age,address 
     from User 
where name ="+ strname
);

改进:
sql = "select username,password,age,address 
	from User 
where name ='?'";
PreparedStatement pstmt = conn.prepare(sql);
pstmt.setString(1,request.getParameter("strname"));
Result rs = pstmt.executeQuery();

12. XSS跨站脚本漏洞

攻击者往Web页面里插入恶意JS或html,当用户浏览该页面时,嵌入其中的JS或html代码被执行,从而达到恶意攻击目的。

防犯办法:
1)过滤 2)转义

13. Cookie欺诈

Cookie过期时间未设置,从而导致攻击者窃取或操纵客户会话和Cookie。

防犯办法:
始终生成新的会话,供用户登录时认证。 如:在登陆页面加上

  request.getSession().invalidate();  //清空session
  if(request.getCookies() != null)
    {
        Cookie cookie = request.getCookies()[0];  // 获取cookie
        cookie.setMaxAge(0);  //让cookie过期
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值