php安装swoole扩展

PHP安装swoole扩展

  • Swoole官网

安装准备

安装前必须保证系统已经安装了下列软件

  • 4.8 版本需要 PHP-7.2 或更高版本
  • 5.0 版本需要 PHP-8.0 或更高版本
  • 6.0 版本需要 PHP-8.1 或更高版本
  • gcc-4.8 或更高版本
  • make
  • autoconf

安装Swool扩展

  • 安装官方文档
  • 安装后需要再php.ini中增加扩展配置
extension="swoole.so"

推荐启用的 PHP 配置

在 php.ini 中添加或修改以下配置以优化 Swoole:

; 错误显示(开发环境建议启用)
display_errors = On
display_startup_errors = On
error_reporting = E_ALL; 内存和时间限制(根据需求调整)
memory_limit = 1G       ; Swoole 常驻内存,建议调高
max_execution_time = 0  ; 脚本不超时(由 Swoole 控制); 禁用函数安全限制(Swoole 需要)
disable_functions = ""  ; 确保不禁用 exec、shell_exec 等(如需进程管理); 启用 OPcache(提升性能)
opcache.enable = 1
opcache.enable_cli = 1  ; CLI 模式下也启用

编译选项

这里是./configure 编译配置的额外参数,用于开启某些特性

编译安装配置
./configure \--enable-openssl=yes \--enable-sockets=yes \      # 建议启用--enable-mysqlnd=yes \     # 建议启用--enable-curl=yes \        # 建议启用--enable-cares=yes \       # 建议启用--enable-brotli=yes \--enable-zstd=no \--enable-pgsql=no \--enable-odbc=no \--enable-oracle=no \--enable-sqlite=no \--enable-thread=no \--enable-ioring=no
安装依赖命令
# Ubuntu/Debian
sudo apt-get install -y \libssl-dev \libcurl4-openssl-dev \libc-ares-dev \libbrotli-dev \libpq-dev  # 如需 PostgreSQL# CentOS/RHEL
sudo yum install -y \openssl-devel \libcurl-devel \c-ares-devel \brotli-devel \postgresql-devel  # 如需 PostgreSQL
配置选项速查表
配置选项默认值作用说明推荐建议依赖库
enable sockets supportno启用 PHP 原生 sockets 协程化支持(底层 TCP/UDP 开发)✅ 选 no:仅用高级协议(HTTP/WebSocket)
❌ 选 yes:需自定义协议
-
enable openssl supportno启用 SSL/TLS 加密(HTTPS/WSS 必备)必选 yeslibssl-devopenssl-devel
enable mysqlnd supportno启用 MySQL 协程客户端(高性能非阻塞操作)✅ 选 no:无 MySQL 需求
推荐 yes:高并发 MySQL 场景
mysqlnd
enable curl supportno启用协程 cURL(替代原生阻塞式 curl)✅ 选 no:无需高性能 HTTP 客户端
推荐 yes:爬虫/微服务调用
libcurl-dev
enable cares supportno启用异步 DNS 解析(避免阻塞协程)✅ 选 no:直接使用 IP
推荐 yes:高并发 HTTP 客户端
libc-ares-dev
enable brotli supportyes启用 Brotli 压缩(比 Gzip 更高压缩率)推荐保持 yeslibbrotli-dev
enable zstd supportno启用 Zstandard 压缩(速度优于 Brotli)✅ 选 no:Brotli 已足够
❌ 选 yes:需极致压缩性能
libzstd-dev
enable PostgreSQL supportno启用 PostgreSQL 协程客户端✅ 保持 no:除非明确需要libpq-dev
enable ODBC supportno启用 ODBC 协程客户端(SQL Server/Oracle 等)✅ 保持 nounixodbc-dev
enable Oracle supportno启用 Oracle 协程客户端(需 OCI8)✅ 保持 noOracle Instant Client
enable Sqlite supportno启用 SQLite 协程客户端✅ 保持 nosqlite3-dev
enable thread supportno启用多线程模式(需 PHP ZTS 版本)保持 no:协程模式足够-
enable iouring supportno启用 Linux io_uring 异步 I/O(需内核 ≥5.1)✅ 选 no:非高版本内核
❌ 选 yes:需极致文件性能
liburing-dev
Swoole 编译附加选项说明
配置选项说明
配置选项默认值作用说明适用场景依赖/注意事项
–enable-http2no启用 HTTP/2 协议支持需高性能 HTTP/2 服务(如 gRPC)需 OpenSSL ≥1.0.2
–enable-swoole-jsonno启用 Swoole 内置 JSON 编解码优化高频 JSON 操作场景(替代 json_encode/json_decode)需 PHP ≥7.2
–enable-swoole-pgsqlno启用 PostgreSQL 协程客户端(旧版配置,推荐用 --enable-pgsql)同 --enable-pgsql需 libpq-dev
–enable-debug-logno启用调试日志(记录更详细的运行时信息)开发环境问题排查影响性能,生产环境禁用
–enable-trace-logno启用追踪日志(记录协程切换等底层事件)深度性能调优或 Swoole 内部机制研究日志量极大,仅调试使用
–enable-swoole-hookall启用系统调用钩子(将阻塞函数转为协程式)需协程化原生函数(如 sleep/file_get_contents)可能引发兼容性问题,需测试
–enable-swoole-global-hookno全局启用协程钩子(覆盖所有 PHP 代码)全项目无侵入式协程化风险高,谨慎使用
–with-jemallocno链接 jemalloc 内存分配器(替代 glibc 的 malloc)高并发场景减少内存碎片需安装 jemalloc 开发库
–with-libpq-dir-指定 PostgreSQL 库路径(非标准安装时使用)自定义 PostgreSQL 安装路径示例:–with-libpq-dir=/opt/pgsql
–with-openssl-dir-指定 OpenSSL 库路径(非标准安装时使用)自定义 OpenSSL 安装路径示例:–with-openssl-dir=/opt/openssl
功能模块选项
配置选项默认值作用说明依赖项
–enable-swoole-redisyes启用 Redis 协程客户端(需单独安装 swoole_redis 扩展)-
–enable-swoole-sqliteno启用 SQLite 协程客户端sqlite3-dev
–enable-swoole-curlno启用协程 cURL 客户端(替代原生 curl)libcurl-dev
–enable-swoole-zipno启用 Zip 压缩解压协程支持libzip-dev

编译安装

下载 swoole 源码

https://github.com/swoole/swoole-src/releases
https://pecl.php.net/package/swoole
https://gitee.com/swoole/swoole/tags

从源码编译安装

下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装

ubuntu 没有安装 phpize 可执行命令:sudo apt-get install php-dev 来安装 phpize

快速安装(官方示例)
cd swoole-src && \
phpize && \
./configure && \
sudo make && sudo make install
进阶完整编译(官方示例)

以下脚本会下载并编译 master 分支的源码,需保证你已安装所有依赖,否则会遇到各种依赖错误。

mkdir -p ~/build && \
cd ~/build && \
rm -rf ./swoole-src && \
curl -o ./tmp/swoole.tar.gz https://github.com/swoole/swoole-src/archive/master.tar.gz -L && \
tar zxvf ./tmp/swoole.tar.gz && \
mv swoole-src* swoole-src && \
cd swoole-src && \
phpize && \
./configure \
--enable-openssl --enable-sockets --enable-mysqlnd --enable-swoole-curl --enable-cares --enable-swoole-pgsql && \
sudo make && sudo make install

PECL安装(推荐,根据提示安装简单)

Swoole 项目已收录到 PHP 官方扩展库,除了手动下载编译外,还可以通过 PHP 官方提供的 pecl 命令,一键下载安装

使用系统默认php版本安装

pecl install swoole

指定php版本安装(如果存在多个php版本)

# 进入指定的php版本/bin目录中
/usr/local/php8.2/bin/php install swoole

官方文档的安装方式

通过 PECL 安装 Swoole 时,在安装过程中它会询问是否要启用某些功能,这也可以在运行安装之前提供,例如:

pecl install -D 'enable-sockets="no" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="no" enable-swoole-curl="yes" enable-cares="yes"' swoole#或者
pecl install --configureoptions 'enable-sockets="no" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="no" enable-swoole-curl="yes" enable-cares="yes"' swoole

在这里插入图片描述

验证安装:

编译完成后执行 php --ri swoole 检查已启用功能。

php --ri swoole

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器传输数据存储数据建议 传输慢的原因

一、JSON存储的局限性 1. 性能瓶颈 全量读写:JSON文件通常需要整体加载到内存中才能操作,当数据量大时(如几百MB),I/O延迟和内存占用会显著增加。 无索引机制:查找数据需要遍历所有条目(时间复…

Android四大核心组件

目录 一、为什么需要四大组件? 二、Activity:看得见的界面 核心功能 生命周期图解 代码示例 三、Service:看不见的劳动者 两大类型 生命周期对比 注意陷阱 四、BroadcastReceiver:消息传递专员 两种注册方式 广播类型 …

「Mac畅玩AIGC与多模态01」架构篇01 - 展示层到硬件层的架构总览

一、概述 AIGC(AI Generated Content)系统由多个结构层级组成,自上而下涵盖交互界面、API 通信、模型推理、计算框架、底层驱动与硬件支持。本篇梳理 AIGC 应用的六层体系结构,明确各组件在系统中的职责与上下游关系,…

[MERN 项目实战] MERN Multi-Vendor 电商平台开发笔记(v2.0 从 bug 到结构优化的工程记录)

[MERN 项目实战] MERN Multi-Vendor 电商平台开发笔记(v2.0 从 bug 到结构优化的工程记录) 其实之前没想着这么快就能把 2.0 的笔记写出来的,之前的预期是,下一个阶段会一直维持到将 MERN 项目写完,毕竟后期很多东西都…

互斥量函数组

头文件 #include <pthread.h> pthread_mutex_init 函数原型&#xff1a; int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); 函数参数&#xff1a; mutex&#xff1a;指向要初始化的互斥量的指针。 attr&#xf…

互联网的下一代脉搏:深入理解 QUIC 协议

互联网的下一代脉搏&#xff1a;深入理解 QUIC 协议 互联网是现代社会的基石&#xff0c;而数据在其中高效、安全地传输是其运转的关键。长期以来&#xff0c;传输层的 TCP&#xff08;传输控制协议&#xff09;一直是互联网的主力军。然而&#xff0c;随着互联网应用场景的日…

全球城市范围30米分辨率土地覆盖数据(1985-2020)

Global urban area 30 meter resolution land cover data (1985-2020) 时间分辨率年空间分辨率10m - 100m共享方式保护期 277 天 5 时 42 分 9 秒数据大小&#xff1a;8.98 GB数据时间范围&#xff1a;1985-2020元数据更新时间2024-01-11 数据集摘要 1985~2020全球城市土地覆…

【Vue】单元测试(Jest/Vue Test Utils)

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Vue 文章目录 1. Vue 单元测试简介1.1 为什么需要单元测试1.2 测试工具介绍 2. 环境搭建2.1 安装依赖2.2 配置 Jest 3. 编写第一个测试3.1 组件示例3.2 编写测试用例3.3 运行测试 4. Vue Test Utils 核心 API4.1 挂载组件4.2 常…

数据湖的管理系统管什么?主流产品有哪些?

一、数据湖的管理系统管什么&#xff1f; 数据湖的管理系统主要负责管理和优化存储在数据湖中的大量异构数据&#xff0c;确保这些数据能够被有效地存储、处理、访问和治理。以下是数据湖管理系统的主要职责&#xff1a; 数据摄入管理&#xff1a;管理系统需要支持从多种来源&…

英文中日期读法

英文日期的读法和写法因地区&#xff08;英式英语与美式英语&#xff09;和正式程度有所不同&#xff0c;以下是详细说明&#xff1a; 一、日期格式 英式英语 (日-月-年) 写法&#xff1a;1(st) January 2023 或 1/1/2023读法&#xff1a;"the first of January, twenty t…

衡量矩阵数值稳定性的关键指标:矩阵的条件数

文章目录 1. 定义2. 为什么要定义条件数&#xff1f;2.1 分析线性系统 A ( x Δ x ) b Δ b A(x \Delta x) b \Delta b A(xΔx)bΔb2.2 分析线性系统 ( A Δ A ) ( x Δ x ) b (A \Delta A)(x \Delta x) b (AΔA)(xΔx)b2.3 定义矩阵的条件数 3. 性质及几何意义3…

4月22日复盘-开始卷积神经网络

4月24日复盘 一、CNN 视觉处理三大任务&#xff1a;图像分类、目标检测、图像分割 上游&#xff1a;提取特征&#xff0c;CNN 下游&#xff1a;分类、目标、分割等&#xff0c;具体的业务 1. 概述 ​ 卷积神经网络是深度学习在计算机视觉领域的突破性成果。在计算机视觉领…

【网络原理】从零开始深入理解TCP的各项特性和机制.(三)

上篇介绍了网络原理传输层TCP协议的知识,本篇博客给大家带来的是网络原理剩余的内容, 总体来说,这部分内容没有上两篇文章那么重要,本篇知识有一个印象即可. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分…

解决qnn htp 后端不支持boolean 数据类型的方法。

一、背景 1.1 问题原因 Qnn 模型在使用fp16的模型转换不支持类型是boolean的cast 算子&#xff0c;因为 htp 后端支持量化数据类型或者fp16&#xff0c;不支持boolean 类型。 ${QNN_SDK_ROOT_27}/bin/x86_64-linux-clang/qnn-model-lib-generator -c ./bge_small_fp16.cpp -b …

使用Three.js搭建自己的3Dweb模型(从0到1无废话版本)

教学视频参考&#xff1a;B站——Three.js教学 教学链接&#xff1a;Three.js中文网 老陈打码 | 麒跃科技 一.什么是Three.js&#xff1f; Three.js​ 是一个基于 JavaScript 的 ​3D 图形库&#xff0c;用于在网页浏览器中创建和渲染交互式 3D 内容。它基于 WebGL&#xff0…

PostgreSQL WAL 幂等性详解

1. WAL简介 WAL&#xff08;Write-Ahead Logging&#xff09;是PostgreSQL的核心机制之一。其基本理念是&#xff1a;在修改数据库数据页之前&#xff0c;必须先将这次修改操作写入到WAL日志中。 这确保了即使发生崩溃&#xff0c;数据库也可以根据WAL日志进行恢复。 恢复的核…

git提交规范记录,常见的提交类型及模板、示例

Git提交规范是一种约定俗成的提交信息编写标准&#xff0c;旨在使代码仓库的提交历史更加清晰、可读和有组织。以下是常见的Git提交类型及其对应的提交模板&#xff1a; 提交信息的基本结构 一个标准的Git提交信息通常包含以下三个主要部分&#xff1a; Header‌&#xff1a;描…

FastAPI系列06:FastAPI响应(Response)

FastAPI响应&#xff08;Response&#xff09; 1、Response入门2、Response基本操作设置响应体&#xff08;返回数据&#xff09;设置状态码设置响应头设置 Cookies 3、响应模型 response_model4、响应类型 response_classResponse派生类自定义response_class 在“FastAPI系列0…

每日一题(小白)模拟娱乐篇33

首先&#xff0c;理解题意是十分重要的&#xff0c;我们是要求最短路径&#xff0c;这道题可以用dfs&#xff0c;但是题目给出的数据是有规律的&#xff0c;我们可以尝试模拟的过程使用简单的方法做出来。每隔w数字就会向下转向&#xff0c;就比如题目上示例的w6&#xff0c;无…

哈希封装unordered_map和unordered_set的模拟实现

文章目录 &#xff08;一&#xff09;认识unordered_map和unordered_set&#xff08;二&#xff09;模拟实现unordered_map和unordered_set2.1 实现出复用哈希表的框架2.2 迭代器iterator的实现思路分析2.3 unordered_map支持[] &#xff08;三&#xff09;结束语 &#xff08;…