禁用 Composer script 处理的超时时间
对于我项目中的重复过程,我通常使用 Composer 的 script 功能来简化我自己和我的团队运行脚本和执行二进制文件的过程。我经常遇到的一件事是长时间运行的进程,如观察者脚本或后台进程,超过了 Composer 默认的300秒脚本超时。我最常看到的一个例子是大型测试套件,它可能需要5分钟以上的时间来运行,通常是端到端测试。{ "scripts"...
创建自己的 PHP 服务容器 - 最小容器
本文将介绍 PHP 中是如何创建自己服务容器,用于依赖注入。我将从最简单的 PSR-11 容器,并逐步添加各种特性直至我们有一个强大、通用的容器。"服务容器(service container)" 是什么?服务容器是一个 PHP 对象,用于负责其他对象的实例化。我们告诉容器如何初始化对象,然后在项目需要它的实例时,再去请求。PSR-11 是什么?PSR-11...
创建自己的 PHP 模板引擎 - 渲染 & Echo
我们来创建一个小型 PHP 模板引擎!本文主要关注模板的渲染及 echo 输出能被 htmlspecialchars() 转义的数据。在我们开始编写代码之前,我们需要注意任何编程项目中最重要的部分——为项目命名。我将称之为“Stencil”。模板本身都将是纯PHP。我们不会创建任何像 Twig 或 Blade 这样的特殊语法,我们将只关注模板功能。我们将从创...
使用 GoLang 协程处理 Laravel 队列任务
Laravel 包含一个优秀的队列组件,它允许我们将耗时的任务委派给后台进程。它使我们能够更快地响应请求,从而处理更多的请求,从而扩展我们的 web 服务。队列进程,无论优化得多么好,一次只能处理一个作业。这意味着我们需要更多的进程来同时处理更多的工作。每个工作进程都是一个 PHP 进程,每个进程都通过拥有自己的内存空间而与其他进程隔离。如果我们启动过多的进...
centos7 安装libzip1.9.2解决 No package 'libzip' found
在编译php8.1.3的时候遇到了No package 'libzip' found,看了下报错,是需要libzip>= 0.11,而yum install的是0.10版本,在发文日看见最新版本为1.9.2,故本文详解如何安装lizip1.9.2。卸载老版本的libzip: yum remove libzip libzip-devel
PHP 8.3: unserialize(): E_NOTICE 错误升级为 E_WARNING
PHP 提供了 serialize 和 unserialize() 函数用以将 PHP 值(字符串,整型值,对象, NULL,数组,枚举等)系列化为字符串表示,及从字符串表示中重建 PHP 值。$data = ['apple', 'banana', 'orange']; $serialized = serialize($data); // "a:3:{i:0...
Call to undefined function Illuminate\Filesystem\symlink()
问题:Call to undefined function Illuminate\Filesystem\symlink() 环境:宝塔面板 解决方案:将PHP设置项[禁用函数]中的 symlink 删除。...
宝塔面板安装 Composer 报错 putenv 缺失
问题:使用宝塔 Windows 面板安装的 PHP 运行环境,使用 composer install 命令出现如下报错:Fatal error: Uncaught Error: Call to undefined function Composer\XdebugHandler\putenv() in phar://D:/composer/…解决方案:根据报错...
PHP 8:数组、变量、操作符、异常处理
本篇介绍几个新特性以及与数组、变量、运算符、异常处理和 trait 等有关的改进。数组与字符串弃用 false 值的 Autovivification.Autovivification是指当引用数组中未定义的元素时自动创建新数组,例如:?php $arr['a'][1] = 'a'; var_dump($arr);新数组$arr是自动创建出来的,它在被...
Pest 架构测试插件
随着 PestPHP v2 的发布,现在我们可以测试应用的架构了。本教程将介绍如何使用这一插件。首先在应用的 tests/Feature 目录下创建一个 ArchTest.php 文件。从这里开始,我们可以开始记录我们的架构需求和规则,使我们能够用出色的API和出色的开发体验来测试这些需求和规则。我推荐你添加的一个测试,确保应用中不会留下debug的调用。t...