2017年php面试题汇总

时间:2023-03-09 15:54:50
2017年php面试题汇总

1.http状态码
200 这个没有什么好说的,是代表请求被正常的处理成功了
302 代表临时重定向
400 400表示请求报文中存在语法错误。需要修改后再次发送
403 表明请求访问的资源被拒绝了。没有获得服务器的访问权限,IP被禁止等
404 表明请求的资源在服务器上找不到。当然也可以在服务器拒绝请求且不想说明理由时使用
500 表明服务器端在执行请求时发生了错误,很有可能是服务端程序的Bug或者临时故障
503 表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
504 网关超时,是代理服务器等待应用服务器响应时的超时

2.http请求方法
get 获取资源 GET方法用来请求访问已被URI识别的资源。也就是指定了服务器处理请求之后响应的内容
post 传输实体主体 POST与GET的区别之一就是目的不同,二者之间的区别会在文章的最后详细说明。虽然GET方法也可以传输,但是一般不用,因为GET的目的是获取,POST的目的是传输。
put 传输文件 类似FTP协议,文件内容包含在请求报文的实体中,然后请求保存到URL指定的服务器位置

3.get和post的区别

A. 从字面意思和HTTP的规范来看,GET用于获取资源信息而POST是用来更新资源信息。

  B. GET提交请求的数据实体会放在URL的后面,用?来分割,参数用&连接,举个栗子:/index.html?name=wang&login=1

  C. GET提交的数据长度是有限制的,因为URL长度有限制,具体的长度限制视浏览器而定。而POST没有。

  D. GET提交的数据不安全,因为参数都会暴露在URL上。

4.cookie和session的区别和联系

Cookie和Session都是为了保存客户端和服务端之间的交互状态,实现机制不同,各有优缺点。首先一个最大的区别就是Cookie是保存在客户端而Session就保存在服务端的。Cookie是客户端请求服务端时服务器会将一些信息以键值对的形式返回给客户端,保存在浏览器中,交互的时候可以加上这些Cookie值。用Cookie就可以方便的做一些缓存。Cookie的缺点是大小和数量都有限制;Cookie是存在客户端的可能被禁用、删除、篡改,是不安全的;Cookie如果很大,每次要请求都要带上,这样就影响了传输效率。Session是基于Cookie来实现的,不同的是Session本身存在于服务端,但是每次传输的时候不会传输数据,只是把代表一个客户端的唯一ID(通常是JSESSIONID)写在客户端的Cookie中,这样每次传输这个ID就可以了。Session的优势就是传输数据量小,比较安全。但是Session也有缺点,就是如果Session不做特殊的处理容易失效、过期、丢失或者Session过多导致服务器内存溢出,并且要实现一个稳定可用安全的分布式Session框架也是有一定复杂度的。在实际使用中就要结合Cookie和Session的优缺点针对不同的问题来设计解决方案。

5.shell命令
ls:列出目录
cp:复制
rm:删除
cat:将文件的内容打印到标准输出
mkdir:建立目录
tar:打包压缩
ps:查看进程
top:查看机器使用情况
df:检查磁盘空间占用情况
find:在指定路径下查找指定文件
grep:过滤文本
cd:改变当前工作目录
mount:挂载/卸载指定的文件系统
ifconfig:配置网络或显示当前网络接口状态
telnet::远程登录

6.PHP 如何获取客户端的IP地址
$_SERVER['REMOTE_ADDR'] ; 通过全局数组来获得

getenv('REMOTE_ADDR') ; 通过环境变量来获得

7.如何重启nginx服务器
nginx -s reload
nginx -s stop >>>>快速停止nginx
nginx -s quit >>>>完整有序的停止nginx
启动nginx /usr/local/nginx/sbin/nginx

8. sql 语句应该考虑哪些安全性

防止 Sql 注入,对特殊字符进行转义、过滤或者使用预编译的 sql 语句绑定变量。
最小权限原则,特别是不要用 root 账户,为不同的类型的动作或者组建使用不同的账户。
当 sql 运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄露服务器和数据库相关信息。
9.MYSQL 取得当前时间的函数是?格式化日期的函数是?
current_time()用于取得当前时间
date_format(datetime, format)用于格式化日期,如:select date_format(now(),'%Y%m%d');

10.请简述项目中优化 sql 语句执行效率的方法,从哪些方面,sql 语句性能如何分析?
尽量选择较小的列
将where中用的比较频繁的字段建立索引
select子句中避免使用‘*’
避免在索引列上使用计算、not in 和<>等操作
当只需要一行数据的时候使用limit 1
保证单表数据不超过200W,适时分割表。

11.使用 php 写一段简单查询,查出所有姓名为“张三”的内容并打印出来

$mysql_db=mysql_connect("local","root","pass");
mysql_select_db("DB",$mysql_db);
$result=mysql_query("select * from user where name='张三'");

while($row=mysql_fetch_array($result)){
echo $row['name']. $row['tel']. $row['content']. $row['date'];
echo "<br>";
}

12.memcache和redis的区别

1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3. Redis支持数据的备份,即master-slave模式的数据备份。
4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。
2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘
4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10
5、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从
6、存储数据安全–memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)
7、灾难恢复–memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复
8、Redis支持数据的备份,即master-slave模式的数据备份。

13.验证邮箱的正则表达式
*************************************
http://www.jb51.net/article/36172.htm
*************************************
$mail = 'runoob@runoob.com'; //邮箱地址 $tel="/^1[34578]\d{9}$/" // 手机号
$pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/";
preg_match($pattern, $mail, $matches);
var_dump($matches); //输出匹配结果
14.php中传值与传引用的区别?什么时候传值什么时候传引用?
按值传递:函数内对值的任何改变在函数外部都会被忽略。
引用传递:函数内对值的任何改变在函数外部也能反映出这些修改
应用场景:按值传递时,php必须复制值,而按引用传递则不需要复制值,故引用传递一般用于大字符串或对象
15.php遍历文件夹下所有文件
function read_all_dir($dir){
$result = array();
$handle = opendir($dir);
if($handle){
while($file = readdir($handle) !== false){
if($file != '.' && $file != '..'){
$cur_path = $dir.DIRECTORY_SEPARATOR.$file;
if(is_dir($cur_path)){
$result['dir'][$cur_path] = read_all_dir($cur_path);
}else{
$result['file'][] = $cur_path;
}
}

}
closedir($handle);
}
return $result;
}