随笔分类 - 【130】PHP
摘要:性能提升: 1、JIT即时编译器。PHP8的JIT目前是在Opcache之中提供的,会做opcode层面的优化,比如俩条opcode合并为一条;在Opcache优化之后的基础上,结合Runtime的信息再次优化,直接生成机器码;JIT不是原来Opcache优化的替代,是增强;目前PHP8只支持x86
阅读全文
摘要:存储变量的结构体变小,尽量使结构体里成员共用内存空间,减少引用,这样内存占用降低,变量的操作速度得到提升 字符串结构体的改变,字符串信息和数据本身原来是分成两个独立内存块存放,php7尽量将它们存入同一块内存,提升了cpu缓存命中率 数组结构的改变,数组元素和hash映射表在php5中会存入多个内存
阅读全文
摘要:引用计数机制 每个php变量存在”zval”变量容器中,它除了包含变量的类型和值,还包含is_ref和refcount。 is_ref标识变量是引用变量还是普通变量,refcount表示指向这个zval变量容器的变量个数。 当引用计数refcount为0时,php就知道你不再使用这个对象,会释放其所
阅读全文
摘要:PHP7的变化可以概括为性能提升、更规范严格的底层逻辑、简化语法三个方面 PHP 7除了在性能方面有极大提升外,还添加了很多新的特性,如太空船操作符、标量类型声明、返回值的类型声明、全局的throwable接口、抽象语法树等,下边分别介绍。 (1)标量类型声明和返回值的类型声明 PHP 7可以对下面
阅读全文
摘要:使用入门 声明:原书中本章叫做 IoC 容器,在 Laravel 5 中,IoC 容器改名为服务容器,所以,在后续章节,IoC 容器和服务容器指代同一个东西。 我们已经了解了依赖注入及其使用,接下来咱们一起来探索控制反转容器(IoC)。我们前面已经说过,通过 IoC 容器可以帮助我们更方便地管理类依
阅读全文
摘要:问题引出 整个 Laravel 框架的基石是一个功能强大的 IoC 容器(控制反转容器),如果你想真正从底层理解 Laravel 框架,就必须好好掌握它。不过,也不要被这个名头吓住,要知道 IoC 容器只不过是一种用于方便我们实现「依赖注入」这种软件设计模式的工具。而且要实现依赖注入并不一定非要通过
阅读全文
摘要:PHP 代码早期使用 FTP 部署到生产环境,不过这种方式显然不适合集群部署,也不安全,本教程主要讨论如何使用现代化工具自动部署,这种方式简单、可预知结果,而且可逆。 版本控制 把代码纳入版本控制是现代开发人员的基本素养,我们可以使用 Git,也可以使用 SVN,对于应用开发者来说,版本控制有助于记
阅读全文
摘要:上一篇我们讨论了如何配置运行 PHP 应用的服务器,接下来我们要讨论的是如何调优服务器,让 PHP 应用的性能维持在更高水平。 默认安装的 PHP 就像是在百货商店里购买的普通套装,虽然合身,却不完美。调优的 PHP 就像是定做的套装,完全匹配你的尺寸。不过,需要注意的是,调优 PHP 只是提升 P
阅读全文
摘要:PHP-FPM **PHP-FPM(PHP FastCGI Process Manager),是用于管理 PHP 进程池的软件,用于接收和处理来自 Web 服务器(如Nginx)的请求。**PHP-FPM会创建一个主进程(通常以操作系统中根用户的身份运行),控制何时以及如何把 HTTP 请求转发给一
阅读全文
摘要:主机 PHP 应用开发好了之后,还需要部署到远程主机上,才能让用户访问我们提供的服务。一般来说,目前市场上提供的主机有四种:共享服务器、虚拟私有服务器(VPS)、专用服务器和 PaaS。每种主机适用场景不同,相应的价格差距也很大。 共享服务器 这种最便宜,一般来说这种适用于非开发者部署网站,比如非程
阅读全文
摘要:错误和异常是很强大的工具,能帮助我们预期意料之外的事,使用优雅的方式捕获问题。不过,错误和异常很相似,容易让人混淆,二者都表示出问题了,都会提供错误信息,而且都有错误类型。然而,错误出现的时间比异常早,错误会导致程序脚本停止执行,如果可能,错误会委托给全局错误处理程序处理,有些错误是无法恢复的。对于
阅读全文
摘要:Clean Code PHP 目录 介绍 变量 使用见字知意的变量名 同一个实体要用相同的变量名 使用便于搜索的名称 (part 1) 使用便于搜索的名称 (part 2) 使用自解释型变量 避免深层嵌套,尽早返回 (part 1) 避免深层嵌套,尽早返回 (part 2) 少用无意义的变量名 不要
阅读全文
摘要:在现代 PHP 特性中,流或许是最出色但使用率最低的。虽然 PHP 4.3 就引入了流,但是很多开发者并不知道流的存在,因为人们很少提及流,而且流的文档也很匮乏。PHP 官方文档对流的解释如下: 流的作用是提供统一的公共函数来处理文件、网络和数据压缩等操作。简单而言,流是具有流式行为的资源对象,也就
阅读全文
摘要:mbstring 扩展 我们所说的多字节字符指的是不在传统的 128 个 ASCII 字符集中的字符,比如中文字符。而 PHP 中处理字符串的函数默认假设所有字符都是 8 位字符,占用一个字节,如果使用这些 PHP 原生的字符串处理函数处理包含多字节字符的 Unicode 字符串,会得到意料之外的错
阅读全文
摘要:PHP 支持多种数据库,如 MySQL、PostgreSQL、SQLite 和 Oracle 等,并且这些数据库都提供了用于 PHP 和相应数据库之间通信的扩展,如 等。这样造成的一个问题是如果项目中使用了多种数据库,需要安装并使用多种 PHP 数据库扩展和接口,增加了学习和维护的成本。为此,从 P
阅读全文
摘要:处理日期和时间需要考虑很多事情,例如日期的格式、时区、闰年和天数各异的月份,自己处理太容易出错了,我们应该使用PHP 5.2.0引入的DateTime、DateIntervel和DateTimeZone这些类帮助我们创建及处理日期、时间和时区。 设置默认时区 首先我们要为PHP中处理日期和时间的函数
阅读全文
摘要:随着在线攻击的增多,密码安全越来越重要。作为开发者我们要担负起安全管理、计算哈希和存储用户密码的责任,不管应用是简单的游戏还是绝密商业文件的仓库,都要做到这一点。PHP内置了一些工具,让保护密码变得更加容易,本节我们就来讨论如何根据现代的安全措施来使用这些工具。 密码保护三原则 绝对不能知道用户的密
阅读全文
摘要:PHP 转义实现 把输出渲染成网页或API响应时,一定要转义输出,这也是一种防护措施,能避免渲染恶意代码,造成XSS攻击,还能防止应用的用户无意中执行恶意代码。 我们可以使用前面提到的 函数转移输出,该函数的第二个参数一定要使用 ,让这个函数转义单引号和双引号,而且,还要在第三个参数中指定合适的字符
阅读全文
摘要:PHP原生实现 验证输入数据也很重要,与过滤不同,验证不会从输入数据中删除信息,而只是确认用户输入是否符合预期。如果输入的是电子邮件地址,则确保用户输入的是电子邮件地址;如果需要的是电话号码,则确保用户输入的是电话号码,这就是验证要做的事儿。 验证是为了保证在应用的存储层保存符合特定格式的正确数据,
阅读全文
摘要:我们在开发应用时,一般有个约定:不要信任任何来自不受自己控制的数据源中的数据。例如以下这些外部源: $_GET $_POST $_REQUEST $_COOKIE $argv php://stdin php://input file_get_contents() 远程数据库 远程API 来自客户端的
阅读全文