分别使用 Memcached、Redis、Mysql 实现分布式锁

我们有时会遇到这么一种情况:某个接口只能同时一个用户或者同一个用户不能同时访问。也就是防并发请求问题。这种场景在实现上可以通过锁的方式,就是在 php 接到请求后执行业务代码前加上锁,执行完成后释放锁。

简单理解 RPC

RPC(Remote Procedure Call Protocol)—— 远程过程调用协议。这个概念术语在上世纪 80 年代由 Bruce Jay Nelson 提出。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC 协议假定某些传输协议的存在,如 TCP 或 UDP,为通信程序之间携带信息数据。在 OSI 网络通信模型中,RPC 跨越了传输层和应用层。RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC 采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

在 php 中使用 strace、gdb、tcpdump 调试工具

在 php 中我们最常使用调试方式是输出打印方式,比如通过 echo、var_dump 输出信息到终端或者通过 fwrite、file_put_contents 将信息写入到文件中。这种普通方式能帮我们解决绝大部分调试问题。但仍然有些问题是需要借助其他工具来分析的,比如死循环,程序执行时间超预期,占用 cpu 过高,php 内核或者扩展错误等场景,这时如果借助 strace、gdb、tcpdump 这样的工具就能很好的去帮助我们定位问题。

PHP 根据 Orientation 纠正图片的旋转问题

客户端上传上来的图片,可能是旋转过90、180、-90、-180度的。旋转角度可以通过图片的 exif 信息中的 Orientation 字段拿到。可以借助 WideImage PHP 库很简单地进行纠正。

依赖 exif 扩展 & WideImage 库。

为什么 echo 快于 var_dump?

先简单介绍下这它们。

  • echo 不是一个函数(是一个语言结构),所以我们可以直接这样写echo $var,而不使用函数执行符“()”。
  • var_dump 是一个函数。

细说 Get 传参编码问题

Http Get 传参介绍

使用 http 通信时通过 Get 传参是最常见的方式之一。这种方式传参简单、方便,但同时也会遇到各种各样的数据传递后,接收方拿到的不是预期的值的问题。这也是作为不同服务间使用 Get 传参遇到的常见问题。要解决它就要详细的去了解 Get 传参协议、编解码、浏览器编码方式等。

给网站戴上安全帽

网站的安全性总是那么让人费神,一不小心就被攻击了,比如 SQL 注入,挂马,XSS 攻击,CSRF 攻击,请求劫持等等。本文将针对 lnmp 架构网站的安全性提高提供一些简单的有效措施来防范。

为什么 php 编译速度很快?

php 开发效率高一个原因是开发完的代码直接上线运行就好了,不用在本地先像 java 那样先编译好再发布。而其实内部 php 也是有一个编译过程的(PHP 是一种编译型脚本语言)。Zend 引擎在读取 php 源码后大致需要执行4个流程:

1、词法分析;
2、语法分析;
3、编译器编译成中间码 opcode;
4、解释器(Zend 虚拟机)顺序一条一条地执行 Opcode。

但其中它的编译过程的速度是非常快的,这是因为在编译过程中 php 不做任何语义优化,不像 java、c++ 那样的语言编译器做了大量的优化工作,而优化工作是非常耗时的。这也就是编译速度快于它们的原因。当然因为 php 编译过程没做任何语义优化,这就把这个“优化工作”交给了程序员,所以我们在写 php 代码时要比 java、c++ 等多留意下优化问题。




数据结构分类

数据结构(data structure),计算机中存储、组织数据的方式。数据结构大致可以分为以下几类:

  1. 集合结构(无相互关系,如:set)
  2. 线性结构(一对一关系,如:栈 数组 队列 链表)
  3. 树形结构(一对多关系,如:二叉树 红黑树 B树)
  4. 图形结构(多对多关系,如:有向图、无向图)

PHPer 要掌握的常用 linux 命令

php 的好搭档 lamp 或者 lnmp,其中的 linux 操作系统也就需要 phper 能熟练使用。这里将围绕使用场景来列举一些 linux 下需要去掌握的常用命令。