PHP基础面试题

1.POST和GET这两种提交方式有什么区别?

HTPT对于客户端与服务器的交互定义了不同的方式,最基本的方法有四种:PUT、DELETE、POST、GET,对应着对网络上某个资源的增、删、改、查。因此,GET一般用于获取、查询资源,而POST一般用于更新资源信息。

  1. 使用目的:GET 是从服务器上获取数据;POST 是向服务器传送数据
  2. 可见性:GET 请求参数是作为一个键值对的序列附加到URL上的;POST 则是把提交的数据放置在是HTTP包的包体中
  3. 安全性:GET 由于把参数添加到了URL上,因此是不安全的;而POST 则比较安全
  4. 数据大小:GET 一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大);POST 请求传输数据的大小根据 php.ini 配置文件设定。

2.什么是AJAX?它的优势是什么?

AJAX(Asynchronous Javascript AND XML)的全称是异步的JavaScript和XML,可以实现局部刷新,减轻了服务器的压力,也提高了用户体验。

3.什么是MVC框架?它的优势是什么?

MVC(Model View Controller)是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

  • 模型(Model):用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。
  • 视图(View):界面设计人员进行图形界面设计。能够实现数据有目的的显示。
  • 控制器(Controller):负责转发请求,对请求进行处理。起到不同层面间的组织作用,用于控制应用程序的流程。

优点是:可以实现代码的重用性,避免产生代码冗余;M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式

4.SESSION与COOKIE的区别?

        由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session。 而在客户端,就需要Cookie,每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。

        实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,服务器就知道你是谁了。

        Session 因为 Session ID 的存在,通常要借助 Cookie 实现,但这并非必要,只能说是通用性较好的一种实现方案。 如果客户端的浏览器禁用了Cookie,一般情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

        总结一下:

        Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

        Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

  1. 存储位置:Session存储于服务器,Cookie存储于浏览器
  2. 安全性:session安全性比cookie高
  3. Session为‘会话服务’,在使用时需要开启服务(session_start()),Cookie不需要开启,可以直接用
  4. Session通常借助Cookie来实现。

5.PHP常用的数组、字符串和数据库操作函数有那些?

1.常用数组函数

in_array( )     判断元素是否在数组中
count( )     返回数组中元素的数目
array_merge( )     将多个数组合并成一个数组
array_diff( )     比较两个或两个以上数组的差异
array_intersect( )     获取两个或两个数组以上的交集
array_keys( )     获取数组的key列表
array_values( )     获取数组的值列表
array_unique( )     删除数组中的重复值
array_push( )     将一个或多个元素插入数组的末尾(入栈)
array_pop( )     弹出并返回 array 数组的最后一个单元(出栈)
array_walk( )     使用用户自定义函数对数组中的每个元素做回调处理

2.常用字符串函数

trim( )     移除字符串两侧的空白字符和其他字符
strlen( )     获取字符串的长度
mb_strlen( )     获取字符串长度(可指定字符编码,对中文字符串计算长度)
substr()     返回字符串的一部分
str_replace( )     子字符串替换
str_repeat ( )     重复一个字符串
is_string( )     检测变量是否是字符串
str_shuffle ( )     随机打乱一个字符串
sprintf( )    返回根据格式化字符串生成的字符串(通常用于获取分表后的数据表名)
strstr( )     查找字符串的首次出现
addslashes     使用反斜线引用字符串

3.数据库操作函数:

1.$conn = mysqli_connect('db_host', 'dbl_user', 'db_password',"db_name");      打开一个到 MySQL 服务器的新的连接
2.mysqli_select_db($con,"test");    更改连接的默认数据库:
3.$result = mysqli_query($con,"SELECT * FROM websites");      执行针对数据库的查询
4.$row = mysqli_fetch_array($result,MYSQLI_NUM);    从结果集中取得一行作为数字数组或关联数组
5.$row = mysqli_fetch_assoc($result);    从结果集中取得一行作为关联数组
6.$row = mysqli_fetch_row($request);    从结果集中取得行
7.$num = mysqli_affected_rows($conn);    返回前一次MySQL操作所影响的记录条数
8.$query = mysqli_real_escape_string($conn,$query);     转义在 SQL 语句中使用的字符串中的特殊字符
9.$rowcount = mysqli_num_rows($result);     返回结果集中行的数量
10.mysqli_free_result($result);    放结果内存
11.mysqli_close($con);     关闭先前打开的数据库连接