php (常见知识点一)

本文探讨了HTML5的本地缓存技术,如localStorage和SessionStorage,并对比了cookie与session的区别。此外,还介绍了PHP的设计模式、数据类型、XSS攻击防范措施、以及HTTP协议的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTML5 的本地缓存?

如果想在用户访问的时候记录或者记住他的行为,除了 session 和 cookie,还有 HTML5 的
localStorage 本地存储和 SessionStorage 基于会话的本地存储;
两种本地存储的格式是一样的,但是 SessionStorage 基于会话,浏览器关闭,直接消失;而
localStorage 需要销毁;

禁用 cookie 后,session 还能用吗?

可以,在存储 session 的文件中,生成 sessionID,通过 get 传参的方式将 sessionID
传到要实现 session 共享的页面,读取 sessionID,从而从 session 中获取数据。

写一个函数统计每一个元素出现的次数

PHP 中的 array_count_values() 函数可以实现 array_count_values() 函数用
于统计数组中所有值出现的次数。 本函数返回一个数组,其元素的键名是原数组的值,
键值是该值在原数组中出现的次数。

php数据类型

标量数据类型:String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型)
复合数据类型:Array(数组), Object(对象)
特殊数据类型: NULL(空值)、Resource(资源)

具体可参考:http://c.biancheng.net/view/6113.html

Include 和 require 的区别

require 函数通常放在 PHP 程序的最前面,在 PHP 程序执行之前,就会先读取 require
指定引入的文件,使它变成 PHP 程序网页的一部分。

include 函数一般是放在流程控制的处理部分中。PHP 程序在读到 include 的文件时,
才将它读进来,这种方式可以把程序执行时的流程简单化。
他们两个的用途是一样的,不一定非要哪个放在最前面哪个放在中间,他们最根本的区
别在于错误处理的方式不一样。

require 一个文件存在错误的话,那么程序就会中断执行,并显示致命错误
而。
include 一个文件存在错误的话,那么程序不会中断,会继续执行,并显示一个警告
的错误 。

其它区别:include 有返回值,而 require 没有。

cookie 与 session 的区别

1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2、cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗
考虑到安全应当使用 session。
3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用 COOKIE。
4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个
cookie。
5、所以个人建议:
将登陆信息等重要信息存放为 SESSION
其他信息如果需要保留,可以放在 COOKIE 中
28、php 在储存 session 以什么形式存在
PHP 为 session 的存储提供了三种方式: 文件/ 内存/ 自定义存储,默认是使用文
件存储.在访问量大的网站上采用这种方式就不大合适,因为这样会导致大量的输入输
出的冗余.我们可以在 php.ini 更改配置文件或者 php 脚本中通过相应的函数来设置
session 文件的存储类型来改变 session 文件的存储形式

php 在储存 session 以什么形式存在

PHP 为 session 的存储提供了三种方式: 文件/ 内存/ 自定义存储,默认是使用文
件存储.在访问量大的网站上采用这种方式就不大合适,因为这样会导致大量的输入输
出的冗余.我们可以在 php.ini 更改配置文件或者 php 脚本中通过相应的函数来设置
session 文件的存储类型来改变 session 文件的存储形式

xss 攻击怎么防止

XSS 又称 CSS,全称 Cross SiteScript(跨站脚本攻击), XSS 攻击类似于 SQL 注入攻击
是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式,所以容易被忽略
其危害性。其原理是攻击者向有 XSS 漏洞的网站中输入(传入)恶意的 HTML 代码,当用
户浏览该网站时,这段 HTML 代码会自动执行,从而达到攻击的目的。如,盗取用户 Cookie
信息、破坏页面结

常见的恶意字符 XSS 输入:

  1. XSS 输 入 通 常 包 含 JavaScript 脚 本 , 如 弹 出 恶 意 警 告 框 :
  1. XSS 输入也可能是 HTML 代码段,譬如:

(1) 网页不停地刷新
(2) 嵌入其它网站的链接
构、重定向到其它网站等。

方法:利用 php **htmlentities()**函数

php 防止 XSS 跨站脚本攻击的方法:是针对非法的 HTML 代码包括单双引号等,使用
htmlspecialchars()函数。

在 使 用 htmlspecialchars() 函 数 的 时 候 注 意 第 二 个 参 数 , 直 接 用
htmlspecialchars($string)的话,第二个参数默认是 ENT_COMPAT,函数默认只是转化
双引号("),不对单引号(’)做转义。

所 以 , htmlspecialchars()函 数 更多的 时候要 加 上第 二个 参 数,应该 这样用 :
htmlspecialchars( s t r i n g , E N T Q U O T E S ) 。 当 然 , 如 果 需 要 不 转 化 如 何 的 引 号 , 用 h t m l s p e c i a l c h a r s ( string,ENT_QUOTES)。当然,如果需要不转化如何的引号,用 htmlspecialchars( string,ENTQUOTES)htmlspecialchars(string,ENT_NOQUOTES)。

另 外 , 尽 量 少 用 htmlentities(), 在 全 部 英 文 的 时 候 htmlentities() 和
htmlspecialchars()没有区别,都可以达到目的。但是,中文情况下, htmlentities()
却会转化所有的 html 代码,连同里面的它无法识别的中文字符也给转化了。
htmlentities()和 htmlspecialchars()这两个函数对单引号(’)之类的字符串支持不
好,都不能转化, 所以用 htmlentities()和 htmlspecialchars()转化的字符串只能防
止 XSS 攻击,不能防止 SQL 注入攻击。

所有有打印的语句如 echo,print 等,在打印前都要使用 htmlentities()进行过滤,这
样可以防止 XSS,注意中文要写出 htmlentities($name,ENT_NOQUOTES,GB2312)。

30、禁用 cookie 后,session 还能用吗?

可以,在存储 session 的文件中,生成 sessionID,通过 get 传参的方式将 sessionID
传到要实现 session 共享的页面,读取 sessionID,从而从 session 中获取数据。

设计模式

在 PHP 中,我主要使用了以下两种设计模式
1、单例模式
单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个
类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式的要点有三个:
一是某个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。
典型的代表如框架中的基类对象。
2、简单工厂模式
①抽象基类:类中定义抽象一些方法,用以在子类中实现
②继承自抽象基类的子类:实现基类中的抽象方法
③工厂类:用以实例化所有相对应的子类
这种我们使用最常见,基本所有的 MVC 框架中都是这样产生的。

、php 的设计模式

1、单例模式 2、工厂模式 3、观察者模式 4、命令链模式 5、策略模式
单例模式:
一个类在整个应用中,只有一个对象实例的设计模式
类必须自行创建这个实例
必须自行向整个系统提供这个实例
三私:私有静态成员变量、构造函数、克隆函数
一公:公共的静态方法
2、工厂模式
可以根据输入的参数或者应用程序配置的不同一创建一种专门用来实例化并返回其它
类的实例的类
3、观察者模式
观察者模式提供了组件之间紧密耦合的另一种方法。
该模式:一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)全
本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观
察者使用该信息执行的操作与可观察的对象无关。
4、命令链模式:
以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。
每个处理程序都会自行判断自己能否处理请求,如果可以,该请求被处理,进程停止。
5、策略模式:
此算法是从复杂类提取的,因而可以方便地替换。

nosql 和 Mysql 的区别

也即非关系型数据库和关系型数据库。
目前世界上主流的存储系统大部分还是采用了关系型数据库,其主要有一下优点:
1.事务处理—保持数据的一致性;
2.由于以标准化为前提,数据更新的开销很小(相同的字段基本上只有一处);
3.可以进行 Join 等复杂查询。
nosql 在优势方面,主要体现在下面这三点:

  1. 简单的扩展:典型例子是 Cassandra,由于其架构是类似于经典的 P2P,所以能通过
    轻松地添加新的节点来扩展这个集群;
  2. 快速的读写:主要例子有 Redis,由于其逻辑简单,而且纯内存操作,使得其性能非
    常出色,单节点每秒可以处理超过 10 万次读写操作;
  3. 低廉的成本:这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有
    昂贵的 License 成本;

但瑕不掩瑜,NoSQL 数据库还存在着很多的不足,常见主要有下面这几个:

  1. 不提供对 SQL 的支持:如果不支持 SQL 这样的工业标准,将会对用户产生一定的学
    习和应用迁移成本;
  2. 支持的特性不够丰富:现有产品所提供的功能都比较有限,大多数 NoSQL 数据库都
    不支持事务,也不像 SQL Server 和 Oracle 那样能提供各种附加功能,比如 BI 和报表
    等;
  3. 现有产品的不够成熟:大多数产品都还处于初创期,和关系型数据库几十年的完善
    不可同日而语;

echo(),print(),print_r()的区别

echo 可以一次输出多个值,多个值之间用逗号分隔。echo 是语言结构(language construct),
而并不是真正的函数,因此不能作为表达式的一部分使用。echo 是 php 的内部指令,不是
函数,无返回值。
print():函数 print()打印一个值(它的参数),如果字符串成功显示则返回 true,否则返回
false。只能打印出简单类型变量的值(如 int,string),有返回值
printf():源于 C 语言中的 printf()。该函数输出格式化的字符串。
print_r()和 var_dump()
print_r()可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,
并以 Array 开头。但 print_r()输出布尔值和 NULL 的结果没有意义,因为都是打印"\n"。因此
用 var_dump()函数更适合调试。print_r 是函数,可以打印出比较复杂的变量(如数组,对象),
有返回值
var_dump()判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并
回返数据类型。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数
组将递归展开值,通过缩进显示其结构。

说一下单引号双引号?

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

.get 和 post 的区别

  1. get 是从服务器上获取数据,post 是向服务器传送数据。
  2. get 是把参数数据队列加到提交表单的 ACTION 属性所指的 URL 中,值和表单内各个字段
    一一对应,在 URL 中可以看到。post 是通过 HTTP post 机制,将表单内各个字段与其内容放
    置在 HTML HEADER 内一起传送到 ACTION 属性所指的 URL 地址。用户看不到这个过程。
  3. get 传送的数据量较小,不能大于 2KB。post 传送的数据量较大,一般被默认为不受限制。
    4… get 安全性非常低,post 安全性较高。但是执行效率却比 Post 方法好。

106.如何修改 session 的生存时间

一:在 php.ini 中设置 session.gc_maxlifetime = 1440 //默认时间
二:代码实现
l i f e T i m e = 24 ∗ 3600 ; / / 保 存 一 天 s e s s i o n s e t c o o k i e p a r a m s ( lifeTime = 24 * 3600; // 保存一天 session_set_cookie_params( lifeTime=243600;//sessionsetcookieparams(lifeTime);
session_start();

108.对称加密 与 非对称加密

对称加密与解密使用的是同样的密钥,但由于需要将密钥在网络传输,所以安全性不高
非对称加密使用了一对密钥,公钥与私钥,把以安全性高,但加密与解密速度慢
解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使
用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通
(一)对称加密(Symmetric Cryptography)
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的
是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密加密方式
DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES
优缺点
对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后 使双方都能
保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每
次使用对称加密算法时,都需要使用其他人不知道的唯一秘 钥,这会使得收、发双方所拥
有的钥匙数量巨大,密钥管理成为双方的负担。
(二)非对称加密(asymmetric Cryptography)
允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系
统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。
非对称加密算法需要两个密钥来进行加密和解密
优缺点
非对称加密与对称加密相比,其安全性更好:对称加密的通信双方使用相同的秘钥,如果
一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,
一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前
要先同步秘钥。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

109.ob 系列函数

1、ob_start() //打开缓冲区,所有输出的信息不直接发送到浏览器,而是保存在缓冲区里面
2、ob_clean() //删除内部缓冲区的内容,不关闭缓冲区(不输出)
3、ob_end_clean() //删除内部缓冲区的内容,关闭缓冲区(不输出)
4、ob_get_clean() //返回内部缓冲区的内容,关闭缓冲区。【相当于执行 ob_get_contents()
and ob_end_clean()】 5、ob_flush() //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区。
6、ob_end_flush() //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,关闭缓冲区
7、ob_get_flush() //返回内部缓冲区的内容,并关闭缓冲区的内容
8、ob_get_contents()//返回缓冲区的内容,不输出
9、ob_get_length() //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回 false

魔术方法、魔术常量

1。__construct()
实例化对象时被调用,当__construct 和以类名为函数名的函数同时存在时,__construct 将
被调用,另一个不被调用。
2。__destruct()
当删除一个对象或对象操作终止时被调用。
3。__call()
对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call 函数。
4。__get()
读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get 函数。
5。__set()
设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用__set 函数。
6。__toString()
打印一个对象的时被调用。如 echo $obj;或 print KaTeX parse error: Expected group after '_' at position 9: obj; 7。_̲_clone() 克隆对象时…t=new Test();$t1=clone KaTeX parse error: Expected group after '_' at position 7: t; 8。_̲_sleep() seria…c->name)。
11。__unset()
unset 一个对象的属性时被调用。如:unset(KaTeX parse error: Expected group after '_' at position 14: c->name)。 12。_̲_set_state() 调…t=new Test();$t1=clone $t;
__toString()打印一个对象的时被调用。如 echo $obj;或 print KaTeX parse error: Expected group after '_' at position 8: obj; _̲_isset()检测一个对象的…c->name)。
__unset()unset 一个对象的属性时被调用。如:unset($c->name)。
__autoload()实例化一个对象时,如果对应的类不存在,则该方法被调用。

http 的三次握手?

答:三次握手(three times handshake; three-way handshake)所谓的“三次握手”即对
每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量
而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。
TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。
(1)第一次握手:建立连接时,第三方应用端 A 发送 SYN 包(SYN=j)到服务器 B,并
进入 SYN_SEND 状态,等待服务器 B 确认。
(2)第二次握手:服务器 B 收到 SYN 包,必须确认第三方应用 A 的 SYN(ACK=j+1),
同时自己也发送一个 SYN 包(SYN=k),即 SYN+ACK 包,此时服务器 B 进入 SYN_RECV 状态。
(3)第三次握手:第三方应用端 A 收到服务器 B 的 SYN+ACK 包,向服务器 B 发送确
认包 ACK(ACK=k+1),此包发送完毕,第三方应用端 A 和服务器 B 进入 ESTABLISHED 状态,
完成三次握手。
完成三次握手,第三方应用端与服务器开始传送数据

115、解释一下 OOP?面向对象

OOP 具有三大特点
1、封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与
外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类
如何使用,而不用去关心其具体的实现过程,这样就能实现 MVC 分工合作,也能有效避免
程序间相互依赖,实现代码模块间松藕合。
2、继承性:就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者
对部分属性和方法进行重写。继承增加了代码的可重用性。PHP 只支持单继承,也就是说一
个子类只能有一个父类。
3、多态性:子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多
个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以
获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。
1、易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只
是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具
有较高的质量。
3、效率高
在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决
问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、
更容易扩展,而且成本较低。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值