php 相关知识点


1. Get与post两种方式?
ans:
GET->一般用于查询,参数可见不安全,且传值支持的大小不能超过2kb,效率高。
post-> 一般用于修改保存数据,参数不可见比较安全。

2. AJAX的优势是什么?
ans:ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验。

3.path相关:

pathinfo:解析文件(文件名及扩展)

path_url:解析URL(文件名及路由及参数)

4.left join 与 right join

left join: 先找出左表所有匹配的数据,右边不匹配的为null

扫描二维码关注公众号,回复: 4560690 查看本文章

5.如何无限分类

id,parentid,path(相对路径)

6. 安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制?
ans:①防远程提交;②防SQL注入,对特殊代码进行过滤;③防止注册机灌水,使用验证码;

7. 如何防sql注入?

ans:
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果,成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。

主要两阶段防止:1.用户输入时候的数据校验 2.查询数据库时候的转义。3.尽量不要用mysql_error来抛出错误(错误信息进行封装)

(1)查询条件尽量使用数组方式,这是更为安全的方式;

(2)如果不得已必须使用字符串查询条件,使用预处理机制;

(3)开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了)(safe_mode = on 在php ini 中设置)

(4)使用自动验证和自动完成机制进行针对应用的自定义过滤;(magic_quotes_gpc = on) 对sql 查询进行转换

(5)使用字段类型检查、自动验证和自动完成机制等避免恶意数据的输入。

 (6)addslashes 防止sql注入

用户输入校验:
/*
过滤用户代码
*/
function security($str){
$str = trim($str); //清理空格
$str = strip_tags($str); //过滤html标签
$str = htmlspecialchars($str); //将字符内容转化为html实体
$str = addslashes($str);
return $str;
}


8. XSS 与 CSRF?
XSS:跨站脚本(cross—site script)发生在客户端,修复方式和防止sql注入类似
ans:注入脚本的一种,例如提交评论中参杂javascript脚本,如果服务器没有进行过滤或转移这些脚本


CSRF:跨站请求伪造(Cross_site_request_forgery) 发生在服务端(伪造成合法用户请求)(缓存中的session_id)
CSFR攻击就是类似复制用户的session_id来冒充合法用户

9.php正则函数

php正则匹配掉js代码';
$preg = "/<script[\s\S]*?<\/script>/i";
$newstr = preg_replace($preg,"",$str,3); //第四个参数中的3表示替换3次,默认是-1,替换全部
$newstr = preg_match($resg,$str,$newstr);
echo $newstr;

10. SESSION与COOKIE的区别?

ans:
①存储位置:session存储于服务器,cookie存储于浏览器
②安全性:session安全性比cookie高
③session为‘会话服务’,在使用时需要开启服务,cookie不需要开启,可以直接用

11. PHP处理数组的常用函数

ans:
①array()创建数组;

②count()返回数组中元素的数目;

③array_push()将一个或多个元素插入数组的末尾(入栈);

④array_column()返回输入数组中某个单一列的值;

⑤array_combine()通过合并两个数组来创建一个新数组;

⑥array_reverse()以相反的顺序返回数组;

⑦array_unique()删除数组中的重复值;

⑧in_array()检查数组中是否存在指定的值

12. PHP处理字符串的常用函数?
ans:
①trim()移除字符串两侧的空白字符和其他字符;

②substr_replace()把字符串的一部分替换为另一个字符串;

③substr_count()计算子串在字符串中出现的次数;④substr()返回字符串的一部分;

⑤strtolower()把字符串转换为小写字母;

⑥strtoupper()把字符串转换为大写字母;

⑦strtr()转换字符串中特定的字符;

⑧strrchr()查找字符串在另一个字符串中最后一次出现;

⑨strstr()查找字符串在另一字符串中的第一次出现(对大小写敏感);

strrev()反转字符串;

strlen()返回字符串的长度;

str_replace()替换字符串中的一些字符(对大小写敏感);

print()输出一个或多个字符串;

explode()把字符串打散为数组;

is_string()检测变量是否是字符串;

strip_tags()从一个字符串中去除HTML标签;

mb_substr()用来截中文与英文的函数

strpos 查找字符串所在位置

13. 常用的魔术方法有哪些?
__construct() 实例化类时自动调用。

__destruct() 类对象使用结束时自动调用。

__set() 在给未定义的属性赋值的时候调用。

__get() 调用未定义的属性时候调用。

__isset() 使用isset()或empty()函数时候会调用。

__unset() 使用unset()时候会调用。

__sleep() 使用serialize序列化时候调用。

__wakeup() 使用unserialize反序列化的时候调用。

__call() 调用一个不存在的方法的时候调用。

__callStatic()调用一个不存在的静态方法是调用。

__toString() 把对象转换成字符串的时候会调用。比如 echo。

__invoke() 当尝试把对象当方法调用时调用。

__set_state() 当使用var_export()函数时候调用。接受一个数组参数。

__clone() 当使用clone复制一个对象时候调用。

14. serialize与unserialize的认识?
ans:
serialize:将内存数据转化为字符串,写入硬盘 __sleep
unserialize:将字符串转为内存数据如php变量 __wakeup

15. include 与 require 的区别?
include:根据流程引入,且不存在流程也能正常进行。 有返回值

requeire:不管放在哪都是最先引入该文件,如果不存在则会报错。 无返回值

include_once :只引入一次,如果引入过则不在引入。

requeire_once :只引入一次,如果引入过则不在引入。

16. 什么是composer可以解决自动加载类?
ans:
Composer 是 PHP 的一个依赖管理工具,"快速安装类库"。工作原理就是将已开发好的扩展包从 packagist.org composer仓库下载到我们的应用程序中,并声明依赖关系和版本控制。
composer命令:

composer list 列出所有可用的命令
composer init 初始化composer.json文件(就不劳我们自己费力创建啦),会要求输入一些信息来描述我们当前的项目,还会要求输入依赖包
composer install 读取composer.json内容,解析依赖关系,安装依赖包到vendor目录下
composer update 更新最新的依赖关系到compsoer.lock文件,解析最新的依赖关系并且写入composer.lock文件
composer search packagename 搜索包,packagename替换为你想查找的包名称
composer require packagename 添加对packagename的依赖,packagename可修改为你想要的包名称
composer show packagename
composer self-update 更新 composer.phar文件自身
composer dump-autoload --optimize 优化一下自动加载

17. PHP7 和 PHP5 的区别,具体多了哪些新特性?
ans:
性能提升了两倍(
因为:变量存储字节减小,减少内存占用,提升变量操作速度

改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率

改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率)

结合比较运算符 (<=>)

标量类型声明

返回类型声明

try...catch 增加多条件判断,更多 Error 错误可以进行异常处理

匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义

18. PHP 的设计模式?
1. 单例模式(重点):
ans:实例化出来的对象是唯一的。
why: 当存在大量数据库操作时,可以避免大量new对象,减少数据库连接
implement: 私有化实例,私有化构造方法,私有化克隆方法,公有化静态获取实例的方法(getinstant)
2. 工厂模式(重点)
ans:建立一个工厂来根据所需创建对象(解决紧耦合:改一个类就要改很多其他调用的地方)。
工厂模式分为:简单工厂模式,工厂方法模式,抽象工厂模式
3. 观察者模式(重点)
4. 依赖注入(重点)

19. 依赖注入实现原理?
ans:实现低耦合高扩展。
依赖注入DI:应用程序依赖容器创建并注入到所需的外部资源
控制反转IOC:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源

依赖注入就是组件通过构造器,方法或者属性字段来获取相应的依赖对象。
为什么用依赖注入:解决高耦合。

注入的途径:construct注入,set注入

20. 请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。
if(isset($_POST['action']) && $_POST['action']==’submitted’){
$email=$_POST['email'];
if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/”,$email)){
echo“电子邮件检测失败”;
}else{
echo“电子邮件检测成功”;
}
}

猜你喜欢

转载自www.cnblogs.com/-cyh/p/10140683.html