怎么免费建设个人网站/网络推广外包联系方式
docker环境下php安装扩展步骤 以mysqli为例
- 1.0 前言
- 2.0 php 扩展安装原理
- 3.0 docker 环境下 php 扩展安装
- 3.1 docker php 容器扩展安装路径及原理
- 3.2 docker php 扩展脚本安装过程
同步发布在个人笔记[docker环境下php安装扩展步骤 以mysqli为例]( https://blog.lichenrobo.com/server-net/server-deploy/docker-php-ext/ )
1.0 前言
最近在折腾服务器的时候,希望一个 web 应用可以实现对数据库的操作,很容易就想到用 php 来实现,因为php 有方便的 mysql 数据库支持(php7 后应为 mysqli )。但是 run 的时候发现 docker 的 php-fpm 镜像生成的容器没有安装 mysqli
扩展,需要手动配置。故有此笔记。
2.0 php 扩展安装原理
PHP扩展实际上是用C语言编写的动态链接库,用以增强PHP的功能。所以安装 php 扩展就是布置例如 mysqli.so
这样的动态链接库文件,并告知 php 文件位置,使其能够找到就成功了。
那么很显然的一种方法就是下载 mysqli 的源码并编译,然后在 php.ini
中配置相关信息。(可见从源码安装还是挺方便的,apt 的安装方式是方便,但是配置起来不太自由。)
然而 docker 里 php-fpm
镜像是已经安装好的,我们最好在此基础上进行安装,并且进入容器内部不算很方便,有时我们希望可以通过 dockerfile
或者 docker compose
的方式直接搞定扩展的事情。docker 镜像为我们提供了这样方便的选择,那就是一系列自带的安装脚本:
docker-php-source
docker-php-ext-enable
docker-php-ext-install
docker-php-ext-configure
利用这些脚本我们就可以方便的配置 php 扩展,无需再去修改 php.ini
文件了;同时也使得我们可以通过 dockerfile
或者 docker compose
的方式在容器创建之初就配置好环境。
3.0 docker 环境下 php 扩展安装
以进入容器的方式安装 mysqli
为例。
首先我们可以通过命令 docker exec -it php-fpm_container bash
进入容器内部,运行命令 php -m
查看已经安装配置过的扩展。
此时显然列表里面没有 mysqli
3.1 docker php 容器扩展安装路径及原理
容器内和扩展安装有这么几个关键的文件路径
/usr/src/
存放 php 源码。在初始状态只有源码压缩包,安装过程会生成./php
源码文件夹。/usr/src/php/ext/
生成的源码文件夹里各种扩展的源码文件所在处,以mysqli
为例,源码就在/usr/src/php/ext/mysqli
路径下。/usr/local/lib/php/extensions/no-debug-non-zts-20xxxxxx
安装扩展后,生成的动态链接库文件所在的位置,php 需要知道这个位置以便调用扩展。/usr/local/bin
docker-php
扩展安装脚本文件所在处。
整个安装原理就是:
解压获得扩展源码 → 编译源码并把动态链接库文件放在指定位置 → 配置php文件使其成功链接库文件 。
3.2 docker php 扩展脚本安装过程
Step 1 docker-php-source
虽然在容器内任意位置都可以运行这些脚本,但是我们还是去脚本所在的目录下看一下
$ cd /usr/local/bin
$ ls
docker-php-entrypoint docker-php-ext-enable docker-php-source pear pecl phar.phar php-config
docker-php-ext-configure docker-php-ext-install flask peardev phar php phpize
这里面就包含用到的所有脚本了。
第一步就是解压出所需的mysqli扩展源码。
$ docker-php-source extract
$ cd /usr/src
$ ls
php php.tar.xz php.tar.xz.asc
$ cd php/ext/
$ ls
... mysqli ...
进入路径 /usr/src/php/ext/
能看到 mysql
源码文件夹,第一步就完成了。
注:docker-php-source delete
可以删除源码文件夹。
Step 2 docker-php-ext-install
mysqli
扩展是 php 源码里面就有的扩展,所以我们执行完第一步就有源码了,对于小众一些的非自带源码,我们就需要手动把源码文件夹布置在 /usr/src/php/ext/
下,即可进行下一步。
$ docker-php-ext-install mysqli # 后面参数是扩展源码的目录名
$ php -m
[PHP Modules]
...
mysqli
...[Zend Modules]
查看已安装扩展,就已经能看到 mysqli
扩展了。
Step 3 docker-php-ext-enable
这个命令实际上在上一步 install 后已经自动运行过了,所以新安装的扩展无需运行此步。对于有时不需要有时需要的扩展,可以通过 enable
来使能扩展功能。
$ docker-php-ext-enable mysqli # 后面参数是扩展源码的目录名
实际意义可以类比为在 php.ini
文件中配置了相关扩展的功能。
Step 4 docker-php-ext-configure
当安装扩展的时候,如果需要自定义配置时,则可以在 docker-php-ext-install
后面使用。具体用法就看不同扩展的需求了。 mysqli
无需此步。
$ docker-php-ext-configure .........
安装完成。
相关文章:

docker环境下php安装扩展步骤 以mysqli为例
docker环境下php安装扩展步骤 以mysqli为例 1.0 前言2.0 php 扩展安装原理3.0 docker 环境下 php 扩展安装3.1 docker php 容器扩展安装路径及原理3.2 docker php 扩展脚本安装过程 同步发布在个人笔记[docker环境下php安装扩展步骤 以mysqli为例]( https://blog.lichenrobo.co…...

医院综合绩效核算系统,绩效核算系统源码,采用springboot+avue+MySQL技术开发,可适应医院多种绩效核算方式。
一、系统概述 作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可…...

ROOM数据快速入门
ROOM数据库快速入门 文章目录 ROOM数据库快速入门第一章 准备工作第01节 引入库第02节 布局文件第03节 activity类第04节 效果图 第二章 数据类第01节 实体类(表)第02节 数据访问类(DAO)第03节 数据Service层第04节 RoomDataBase …...

刷新,前面接口的返回值没有到,第二个接口已经请求完了,导致第二个接口返回数据错误
刷新,前面接口的返回值没有到,(前端)第二个接口已经请求完了(入参没有拿前面那个接口返回的数据),导致第二个接口返回数据错误...

pdcj设计
为了实现这些功能需求,我们需要设计多个数据库表来存储相关的数据,并编写相应的Java代码来处理业务逻辑。下面是各个功能需求对应的MySQL表结构以及部分Java代码示例。 商品设置管理 商品分类管理 商品分类表 (product_categories)CREATE TABLE produ…...

【数据结构】哈希表的模拟实现
文章目录 1. 哈希的概念2. 哈希表与哈希函数2.1 哈希冲突2.2 哈希函数2.3 哈希冲突的解决2.3.1 闭散列(线性探测)2.3.2 闭散列的实现2.3.3 开散列(哈希桶)2.3.4 开散列的实现 2.4 开散列与闭散列比较 1. 哈希的概念 在我们之前所接触到的所有的数据结构…...

面试经典算法150题系列-数组/字符串操作之多数元素
序言:今天是第五题啦,前面四题的解法还清楚吗?可以到面试算法题系列150题专栏 进行复习呀。 温故而知新,可以为师矣!加油,未来的技术大牛们。 多数元素 给定一个大小为 n 的数组 nums ,返回其…...

海南云亿商务咨询有限公司领航抖音电商服务
在当下这个瞬息万变的互联网时代,短视频平台尤其是抖音,正以惊人的速度重塑着消费者的购物习惯与商家的营销版图。在这场电商盛宴中,海南云亿商务咨询有限公司凭借其在抖音电商领域的深厚积累与前瞻视野,正逐步成为众多商家转型升…...

C#初级——继承
继承 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类(父类࿰…...

Github 2024-07-29 开源项目日报 Top10
根据Github Trendings的统计,今日(2024-07-29统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量JavaScript项目3非开发语言项目3Python项目1TypeScript项目1C++项目1Lean项目1HTML项目1免费编程学习平台:freeCodeCamp.org 创建周期:3302 天…...

nginx反向代理和负载均衡+安装jdk-22.0.2
ps -aux|grep nginx //查看进程 nginx 代理 nginx代理是负载均衡的基础 主机:192.168.118.60 这台主机只发布了web服务,没有做代理的任何操作 修改一下index.html中的内容 echo "this is java web server" > /usr/local/nginx/htm…...

软考高级科目怎么选?软考高级含金量排序
软考既是国家职业资格考试,又是职称资格考试,含金量很高。软考的报考不设置任何条件,可以跨级考试,也就是非相关专业的人,也可以直接考高级。因此近些年报考软考、尤其是软考高级的人越来越多。 软考高级证书…...

【机器学习西瓜书学习笔记——模型评估与选择】
机器学习西瓜书学习笔记【第二章】 第二章 模型评估与选择2.1训练误差和测试误差错误率误差 欠拟合和过拟合2.2评估方法留出法交叉验证法自助法 2.3性能度量查准率、查全率与F1查准率查全率F1 P-R曲线ROC与AUCROCAUC 代价敏感错误率与代价曲线代价曲线 2.4比较检验假设检验&…...

vue3+cesium创建地图
1.我这边使用的是cdn引入形式 比较简单的方式 不需要下载依赖 在项目文件的index.html引入 这样cesium就会挂载到window对象上面去了 <!-- 引入cesium-js文件 --><script src"https://cesium.com/downloads/cesiumjs/releases/1.111/Build/Cesium/Cesium.js"…...

Zookeeper客户端和服务端NIO网络通信源码剖析
文章目录 服务端的ServerCnxFactory到底是个什么东西?ServerCnxFactory 的作用ServerCnxFactory 的实现使用 ServerCnxFactory 的示例注意事项ServerCnxFactory是什么时候完成初始化的?初始化流程代码示例详细步骤1. 创建实例2. 配置3. 启动初始化时机总结服务端基于NIO的Ser…...

从DevOps到DevSecOps是怎样之中转变?
DevSecOps是DevOps实践的自然演进,其重点是将安全集成到软件开发和部署流程中。在DevOps和DevSecOps发展之前,企业通常在在软件部署前进行集中的安全测试,导致安全介入严重滞后,漏洞分风险无法及时修复,影响上线交付。…...

ORM与第三方数据库对接的探讨及不同版本数据库的影响
对象关系映射(Object-Relational Mapping,ORM)是一种将程序中的对象与数据库中的数据进行映射的技术,使开发者可以通过操作对象来间接操作数据库。然而,在实际应用中,ORM并不是总能完美地对接陌生的第三方数…...

Windows远程桌面无法拷贝文件问题
场景说明 Winwdows远程桌面,相比Linux方便一点就是,同是windows连接,其中复制粘贴功能,可以在两个windows无缝切换。 但最近笔者远程一台测试windows服务器时,发现无法在服务器上复制内容到本地,也无法从…...

优化数据处理效率,解读 EasyMR 大数据组件升级
EasyMR 作为袋鼠云基于云原生技术和 Hadoop、Hive、Spark、Flink、Hbase、Presto 等开源大数据组件构建的弹性计算引擎。此前,我们已就其展开了多方位、多角度的详尽介绍。而此次,我们成功接入了大数据组件的升级和回滚功能,能够借助 EasyMR …...

并发编程AtomicInteger详解
AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子变量类,用于对 int 类型的变量进行原子操作。它利用底层的 CAS(Compare-And-Swap)机制,实现了无锁的线程安全。AtomicInteger 常用于需要高效、线程安全…...

ctfshow 权限维持 web670--web679
web670 <?php// 题目说明: // 想办法维持权限,确定无误后提交check,通过check后,才会生成flag,此前flag不存在error_reporting(0); highlight_file(__FILE__);$a$_GET[action];switch($a){case cmd:eval($_POST[c…...

职场生存指南
求职篇 面试潜台词分析 (1)介绍: “请做一下自我介绍?” ❌:慢吞吞的介绍:叫什么,来自学校,专业,工作了那几家公司。 问题目的:个人优势+岗位匹配度+个人身上技能标签 (2)反问: “你还有什么想问的吗?” 问题目的:对工作的好奇心+个人积极性<——岗位…...

Spring源码(八)--Spring实例化的策略
Spring实例化的策略有几种 ,可以看一下 InstantiationStrategy 相关的类。 UML 结构图 InstantiationStrategy的实现类有 SimpleInstantiationStrategy。 CglibSubclassingInstantiationStrategy 又继承了SimpleInstantiationStrategy。 InstantiationStrategy I…...

部署KVM虚拟化平台
文章目录 KVM虚拟化架构KVM组成KVM虚拟化三种模式 KVM虚拟化架构 KVM模块直接整合在Linux内核中 KVM组成 e KVM Driver虚拟机创建虚拟机内存分配虚拟CPU寄存器读写虚拟CPU运行 QEMU(快速仿真器) 模拟PC硬件的用户控件组件提供I/O设备模型及访问外设的途径 KVM虚拟化三种模式 客…...

Java对象模型深度剖析:从POJO到ENTITY
引言 在Java企业级应用开发中,对象模型是构建软件架构的核心。它们不仅帮助我们组织代码,还提升了代码的可读性和可维护性。本文将深入介绍Java中的几种关键对象模型:POJO、DTO、DAO、PO、BO、VO、QO和ENTITY,以及DO,…...

Nginx日志分析:编写Shell脚本进行全面日志统计
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。无论是在大流量的网站还是小型的个人博客中,Nginx都得到了广泛应用。在实际生产环境中,对Nginx日志的分析有助于我们了解网站的访问情况,发现潜在问题…...

【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)
【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下) 大家好 我是寸铁👊 【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分…...

C语言——运算符及表达式
C语言——运算符及表达式 运算符运算符的分类(自增运算符)、--(自减运算符)赋值运算符逗号运算符(顺序求值运算符) 表达式 运算符 运算符的分类 C语言的运算符范围很宽,除了控制语句和输入输出…...

Python面试宝典第23题:分发糖果
题目 n 个孩子站成一排,给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果。 (1)每个孩子至少分配到 1 个糖果。 (2)相邻两个孩子评分更高的孩子会获得更多的糖果。 请…...

Java与模式及其应用场景知识点分享(电子版)
前言 Java 编程语言自1995年问世以来,其成功好像任何编程语言都无法媲美。生逢其时(互联网的兴起)固然是一方面的原因,而Java吸收总结了前人的经验教训,反映了最新技术(the state ofthe art),对其受到欢迎和采用,恐怕…...