php基础面试题

一、echo,print,print_r,var_dump的区别?

(1)echo    是语言结构,无返回值.输出一个或者多个字符串.
(2)print   是函数,有返回值.只能打印简单类型变量.例如:整形、字符串
(3)print_r 是函数,有返回值.能打印复杂类型变量.例如:数组、对象
(4)var_dump能打印数组、对象,并且带数据类型.

二、cookie与session的区别?如果客户端禁用了cookie功能,将会对session有什么影响?

cookie和session的区别:
(1)cookie数据存放在客户端的浏览器上. session数据放在服务器上.
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗. 考虑到安全应当使用session.
(3)session会在一定时间内保存在服务器上.当访问增多,会比较占用服务器的性能. 考虑到减轻服务器性能方面应当使用cookie.
(4)单个cookie数据大小限制是3K,很多浏览器都限制一个站点最多保存20个cookie. session是没有大小限制和服务器的内存大小有关.
(5)一般将登陆信息等重要信息存放在session.  其他信息存放在cookie

禁用Cookie就不能得到Session.
产生原因:Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session.

假定用户关闭禁用Cookie,如何正常使用Session?
(1)设置php.ini配置文件中的“session.use_trans_sid = 1”,或者编译时打开打开了“--enable-trans-sid”选项,让PHP自动跨页传递Session ID.
(2)手动通过URL传值、隐藏表单传递Session ID.
(3)用文件、数据库等形式保存Session ID,在跨页过程中手动调用.

三、WEB开发中数据提交方式有几种?有什么区别?

get与post两种方式
区别:
(1)get从服务器获取数据,post向服务器传送数据.
(2)get传值在url中可见,post在url中不可见.
(3)get传值一般在2KB以内,post传值大小可以在php.ini中进行设置.
(4)get安全性非低,post安全性较高,get执行效率却比post高.

建议:
(1)get安全性较post要差包含机密信息,建议用post数据提交式.
(2)做数据查询建议用get. 做数据添加、修改或删除建议用post.

四、常见的HTTP状态码含义?

HTTP状态码分类:
1** - 信息提示: 服务器收到的请求,需要请求者继续执行操作
2** - 成功: 操作被成功接收并处理
3** - 重定向: 需要进一步的操作以完成请求
4** - 客户端错误: 请求包含语法错误或者无法完成请求
5** - 服务器错误: 服务器在处理请求的过程中发生了错误

100:(继续) 请求者继续发送请求.
101:(切换协议) 请求者已要求服务切换协议,服务器已确认准备切换.

200:(成功) 服务器已经成功处理请求.
201:(已创建) 请求成功并且服务器创建新的资源.
202:(已接受) 服务器已接受请求,但处理尚未完成. 
204:(无内容) 服务器处理请求,但是没有任何内容.

300:(多种选择) 针对请求,服务器可执行多种操作. 
301:(永久移动) 请求的网页已永久移到到新位置.
302: (临时移动) 服务器从不同位置的网页响应请求,但请求者应据继续使用原有位置进行以后请求.
304:(未修改) 自从上次请求后,请求网页未修改过.

400:(错误请求) 服务器不理解请求的语法.
401:(未授权) 请求要求身份验证.
403:(禁止) 服务器拒绝请求.
404:(未找到) 服务器找不到请求的网页.

500:(服务器内部错误) 服务器遇到错误,无法完成请求.
501:(服务器无法识别) 服务器不支持当前请求所需要的某个功能.
502:(错误网关) 服务器作为网关或代理,从上游服务器收到无效响应.
503:(服务不可用) 服务器目前无法使用(由于超载和停机维护).

 五、mvc是什么?相互间有什么关系?

 mvc是一种开发模式主要分为三部分:
 (1)m(model)也就是模型,负责数据的操作
 (2)v(view)也就是视图,负责前后台的显示
 (3)c(controller)也就是控制器,负责业务逻辑

客户端请求项目的控制器,如果执行过程中需要用到数据,控制器就会到模型中获取数据,再将获取到的数据通过视图显示出来

六、isset()和empty()区别?

(1)isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假.
(2)empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真.

七、php常用的超全局变量

(1)$_GET     get传送方式
(2)$_POST    post传送方式
(3)$_REQUEST 可以接收到get和post两种方式的值
(4)$GLOBALS  所有的变量都放在里面
(5)$_FILE    上传文件使用
(6)$_SERVER  系统环境变量
(7)$_SESSION 会话控制的时候会用到
(8)$_COOKIE  会话控制的时候会用到

 八、include,require,include_once,require_once的区别?

处理失败方式不同:
(1)include和include_once 失败时只产生一个警告级别错误,程序继续运行.
(2)require和require_once 失败时会产生一个致命级别错误,并停止程序运行.
唯一区别:
include_once/include和require_once/require区别:在于当所包含的文件代码已经存在时候,不在包含.

九、双引号和单引号的区别?

(1)双引号解释变量,单引号不解释变量
(2)双引号中的变量($var)和特殊字符(
之类)会被转义,单引号中的内容不会被转义
(3)单引号执行速度快

十、如何防止SQL注入,XSS攻击和CSRF攻击?

(1)SQL注入:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.
   防范:1.一些sql语句进行过滤,比如delete update insert select * ;2.使用PDO占位符进行转义。

(2)XSS跨站脚本攻击:是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行.达到攻击的目的.
  (例如:攻击者一般通过script标签对网站注入一些可执行的代码)
  防范:1.消毒(对危险字符进行转义); 2.Http唯一(防范XSS攻击者窃取Cookie数据)

(3)CSRF跨站请求伪造:是一种对网站的恶意利用.
  防范:1.在表单中添加令牌(token);  2.验证码; 3.检查请求头中的Referer,字段用以标明请求来源于哪个地址.

php面向对象基础知识 点击查看

php常见五种设计模式 点击查看

mysql基础知识语法汇总整理

Linux 命令大全(菜鸟教程)

原文地址:https://www.cnblogs.com/cxx8181602/p/9443449.html