PHP面试题汇总

分享一个PHP面试题汇总的微信小程序 《 PHP面试题汇总 》 ,
在微信小程序中搜索 PHP面试题汇总 即可找到
----------------------------------------------------------------------------------

1.用正则表达式获取所有的被4整除的二进制数字?、

^1((10*1)|(01*0))*10*$ //被3整除的二进制数字

^1[01]*00$ //被4整除的二进制数字

2.include和require的区别?

include()会产生一个警告,而require()则导致一个致命的错误(出现错误,脚本停止执行)

require() :如果文件不存在,会报出一个fatal error.脚本停止执行

include() : 如果文件不存在,会给出一个 warning,但脚本会继续执行

这里特别要注意的是:使用include()文件不存在时,脚本继续执行,这种情况只出现在PHP 4.3.5之前

推荐使用require_once()和include_once(),可以检测文件是否有重复包含。

3.cookie和session的区别与联系?

区别:

cookie数据存放在客户的浏览器上,session数据放在服务器上。

cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

考虑到安全应当使用session。

session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

考虑到减轻服务器性能方面,应当使用COOKIE。

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

联系:

session是通过cookie来工作的 session和cookie之间是通过$_COOKIE['PHPSESSID']来联系
的,通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。

4.请说明PHP中传值和引用的区别。什么时候传值什么时候引用?

传值,函数中的对值的任何改变在函数外都会被忽略。

引用,函数中的对值的任何改变在函数外都会被体现出来。

优缺点:按值传递是,PHP必须复制值,特别是对于大型的字符串和对象来说,这将是一个代价很大的操作。引用传递不需要复制值,对于性能提高有很大好处。

5.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在哪个预定义变量中?而链接到当前页面的URL记录在哪个预定义变量中?

$_SESSION['PHP_SELF']; $_SESSION['HTTP_HOST']

6.foo()和@foo()有什么区别?

foo()会在执行这个函数时,任何解释错误,语法错误,执行错误都会显示在页面上。@foo()在执行时,会隐藏解释错误,语法错误,执行错误的错误信息。

7.在HTTP 1.0中,状态码401的含义是未授权;如果返回“找不到文件”的提示,则可用哪个函数?

header('HTTP 1.0 404 NOT Found');

8. 检测一个变量是否有设置的函数是?是否为空的函数是?

isset empty

9.strlen()与mb_strlen()的作用分别是什么?

strlen返回字符串的长度,如果为空字符串,则返回0

mb_strlen()返回具有encoding编码的字符串str包含的字节数,多字节的字符被统计为1,如果给定的encoding无效则返回false。

mb前缀的函数是用来处理多字节的,一般汉语,韩语,日语中用。

10.<? echo ‘hello’ ?> 没有输出结果,可能是什么原因?

可能服务器上面没有开启短标签,short_open_tag设置为Off。在php.ini中设置short_open_tag=On即可。

11. 常量分为系统内置常量和自定义常量,请说出最常见的几个系统内置常量?

当前PHP文件的相对路径(__FILE__)

当前PHP文件中所在的行号(__LINE__)

当前函数名,只对函数内调用起作用(__FUNCTION__)

当前类名,只对类起作用(__CLASS__)

12.常量和变量有哪些区别?

(1)常量没有$符号;

(2)常量只能是标量类型,变量的数据类型有8种原始类型;

(3)常量只能使用define()定义,不能通过赋值语句定义;

(4)常量可以在任何地方定义和使用,变量有全局和局部之分;

(5)常量一旦定义就不能被重新定义或取消定义,变量通过赋值方式重新定义。

13.JSON格式数据有哪些特点?

JSON(JavaScript ObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。

优点:(1)方便前台数据操作。

(2)数据体积小,传输快。

(3)客户端操纵XML的时候需要创建ActiveX对象,JSON则完全就是一个JS对象,不需要创建DOM。

14.什么是SQL注入,如何防范?

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或页面请求的字符串,最终达到欺骗服务器执行恶意的SQL命令。防范措施如下

(1) 永远不要信任用户的输入。对用户的输入进行校验,过滤关键字和转义字符。

(2) 永远不要使用动态拼接SQL,可以使用参数化的SQL或直接使用存储有限的数据库链接。

(3) 不要把机密信息直接存放,加密或者hash掉密码和敏感信息。

防止SQL注入漏洞的函数有: addslashes(),mysql_escape_string()

15.为什么MyISAM会比Innodb的查询速度快?

(1)数据库,Innodb要缓存,MyISAM仅缓存索引块。

(2)innodb寻址要映射到块,再到行,MyISAM记录的直接是文件的offset,定位比Innodb快。

(3)Innodb还需要维护MVCC一致,虽然你的场景没有,但他还是需要去检查和维护MVCC(Multi-Version Concurrency Control)多版本并发控制。