CodeIgnitor 缓存驱动类的使用

最近在给 redis 驱动类添加新的方法时又陷入了疑惑中,理不清这里面的类关系,所以这次彻底梳理一下。

CodeIgnitor 中使用缓存是通过 Libaray 下的 CI_Cache 代理调用 drivers 下的缓存驱动实现类(Cache_redis)方式进行的。

Read more   2020/11/03 posted in  编程

php 序列化和反序列化

样例

序列化前

Array
(
    [tool] => php unserialize
    [author] => feiffy
)
Read more   2020/09/29 posted in  编程

PHP7.4 新特性

Read more   2020/09/02 posted in  编程

几千万数据,更改 MySQL 表结构

数据量大、并发量高场景,如何在流量低峰期,平滑实施表结构变更?

  • 如果是减column,升级程序不使用即可
  • 如果是修改column,程序兼容性容易出问题
Read more   2020/05/11 posted in  编程

《精通Linux》 - 笔记1

2020五一假期计划把这本书刷完,然后留下笔记,书籍扔掉。

Ch01 概述

  • 层次:硬件系统 / Linux内核 / 用户进程
  • 用户空间 / 内核空间
  • 主内存:硬件系统中最重要的部分,内核的几乎所有操作都和主内存有关
  • 内核:(1)管理进程(2)管理内存(3)操纵硬件设备(4)系统调用
  • 一个进程让出CPU使用权给另一个进程称为上下文切换(context switch)。内核是在上下文切换时的时间段间隙中运行的(单核CPU)。
  • fork(),exec()
Read more   2020/05/04 posted in  编程

php bool 与 boolean 的区别

2020/04/28 posted in  编程

APP集成ApplePay调研

目前国内 接入 Apple Pay 有两种模式:API模式和银联SDK模式。

Apple Pay API 模式

下图为目前国内 Apple Pay 支付接入的一个通用的流程(银联API模式),仅供参考:

Read more   2020/04/23 posted in  编程

Laravel 使用中间件过滤参数

问题

使用 Laravel Validator 验证参数以后,对于某些参数需要手动转换为对应的类型(比如 int,float),那么能不能在验证之前先自动过滤一下参数类型呢?

解决

使用中间件可以实现在 Controller 处理逻辑之前先过滤一下参数。

创建一个中间件类

$ php artisan make:middleware FilterParams
Read more   2020/04/04 posted in  编程

国家哀悼日 - 网站全局变灰

国务院公告:4月4日举行全国性哀悼活动,哀悼抗疫牺牲烈士和逝世同胞。因此,在自己网站上加上下面一段CSS代码,就能把网站全局变灰了。

Read more   2020/04/03 posted in  编程

RabbitMQ实现延时任务

场景:下单之后的15分钟内如果没有下单,则自动取消订单。

第一个想到的方法是开启一个定时任务,每隔1分钟就去扫描订单状态,如果有符合条件的,则取消之。这种方式缺点很明显,很浪费资源,因为大部分查询的结果都是无效的。

下面进入正题:使用 RabbitMQ 的死信队列(Dead Letter Exchange)来实现延时任务。

什么是死信?

首先,什么是死信?一个消息在一个队列中处于下列三种状态:(1)消息被拒绝并且不再重新投递.(2)消息超期。(3)队列超载。就变成了死信。如果队列中出现了死信,就会被重新投递到另一个交换机,那么该队列就是死信队列。该交换机根据绑定规则转发到对应的队列上,监听该队列就可以重新消费。简单地说,就是(因为某些原因)没有被消费的消息换个地方重新被消费。

Read more   2020/03/06 posted in  编程

组合与组合模式

继承的问题

继承是一种强大的设计方式,但是它也会限制灵活性,特别是类承担多职责时。

下面是一个继承的简单示例。

抽象类 Food 表示食物,它定义了抽象方法 make() 方法。两个实现类 SweetFoodSaltyFood 分别代表了食物的两种口味。

Read more   2019/09/24 posted in  编程

CodeIgnitor 3.0.x 之 Load 加载机制

CI 框架中的 library 和很多内置的类都是通过 CI_Loader 这个类加载的,也就是 Controller 中常常出现的 $this->load 属性。那么它本身是如何被加载的。

CI_Loader 初始化

这一切又要从最初的入口点 index.php 说起了。首先,外界的请求定位到了 index.php,所有的请求的处理都是从这里开始的。大略看一下 index.php 的内容,其实也很简单,就是利用当前文件的位置,定义了一些环境和路径常量,比如 ENVIRONMENT, BASEPATH, APPPATH, VIEWPATH,基于这些常量,又定义了一些全局变量:$system_path, $application_folder, $view_folder,最后加载了CI框架的核心类:core/CodeIgnitor.php,完成了它的使命。

Read more   2019/08/20 posted in  编程

CodeIgnitor 配置类的使用

CI 的配置文件统一放在 application/config/ 目录下面,框架有一个默认的主配置文件 application/config/config.php。其部分内容如下:

<?php
$config['uri_protocol'] = 'REQUEST_URI';

// ...

$config['charset'] = 'UTF-8';

// ...

$config['subclass_prefix'] = 'My_';
Read more   2019/06/04 posted in  编程

变量存储区:堆和栈

最近在看PHP源码解析,涉及到堆栈存储区的知识,而我对于这个却不太清楚,因此,看了一下相关资料,总结一下。

栈,存储函数中的局部变量(临时变量),存储函数地址,栈是后进先出的结构,由CPU管理和优化。

使用栈存储变量的优势在于:你不用再管理内存了,不必手动分配内存或释放它,此外,由于CPU相关的优化,读取写入的效率也很高。

关于栈需要注意的一点是:存储在栈上的变量的大小是有限制的,而堆却不是。

Read more   2019/05/19 posted in  编程

《Modern PHP》 - 笔记1 - 最佳实践

Read more   2019/04/03 posted in  编程