php(常见知识点二)

116.cookie 伪造

你的第三方应用端的 cookie 被恶意的用户截取到,然后向服务器端发送,并且通过验证,他们
就会冒充用户进行登录,这就是 cookie 伪造
防 cookie 伪造:
现在更通用的做法是使用 session 来标识用户,也就是说我们为每个第三方应用端生成一个
唯一的 id,然后在服务端存储这个 id 所对应的状态。
这样 cookie 里面仅仅保存了这个 id,而没有任何其他的东西。而且这个 id 往往还有个特性,
它是随机生成,且每次登陆都会产生一个新的。这样就更降低了信息泄漏的风险。

117.PHP 的垃圾收集机制是怎样的

PHP作为脚本语言是页面结束即释放变量所占内存的。 当一个 PHP 线程结束时,当前占
用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。GC 进程一般都跟着每起
一个 SESSION 而开始运行的.gc 目的是为了在 session 文件过期以后自动销毁删除这些文件.
在 PHP 中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP 会将其在内存中销
毁;这是 PHP 的 GC 垃圾处理机制,防止内存溢出。 执行这些函数也可以起到回收作用
__destruct /unset/mysql_close /fclose php 对 session 有 明 确 的 gc 处 理 时 间 设 定
session.gc_maxlifetime 如果说有垃圾,那就是整体的程序在框架使用中,会多次调用同一文
件等等造成的非单件模式等。所以在出来的时候,必要的用_once 引用,在声明类的时候使
用单件模式。还有简化逻辑等等。

118.接口和抽象类的区别是什么?

抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类是通过关键字
abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含
一个抽象方法,抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstract function abstractMethod();
接口是通过 interface 关键字来声明的,接口中的成员常量和方法都是 public 的,方法可
以不写关键字 public,接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实
现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类
还是接口要看具体实现。
子类继承抽象类使用 extends,子类实现接口使用 implements。

119.Session 相关问题

session 共享:
1.各种 web 框架早已考虑到这个问题,比如 asp.net,是支持通过配置文件修改 session 的存
储介质为 sql server 的,所有机器的会话数据都从同一个数据库读,就不会存在不一致的问
题;
2.以 cookie 加密的方式保存在第三方应用端.优点是减轻服务器端的压力,缺点是受到 cookie
的大小限制,可能占用一定带宽,因为每次请求会在头部附带一定大小的 cookie 信息,另外
这种方式在用户禁止使用 cookie 的情况下无效.
3.服务器间同步。定时同步各个服务器的 session 信息,此方法可能有一定延时,用户体验
也不是很好。
php 支持把会话数据存储到某台 memcache 服务器,你也可以手工把 session 文件存放的目
录改为 nfs 网络文件系统,从而实现文件的跨机器共享。
session 运行原理:
(1)当一个 session 第一次被启用时,一个唯一的标识被存储于本地的 cookie 中。
(2)首先使用 session_start()函数,PHP 从 session 仓库中加载已经存储的 session 变量。
(3)当执行 PHP 脚本时,通过使用 session_register()函数注册 session 变量。
(4)当 PHP 脚本执行结束时,未被销毁的 session 变量会被自动保存在本地一定路径下的
session 库中,这个路径可以通过 php.ini 文件中的 session.save_path 指定,下次浏览网页时
可以加载使用。
为什么 session 依赖 cookie:
当用户请求 servlet,servlet 会首先查看第三方应用端 cookie 中是否有 sessionID,如果有则
证明是旧的会话,那么就通过 cookie 将 sessionID 发送到服务器,服务器就会根据 sessionID
到服务器的内存中查找 session 对象(因为每个 session 都会有一个 sessionID 来标识 session
对象),找到之后然后使用。
如果 cookie 中没有 sessionID 这证明是一个新的会话。服务器就会创建一个新的 Session 对象,
然后将 SessionID 存放早 cookie 中,通过 cookie 把 sessionID 发送到第三方应用端。第三方应
用端下一次访问的时候,就会将 SessionID 发送到服务器以便再次找到这个 session 对象,完
成会话跟踪所以如果用户将 cookie 关闭 session 也将会失效。session 是依赖与 cookie 的。
与 cookie 的区别与联系:cookie 在第三方应用端保存用户的信息,而 session 在服务器上保
存第三方应用的信息
session 依赖于 cookie。如果用户关闭 cookie,则 session 失效,原因是 sessionID 无法从第三
方应用端传递到服务端,也不能从服务端传递到第三方应用端.
session 怎么设置过期时间:
第一种方法即设置 php.ini 配置文件,设置 session.gc_maxlifetime 和 session.cookie_lifetime
节点属性值
第二种方法即设置 Session 时间戳

120.字符串反转

给定字符串 abcdef,写出反转函数,将字符串反转为 fedcba.
function myStrReve($str){
l e n = s t r l e n ( len = strlen( len=strlen(str);
r e s u l t = ′ ′ ; f o r ( result = ''; for( result=;for(i = $len - 1; $i >=0 ; $i-- ){
$result .= s t r [ str[ str[i];
}
return $result;
}

121.GD 库是做什么用的?

gd 库提供了一系列用来处理图片的 API,使用 GD 库可以处理图片,或者生成图片。
在网站上 GD 库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。

、什么是队列?排它锁,Myisam 死锁如何解决?
在默认情况下 MYisam 是表级锁,所以同时操作单张表的多个动作只能以队列的方式进行;
排它锁又名写锁,在 SQL 执行过程中为排除其它请求而写锁,在执行完毕后会自动释放;
死锁解决:先找到死锁的线程号,然后杀掉线程 ID

124、打开 php.ini 中的 safe_mode,会影响哪些函数?至 少说出 6 个。

1)用户输入输出函数(fopen()file()require(),只能用于调用这些函数有相同脚本的拥有者)
2)创建新文件(限制用户只在该用户拥有目录下创建文件)
3)用户调用 popen()systen()exec()等脚本,只有脚本处在 safe_mode_exec_dir 配置指令指定的
目录中才可能
4)加强 HTTP 认证,认证脚本拥有者的 UID 的划入认证领域范围内,此外启用安全模式下,
不会设置 PHP_AUTH
5)mysql 服务器所用的用户名必须与调用 mysql_connect()的文件的拥有者用户名相同 6)
受影响的函数变量以及配置命令达到 40 个

125.Smarty 的原理

smarty 是个模板引擎,最显著的地方就是有可以把模板缓存起来。一般模板来说,都是做
一个静态页面,然后在里面把一些动态的部分用一切分隔符切开,然后在 PHP 里打开这个
模板文件,把分隔符里面的值替换掉,然后输出来,你可以看下 PHPLib 里面的 template 部
分。
而 smarty 设定了缓存参数以后,第一运行时候会把模板打开,在 php 替换里面值的时候把
读取的 html 和 php 部分重新生成一个临时的 php 文件,这样就省去了每次打开都重新读取
html 了。如果修改了模板,只要重新刷下就行了。

126、写出五种以上你使用过的 PHP 的扩展的名称(提示:

常用的 PHP 扩展)
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO 等

127、怎么把文件保存到指定目录?怎么避免上传文件重名

问题?
可以通过上传的文件名获取到文件后缀,然后使用时间戳+随机数+文件后缀的方式为文件
重新命名,这样就避免了重名。可以自己设置上传文件的保存目录,与文件名拼凑形成一个
文件路径,使用 move_uploaded_file(),就可以完成将文件保存到指定目录。

128、在 Smarty 模板语法中如何获取 php 的全局环境变量

$smarty.get.变量#显示通过 get 方式传过来的指定变量的值
KaTeX parse error: Expected 'EOF', got '#' at position 15: smarty.post.变量#̲显示通过 post 方式传过来…smarty.cookies.变量#显示通过
cookie 中指定变量的值
KaTeX parse error: Expected 'EOF', got '#' at position 26: …ver.SERVER_NAME#̲显示 server 变量值,_SERVER 系列变量KaTeX parse error: Expected 'EOF', got '#' at position 16: smarty.env.PATH#̲显示 系统环境变量值,_ENV 系列变量$smarty.session.变量#显示 session 中指定变量的值
$smarty.request.变量#显示通过 post、get、cookie 中指定变量的值

PHP7 有哪些新特性?

PHP7 在 PHP5 的基础上又做了一次质的提升,当然改变很多,我这里以我的总结简单
说下,主要发生了下面这些更改:
移除了一些旧的特性
ZEND 引擎升级到 Zend Engine 3,也就是所谓的 PHP NG
增加抽象语法树,使编译更加科学
64 位的 INT 支持
统一的变量语法
原声的 TLS - 对扩展开发有意义
一致性 foreach 循环的改进
新增 <=>、**、?? 、\u{xxxx}操作符
增加了返回类型的声明
增加了标量类型的声明
核心错误可以通过异常捕获了
增加了上下文敏感的词法分析

3.Svn 与 Git 的区别

  1. Git 是分布式的,SVN 是集中式的,好处是跟其他同事不会有太多的冲突,自己写的代
    码放在自己电脑上,一段时间后再提交、合并,也可以不用联网在本地提交;
  2. Git 下载下来后,在本地不必联网就可以看到所有的 log,很方便学习,SVN 却需要联网;
  3. Git 鼓励分 Branch(分支),而 SVN,说实话,我用 Branch 的次数还挺少的,SVN
    自带的 Branch merge 我还真没用过,有 merge 时用的是 Beyond Compare 工具合并后
    再 Commit 的;
  4. SVN 在 Commit 前,我们都建议是先 Update 一下,跟本地的代码编译没问题,并确保
    开发的功能正常后再提交
    SVN 的主要功能
    SVN 属于集中化的版本控制系统,有个不太精确的比喻:SVN = 版本控制+ 备份服务器
    SVN 使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,
    功能包括取出、导入、更新、分支、改名、还原、合并等。
    功能有许多我就不一一列了,SVN 大都采用图形界面操作,直观,上手快。
    Git 的主要功能
    Git 是 一 个 分 布 式 版 本 控 制 系 统 , 操 作 命 令 包 括 : clone , pull ,
    push,branch ,merge ,rebas,Git 擅长的是程序代码的版本化管理。
    SVN 的优缺点
    SVN 对中文支持好,操作简单,使用没有难度,美工人员,产品人员,测试人员,实
    施人员都可轻松上手。使用界面统一,功能完善,操作方便。
    Git 的优缺点
    对程序源代码进行差异化的版本管理,代码库占极少的空间。易于代码的分支化管理。
    不支持中文,图形界面支持差,使用难度大。不易推广。
    SVN 和 Git 哪个更适用于项目管理?
    SVN 更适用于项目管理, Git 仅适用于代码管理。
    一个研发队伍的成员正常包括:需求分析、设计、美工、程序员、测试、实施、运维,
    每个成员在工作中都有产出物, 包括了文档、设计代码、程序代码,这些都需要按项目集
    中进行管理的。SVN 能清楚的按目录进行分类管理, 使项目组的管理处于有序高效的状态。

打开 php.ini 中的 safe_mode,会影响哪些函数?至少说出 6 个。

1)用户输入输出函数(fopen()file()require(),只能用于调用这些函数有相同脚本的拥有者)
2)创建新文件(限制用户只在该用户拥有目录下创建文件)
3)用户调用 popen()systen()exec()等脚本,只有脚本处在 safe_mode_exec_dir 配置指令
指定的目录中才可能
4)加强 HTTP 认证,认证脚本拥有者的 UID 的划入认证领域范围内,此外启用安全模式下,
不会设置 PHP_AUTH
5)mysql 服务器所用的用户名必须与调用 mysql_connect()的文件的拥有者用户名相同 6)
受影响的函数变量以及配置命令达到 40 个

了解 composer 吗?

Composer 不是一个包管理器。是的,它涉及 “packages” 和 “libraries”,
但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进
行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。
这种想法并不新鲜,Composer 受到了 node’s npm 和 ruby’s bundler 的强
烈启发。而当时 PHP 下并没有类似的工具。
Composer 将这样为你解决问题:
a) 你有一个项目依赖于若干个库。
b) 其中一些库依赖于其他库。
c) 你声明你所依赖的东西。
d) Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项
目中)。
因为 laravel 是使用 composer 管理的,所以一切以 laravel 为基础。

php 中获取图片大小、宽和高的函数是

什么?
s i z e = g e t i m a g e s i z e ( " i m g / f l a g . j p g " ) ; p r i n t r ( size = getimagesize("img/flag.jpg"); print_r( size=getimagesize("img/flag.jpg");printr(size);
显示结果:
Array ( [0] => 259 [1] => 32 [2] => 1 [3] => width=“259”
height=“32” [bits] => 5 [channels] => 3 [mime] => image/gi
f )

28、php 中 pear 是什么?

PHP 扩展与应用库

29、如何使用 php 和 mysql 上传视频?

两种办法:
1、以 char 或 varchar 类型保存图片的上传路径;
2、以 blob 格式把图片以二进制保存在数据库里。建议用第一种至于用不用 PDO,
全凭喜好,以 MySQL 完全可以办到。

五、Php 中的错误类型都有哪些?

  1. 注意(Notices)
    这些都是比较小而且不严重的错误,比如去访问一个未被定义的变量。通常,这类的错误是
    不提示给用户的,但有时这些错误会影响到运行的结果。
  2. 警告(Warnings)
    这就是稍微严重一些的错误了,比如想要包含 include()一个本身不存在的文件。这样的
    错误信息会提示给用户,但不会导致程序终止运行。
  3. 致命错误(Fatal errors)
    这些就是严重的错误,比如你想要初始化一个根本不存在的类的对象,或调用一个不存在的
    函数,这些错误会导致程序停止运行,PHP 也会把这些错误展现给用户。

30、Php 中如何定义常量?

(1)必须用函数 define()定义
(2)定义完后其值不能再改变了
(3)使用时直接用常量名,不能像变量一样在前面加$s

31、如何不使用 submit 按钮来提交表单?

你写一个按钮 button,写一个 js 方法(用 ajax 来提交表单),然后点击该
按钮的时候,执行这个 js 方法就行

32、谈谈你对 PHP 的基本认识

(1)PHP 的注意项目
1、PHP 是一种被广泛使用的开源脚本语言
2、PHP 脚本在服务器上执行(即是服务器端语言)
3、PHP 文件能够包含文本、HTML、CSS 以及 PHP 代码
4、PHP 代码在服务器上执行,而结果以纯文本返回浏览器
5、PHP 文件的后缀是 “.php”
(2)PHP 的作用
1、PHP 能够生成动态页面内容
2、PHP 能够创建、打开、读取、写入、删除以及关闭服务器上的文件
3、PHP 能够接收表单数据
4、PHP 能够发送并取回 cookies
5、PHP 能够添加、删除、修改数据库中的数据
6、PHP 能够限制用户访问网站中的某些页面
7、PHP 能够对数据进行加密

33、PHP 翻转字符串

如果字符串不只是英文和数字,不存在其他字符的话可以使用 strrev($str)函
数实现字符串翻转,如果有汉字的话就不行了

<?php 
function reverse($str) { 
$len = mb_strlen($str, 'utf-8');
?>

char 和 varchar 的区别?

char 的字符长度是固定的
varchar 的字符长度是可变的
因为 char 的固定的,所以执行时不需要计算它的长度,所以执行效率也比较高;

34. tcp 和 udp 的区别?

Tcp
http 协议是基于 tcp 协议
tcp 协议是传输控制协议
udp
udp 是用户数据报协议
UDP 信息包的标题很短,只有 8 个字节,相对于 TCP 的 20 个字节信息包的额 外开销很小。
UDP 是面向报文的
小结 TCP 与 UDP 的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP 较多,UDP 少);
3.UDP 程序结构较简单;
4.流模式与数据报模式 ;
5.TCP 保证数据正确性,UDP 可能丢包,TCP 保证数据顺序,UDP 不保证。

说下常见的 http 返回状态码?

所有 HTTP 状态代码及其定义。
代码 指示
2xx 成功
200 正常;请求已完成。
201 正常;紧接 POST 命令。
202 正常;已接受用于处理,但处理尚未完成。
203 正常;部分信息 — 返回的信息只是一部分。
204 正常;无响应 — 已接收请求,但不存在要回送的信息。
3xx 重定向
301 已移动 — 请求的数据具有新的位置且更改是永久的。
302 已找到 — 请求的数据临时具有不同 URI。
303 请参阅其它 — 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。
304 未修改 — 未按预期修改文档。
305 使用代理 — 必须通过位置字段中提供的代理来访问请求的资源。
306 未使用 — 不再使用;保留此代码以便将来使用。
4xx 客户机中出现的错误
400 错误请求 — 请求中有语法问题,或不能满足请求。
401 未授权 — 未授权客户机访问数据。
402 需要付款 — 表示计费系统已有效。
403 禁止 — 即使有授权也不需要访问。
404 找不到 — 服务器找不到给定的资源;文档不存在。
407 代理认证请求 — 客户机首先必须使用代理认证自身。
415 介质类型不受支持 — 服务器拒绝服务请求,因为不支持请求实体的格式。
5xx 服务器中出现的错误
500 内部错误 — 因为意外情况,服务器不能完成请求。
501 未执行 — 服务器不支持请求的工具。
502 错误网关 — 服务器接收到来自上游服务器的无效响应。
503 无法获得服务 — 由于临时过载或维护,服务器无法处理请求。

hash 索引主要是为了解决什么问题?

hash 索引仅满足“=”、“IN”和“<=>”查询,不能使用范围查询
hash 索引无法被用来进行数据的排序操作
对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,
而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash
索引也无法被利用
Hash 索引遇到大量 Hash 值相等的情况后性能并不一定就会比 B-Tree 索引高

说下你对于命名空间的理解?

目的:解决重名问题,PHP 中不允许两个函数或者类出现相同的名字,否则会产生一个致命的
错误。
命名空间将代码划分出不同的空间(区域),每个空间的常量、函数、类的名字互不影响

什么是 CGI?什么是 FastCGI?php-fpm,FastCGI,Nginx 之间是什么关系?

CGI,通用网关接口,用于WEB服务器和应用程序间的交互,定义输入输出规范,用户的请求通过WEB服务器转发给FastCGI进程,
FastCGI进程再调用应用程序进行处理,如php解析器,应用程序的处理结果如html返回给FastCGI,FastCGI返回给Nginx 进行输出。假设这里WEB服务器是Nginx,应用程序是 PHP,而 php-fpm 是管理 FastCGI 的,这也就是 php-fpm,

FastCGI,和 Nginx 之间的关系。
FastCGI 用来提高 cgi 程序性能,启动一个master,再启动多个 worker,不需要每次解析 php.ini. 而 php-fpm 实现了 FastCGI 协议,是 FastCGI 的进程管理器,支持平滑重启,可以启动的时候预先生成多个进程。

Nginx 和Apache 区别

1、nginx相对于apache的优点:
轻量级,同样起web 服务,比apache占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
社区活跃,各种高性能模块出品迅速啊

apache 相对于nginx 的优点:

rewrite ,比nginx 的rewrite 强大
动态页面
模块超多,基本想到的都可以找到
少bug ,nginx 的bug 相对较多

超稳定

2、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 .

nginx 适合做静态,简单,效率高
apache 适合做动态,稳定,功能强

PHP如何实现页面跳转

方法一:php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。 header(“Location:网址”);//直接跳转 header(“refresh:3;url=http://axgle.za.NET”);//三秒后跳转

isset() 和 empty() 区别

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

接口和抽象类的区别是什么?

抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。 抽象类是通过关键字 abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别 在于,抽象类中至少要包含一个抽象方法,
抽象方法没有方法体,该方法天生就是要被子类重写的。 抽象方法的格式为:abstract function abstractMethod();
接口是通过 interface 关键字来声明的,接口中的成员常量和方法都是 public 的,方法可以不写关键字 public, 接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。 子类继承抽象类使用 extends,子类实现接口使用 implements。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值