PHP面试题

1 echo,print(),print_r(),var_dump()的区别?

echo是PHP语句, print、print_r和var_dump是函数,语句没有返回值,函数可以有返回值;
echo 输出一个或者多个字符串;
print()只能打印出简单类型变量的值(如int,string);
print_r() 可以打印出复杂类型变量的值(如数组,对象);
var_dump能打印出对象、数组,并且带数据类型。


2 用 PHP 打印出前一天的时间,格式是 2005-5-10 22:21:21

echo date('Y-m-d H:i:s',time()-24*3600);

echo date('Y-m-d H:i:s',strtotime('-1 day'));


3 求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数

$date1 = strtotime('2013-09-09);
$date2 = strtotime('2011-12-11');
echo ($date1-$date2)/(24* 3600);


4 用 php 写出显示客户端 IP 与服务器 IP 的代码

客户端 IP:$_SERVER[“REMOTE_ADDR”] 或 getenv('REMOTE_ADDR');
服务器 IP:$_SERVER[“SERVER_ADDR”] 或 getenv(' SERVER_ADDR ');


5 echo count("abc");输出的结果是什么?

结果为1


6 js中网页前进和后退的代码

前进: history.forward(); 或 history.go(1);
后退: history.back(); 或 history.go(-1); 例子:

<a href="javascript:history.go(1)"> 前进</a>
<a href="javascript:history.forward()">前进</a>
<a href="javascript:history.go(-1)">后退</a>
<a href="javascript:history.back()">后退</a>


7 MVC是什么?

MVC由Model(模型), View(视图)和Controller(控制器)三部分组成,其中:
模型:主要用来处理业务数据;
视图:指与用户交互的HTML界面;
控制器:主要用来处理业务逻辑。


8 什么是⾯向对象?主要特征是什么?

⾯向对象是程序的⼀种设计⽅式,有利于提⾼程序的重⽤性,使程序结构更加清晰。
主要特征:封装、继承、多态。


9 常见的 HTTP 状态码有哪些?

200:请求成功;
301:永久重定向;
302:临时重定向;
400:客户端请求语法错误;
401:未授权;
403:禁止访问;
404:文件未找到;
405:请求的方法类型不支持;
500:服务器内部错误;
502:作为网关或代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应;
503:超载或系统维护;
504:网关超时。


10 请写出数据类型(int char varchar datetime text)的意思;varchar和char有什么区别?

int整数,char定长字符,varchar变长字符,datetime⽇期时间型,text⽂本型;
varchar与char的区别:
char是固定长度的字符类型,分配多少空间,就占⽤多长空间。
varchar是可变长度的字符类型,内容有多⼤就占⽤多⼤的空间,能有效节省空间。
varchar类型的执行效率⽐char类型低。 


11 MyISAM和InnoDB的基本区别?索引结构如何实现?

MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,适合用于频繁查询的应用;
InnoDB类型支持事务,行锁,有崩溃恢复能力,读写速度比MyISAM慢,适合于插入和更新操作比较多的应用,空间占用大,不支持全文索引等。
创建索引:alert table tablename add index 索引名 (`字段名`)


12 对于大流量的网站,您采用什么样的方法来解决访问量问题?

使用缓存来存储频繁需要访问的数据;
使用负载均衡;
对静态文件使用cdn进行存储和加速;
反向代理;
优化SQL语句;
数据表中创建索引。


13 isset() 和 empty() 区别

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


14 语句include和require的区别是什么?为避免多次包含同一文件,可用什么语句代替它们?

1) 区别:
require载入文件时,若有错误,则程序会中断执行,并显示致命错误;
include载入文件时,若有错误,程序不会中端,而是继续执行,并显示一个警告错误。
require在程序运行前载入;
include在程序运行时载入。
2) 替代:require_once、include_once


15 如何实现PHP的安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?

基本原则:不对外界展示服务器或程序设计细节(屏蔽错误),不相信任何用户提交的数据(过滤用户提交)。


16 如何把一个GB2312格式的字符串装换成UTF-8格式?

iconv('GB2312','UTF-8','js代码是IT资源下载与IT技能学习平台。');


17 对json数据格式的理解?

JSON是一种轻量级的数据交换格式,其格式固定,常用于不同语言之间的数据交换。


18 简述 private、 protected、 public修饰符的访问权限。

private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。


19 $this和self、parent这三个关键词分别代表什么?在哪些场合下使用?

$this 当前对象;self 当前类;parent 当前类的父类;
$this在当前类中使用,使用->调用属性和方法;
self也在当前类中使用,不过需要使用::调用;
parent在类中使用。


20 作用域操作符::如何使用?都在哪些场合下使用?

调用类常量
调用静态方法


21 常用魔术方法

__construct():类的构造函数;
__destruct():类的析构函数;
_call():在对象中调用一个不可访问方法时调用;
_get():获得一个类的成员变量时调用;
__set():设置一个类的成员变量时调用;
__isset():当对不可访问属性调用isset()或empty()时调用;
__unset():当对不可访问属性调用unset()时被调用;
__clone():当对象复制完成时调用;
__autoload():尝试加载未定义的类。


22 常用数组函数

array() 创建数组
array_key_exists() 检查指定键名是否存在于数组
array_keys() 返回数组中的所有键名
array_values() 返回数组中所有的值
array_merge() 把一个或多个数组合并为一个数组
array_pop() 删除数组的最后一个元素(出栈)
array_shift() 删除数组中的首个元素,并返回被删除元素的值
array_push() 将一个或多个元素插入数组末尾(入栈)
array_unshift() 在数组开头插入一个或多个元素
array_rand() 随机的返回一个或多个键
array_reverse() 以相反的顺序返回数组
array_search() 搜索数组中的值并返回键名
array_sum() 返回数组中值的和
array_unique() 删除数组中重复的值
count() 返回数组中元素的个数
end() 将数组指针指向最后一位
in_array() 查看数组中是否存在某值


23 常用字符串函数

explode() 把字符串分割成数组
implode() 把数组转换成字符串
md5() 字符串加密
str_replace() 替换字符串中某些字符
str_shuffle() 随机打乱字符串中的所有字符
strlen() 返回字符串的长度
strrev() 反转字符串
substr() 返回字符串的指定部分
strpos()查找字符串在另一字符串中第一次出现的位置(不区分大小写)
strripos() - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
strrpos() - 查找字符串在另一字符串中最后一次出现的位置(区分大小写)


24 超全局变量

$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION


25 单引号双引号的区别

单引号内部的变量不会执行,双引号会执行;
单引号解析速度比双引号快;
单引号只能解析部分特殊字符,双引号可以解析所有特殊字符。


26 PHP数组排序

sort() - 以升序对数组排序
rsort() - 以降序对数组排序
asort() - 根据值,以升序对关联数组进行排序
ksort() - 根据键,以升序对关联数组进行排序
arsort() - 根据值,以降序对关联数组进行排序
krsort() - 根据键,以降序对关联数组进行排序


27 http和HTTPS的区别

端口:http 80、https 443;
http无状态协议,https是有http + ssl构建的可进行加密传输的协议
http明文传输,https加密传输
http更快,三次握手三个包,https 需要12个包(3个tcp包+9个ssl握手包)


28 常用聚合函数

max(): 求最大值
min(): 求最小值
sum(): 求累加和
avg(): 求平均
count(): 统计行数数量
例子:select sum(shop_price) as price from ecs_goods;


29 在程序的开发中,如何提高程序的运行效率?

优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询;
数据表中创建索引;
对程序中经常用到的数据生成缓存。


30 post请求和get请求的区别

1)url可见性:get,参数url可见;post,url参数不可见;
2)数据传输上:get,通过拼接url进行传递参数;post,通过body体传输参数;
3)缓存性:get请求是可以缓存的;post请求不可以缓存;
4)后退页面的反应:get请求页面后退时,不产生影响;post请求页面后退时,会重新提交请求;
5)传输数据的大小:get一般传输数据大小不超过2k-4k;post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大;
6)安全性:原则上post肯定要比get安全。


31 优化MYSQL数据库的方法

1)数据表优化:在创建表时,可将表中字段的长度设得尽可能小。例如,对于邮政编码字段,使用CHAR(6)而不是CHAR(255)来存储;
2)优化查询语句:避免使用SELECT *,而应指定所需的列名,以减少数据传输量;
3)索引优化:对于经常作为查询条件的字段,应创建索引;
4)硬件优化:使用SSD固态硬盘,SSD固态硬盘的读写速度比传统硬盘快得多,可以显著提高MySQL的I/O性能;
5)定期清理数据:定期清理冗余数据和日志文件,以释放存储空间和提高查询性能;
6)使用分区表:对于非常大的数据表,可以使用分区表来提高查询性能和管理便利性。
7)使用缓存技术:使用Memcached或Redis等缓存技术来缓存查询结果,以减少对MySQL数据库的访问次数。


32 Cookie和Session的区别

Cookie可以存储在浏览器或者本地,Session只能存在服务器;
Session比Cookie更具有安全性;
cookie 为多个用户浏览器共享,session 为一个用户浏览器独享。


33 UDP和TCP有什么区别

1)连接方面区别:
TCP面向连接(如打电话要先拨号建立连接)
UDP是无连接的,即发送数据之前不需要建立连接
2)安全方面的区别:
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达
UDP尽最大努力交付,即不保证可靠交付
3)传输效率的区别:
TCP传输效率相对较低
UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信
4)连接对象数量的区别
TCP连接只能是点到点,一对一的
  UDP支持一对一,一对多,多对一和多对多的交互通信

34 PHP中的构造函数和析构函数是什么?

构造函数是在对象创建时自动调用的方法,用于初始化对象。析构函数是在对象销毁时自动调用的方法,用于释放资源。


35 如何在PHP中处理JSON数据?

使用json_encode()函数将PHP数组转换为JSON格式的字符串,使用json_decode()函数将JSON格式的字符串转换为PHP数组。


36 如何在PHP中定义常量?

使用define()函数来定义常量,如define("CONSTANT_NAME", "value");。


37 如何在PHP中处理异常?

使用try-catch块来捕获和处理异常。在try块中放置可能抛出异常的代码,在catch块中处理异常。


38 什么是XSS攻击?如何防范?

XSS(跨站脚本攻击)指攻击者通过向网页注入恶意脚本来窃取信息或破坏系统的行为。防范方法包括过滤输入等。


39 什么是CSRF攻击?如何防范?

CSRF(跨站请求伪造)攻击指攻击者伪装用户身份发送请求从而窃取信息或破坏系统的行为。防范方法包括合理规范API请求方式、对POST请求加token令牌验证等。


40 命名空间在PHP中的作用是什么?

命名空间用于避免类名、函数名和常量名在不同库或框架之间的冲突。


41 PHP中的魔术方法是什么?

PHP中的魔术方法是一组具有特殊名称的方法,用于实现特定的功能,如对象的构造函数(__construct)、析构函数(__destruct)、访问控制(__get、__set、__isset、__unset)等。


42 什么是SQL注入?如何防止SQL注入攻击?

SQL注入指攻击者通过向SQL注入恶意代码来操纵数据库的行为。防止SQL注入的方法包括使用预处理语句、参数化查询、对输入进行过滤和验证等。


相关推荐

  • 获取指定目录下的所有图片信息

    1 获取指定目录下的所有图片信息// 获取指定目录下的所有图片信息 public function getImagesInfo($directory) { $images = []; // 创建递归目录迭代器 $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($directory, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY ); // 遍历目录中的每个文件 foreach (

  • Thinkphp各版本的PHP要求

    ThinkPHP 8.0:运行环境要求PHP8.0+,兼容PHP8.3ThinkPHP 6.1:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 6.0:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 5.1:运行环境要求PHP5.6+,兼容PHP8.0ThinkPHP 5.0:运行环境要求PHP5.4+,兼容PHP7.3

  • Thinkphp5.1路径常量

    1 配置文件位置根目录/config/template.php2 配置文件内容&lt;?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reser

  • Thinkphp5.0路径常量

    1 配置文件位置根目录/application/模块名/config.php2 配置文件内容&lt;?php//配置文件return [ // 后台视图输出字符串内容替换 'view_replace_str' =&gt; [ '__PUBLIC__' =&gt; '/', '__STATIC__' =&gt; '/static', '__CONSOLE__' =&gt; '/static/console', '__CONSOLE_CSS__' =&gt; '/static/console/css', '__CONSOLE_IMAGES__' =&gt; '/static/console/ima

  • wp站点防止别人进行DDOS攻击

    1 简介wp站点防止别人进行DDOS攻击。2 配置位置位置:根目录/wp-config.php3 配置内容在【根目录/wp-config.php】文件的开头添加如下代码:if(strpos($_SERVER['REQUEST_URI'], 'xmlrpc.php') !== false){ $protocol = $_SERVER['SERVER_PROTOCOL'] ?? ''; if(!in_array($protocol, ['HTTP/1.1', 'HTTP/2', 'HTTP/2.0', 'HTTP/3'], true)){ $protocol = 'HTTP/1.0'; } hea

  • 只读属性

    1 只读属性简介只读属性的声明方式类似于普通属性,但需要使用 readonly 关键字。2 只读属性例子class Point { public readonly float $x; public readonly float $y; public function __construct(float $x, float $y) { $this-&gt;x = $x; $this-&gt;y = $y; }}$point = new Point(3.5, 2.8);echo $point-&gt;x; // 输出: 3.5echo $point-&gt;y; // 输出: 2.8// 下面的尝