发布时间2019-07-26 16:49:42
74
0
0
  1. 建表user表 字段id (int),name (varchar) score表 字段uid (int),subject (varchar) ,score (int) score表的uid字段与user表的id字段关联。

    > create table user (
    id int(11) primary key auto_increment,
    name varchar(255) default '' not null
    )engine=innodb default charset=utf8;
    > create table score (
    id int(11) primary key auto_increment,
    uid int(11) not null unsigned,
    subject varchar(45) not null,
    score int(3) not null default 0,
    foreign key(uid) references user(id) on delete cascade on update cascade
    )engine=innodb default charset=utf8;
    //*外键不提倡加连带删除*
    • 在user表里新插入一条记录,在score表里插入与新加入的记录关联的两条记录
    • 获取score表里uid为2的用户score最高的5条记录
    • 使用联合查询获取name为“张三”的用户的总分数
    • 删除name为“李四”的用户,包括分数记录
    • 清空score表
    • 删除user
      > insert into user set name = '张三';
      > insert into score `uid,subject,score` value (1,'english',100);//INSERT INTO `score` VALUES (1, 1, '123', 100);//没有 set,或者可以使用 values;
      > select * from score where uid = 2 order by score limit 5;
      > select sum(score.score) from score left join user on score.uid = user.id where user.name = '张三';??添加一个疑问,左关联,这样查询是否 会多次查询 user 表,取相同的数据,如何解决。
      > delete from user where name = '张三';
      > drop table user;
      > update user set name = 'lisi' where id = 1;
  2. myisam 和 innodb 区别 MySQL 默认 MyISAM,不支持事务,不支持外键,表锁,执行大量的select ,可以使用 MyISAM。 innodb:支持事务,支持外键,行锁,有大量的insert 或者 update ,使用 innodb。

  3. 获取文件扩展名

    substr(strchr($file,'.'),1);
    //substr(string,start,length):返回字符串的一部分;strrchr(string,char):从右起查找字符串出现的位置
    substr($file,strrpos($file,'.')+1);
    //strrpos(string,find,start):最后一次出现的位置,stripos:第一次出现(区分大小写);strpos(不区分大小写)
    pathinfo($file,PATHINFO_EXTENSION);
    //pathinfo(path,options):以数组的形式返回文件路径信息;PATHINFO_DIRNAME(文件路径);PATHINFO_BASENAME(文件全名);PATHINFO_EXTENSION(后缀);PATHINFO_FILENAME(文件名,PHP>5.2)
  4. 第三方登录流程

    • 用户导向第三方认证服务器
    • 用户在第三方确认是否给权限
    • 授权后,认证服务器会跳转到 我们指定的 callback ,同时附上一个授权码。
    • 客户端app将授权码发送到服务器,服务器通过授权码以及 app_secret 向第三方服务器申请 access_token
    • 服务器通过 sccess_token,向第三方申请用户数据,存储绑定,完成登录。
  5. 接口安全

  6. strtr 和 str_replace:

    strtr('hello,world','world','zhangsan');//将字符串中的字符替换为其他,可以为数组;
    str_replace('world','zhangsan','hello,world');以其他字符替换字符串中的一部分(气氛大小写)
  7. 魔术方法:

    __construct()
    __call():调用不存在或者不可访问的方法时会调用。
    __clone():当对象被拷贝的时候直接调用
    __isset():对不存在或者不可访问的属性使用 isset() 或者 empty() 的时候会调用
    __sleep(): 执行 serialize() 函数会调用
    __destruct():析构函数
  8. 单引号双引号:双引号内字符会被解析或转义,单引号不会被解析。 双引号内的单引号内的变量也会被解析,原因单引号不起作用了。

  9. 数组排序:

  10. include 和 require 的区别:

    • include 和 require 都是引入指定的文件。加上_once 表示只引入一次
    • include 在引入不存在的文件时产生一个警告且脚本还会继续执行,require 会抛出一个 error 并且停止运行
    • include 有返回值,require 没有
  11. isset(),is_null() empty():

    • is_null():判断是否为 null,未定义会报警告。不允许作为参数判断,会报 Notice 警告
    • isset(): 判断变量是否定义,只有在 null 和 未定义 时返回false;
    • empty(): 判断是否为空:各种空null,都会返回 false;
    • empty,isset 首先会检查变量是否存在吗,然后对变量进行检测,而 is_null 仅仅直接检查是否为 null ,因此如果变量没定义就会出现错误。
  12. 数组函数:

    array_multisort:对多个数组或者多维数组进行排序
    array_product:计算数组中所有值的乘积
    array_push:
    arsort():数组翻转并且保持索引关心
    sort():数组排序
    sort():数组逆向排序
    ~~
    array_values();//获取数组的值
    array_keys();获取数组键名
    array_flip();键名键值互换,有重复的会被后面的覆盖
    in_array();查找是否在数组内
    array_search();在数组内查找
    array_map()
    array_merge();
  13. 字符串函数

    ord();ASCII 码转整数
    chr():整数转为 ASCII 码;
    echo:输出一个或多个字符串
    print:输出字符串
    str_getcsv:解析csv 字符串为一个数组
    str_replace:字符串替换
    strchr;strstr:查找字符串首次出现的位置。
    stripos:字符串首次出现的位置,不区分大小写
    substr:返回指定长度之间的值
    str_split(string ,length):字符串转数组。
  14. 时间函数

  15. 电子邮箱正则:

    function check_email(){
    $preg = "//";
    }
  16. laravel 依赖注入 实质时通过构造函数或者某些情况下 通过 setter 方法将依赖注入到类中,通俗的将就是 一个类药多次引入某个model的时候,可以在构造函数中一次引入,类中的方法直接调用即可

  17. laravel 生命周期 Laravel 应用的所有请求入口都是 public/index.php 文件。index.php 文件载入 Composer 生成的自动加载设置,然后从 bootstrap/app.php 脚本获取 Laravel 应用实例,Laravel 的第一个动作就是创建服务容器实例。 请求被发送到 HTTP 内核或 Console 内核(分别用于处理 Web 请求和 Artisan 命令),这取决于进入应用的请求类型。 内核启动过程中最重要的动作之一就是为应用载入服务提供者,应用的所有服务提供者都被配置在 config/app.php 配置文件的 providers 数组中。首先,所有提供者的 register 方法被调用,然后,所有提供者被注册之后,boot 方法被调用。 一旦应用被启动并且所有的服务提供者被注册,Request 将会被交给路由器进行分发,路由器将会分发请求到路由或控制器,同时运行所有路由指定的中间件。 服务提供者是启动 Laravel 应用中最关键的部分,应用实例被创建后,服务提供者被注册,请求被交给启动后的应用进行处理,整个过程就是这么简单!

  18. 客户端输入 URL 。 客户端检测缓存(有缓存且较新,客户端直接读取本地缓存进行资源展示,有缓存但是不新,准备 http 请求包,发送至服务端进行缓存校验)。 提取请求首部 HOST通过 DNS 域名解析获取服务 IP(DNS 缓存递归等)。 通过 IP 与默认端口创建 TCP 连接,进行 http 请求报文数据发送,其中重点就三次握手进行描述(客户端向服务端发送 syn,服务端向客户端发送 syn、ack,客户端向服务端发送 syn,ack,data)。 服务端程序接受请求,定向到请求路径处理程序,准备http响应。 通过建立的 tcp 连接来返回相关的 http 响应报文及 http 状态信息,然后根据实际情况看是否关闭连接( Connection的keep-alive )。 TCP 连接关闭经历 4 次握手。 客户端拿到 http 响应的报文信息,经过一系列前端处理过程最终将请求的资源进行展示。

  19. cookie 数据存放在客户的浏览器上,session数据放在服务器上. cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗,考虑到安全应当使用 session。 session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用 COOKIE。 单个 cookie 保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个 cookie。(Session 对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)

  20. XSS:跨站脚本一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上。通常包含了 HTML 以及用户端脚本语言。防御:页面上直接输出的所有不确定(用户输入)内容都进行 html 转义;对用户输入内容格式做校验;script 脚本中不要使用不确定的内容; CSRF:跨站请求伪造是一种挟制用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法;防御:验证 HTTP Referer 字段;在请求地址中(或 HTTP 头中)添加 token 并验证; SSRF:模拟服务器对其他服务器资源进行请求,没有做合法性验证。构造恶意内网IP做探测,或者使用其余所支持的协议对其余服务进行攻击。防御:禁止跳转,限制协议,内外网限制,URL 限制。绕过:使用不同协议,针对IP,IP 格式的绕过,针对 URL,恶意 URL 增添其他字符,@之类的。301跳转 + dns rebindding。 SQL注入:是通过把 SQL 命令插入到Web表单提交或输入域名或页面请求的查询字符串,欺骗服务器执行恶意的 SQL 命令。防御:过滤特殊符号特殊符号过滤或转义处理(addslashes函数);绑定变量,使用预编译语句;

  21. linux 压缩解压缩

    压缩:tar -czvf php.tar.gz ./php
    解压缩:tar -xzvf php.tar.gz