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)多版本并发控制。