如何构建 php-fpm 镜像

在实际的项目部署中,我们有时候会遇到在一个服务器上部署多个 php 环境的情况。遇到这种情况,我们可以在同一物理机上装多个 php-fpm 监听不同端口,Nginx 根据不同的 Vhost 去找不同的 php-fpm 解析。 上述方法虽然可以,但是在项目管理上并不是很友好,比如我需要在某个项目执行 PHP 脚本,那还需要写 /path/php script.php 这样的话就需要每个维护项目的人都十分清楚,哪个项目应该用哪个版本的 PHP 去执行相应的脚本。 其次,如果某天需要把某个项目迁移到其他服务器了,我们还需要在新机器上安装 PHP 环境。 如果用 docker 进行部署,就不会有上面的问题,我们只需要写一次 Dockfile 可以在任何服务器上构建出相同的 php-fpm 环境,从而让迁移更简单,如果需要执行脚本,只需要进入对应的容器,直接执行 php script.php 即可。 php-fpm 官方镜像介绍 在 php Tags | Docker Hub 找到你所需的基础镜像的 tag 扩展安装 Docker PHP 安装有三种方式 Core Extensions: FROM php:8.2-fpm RUN apt-get update && apt-get install -y \ libfreetype-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd PECL extensions :...

November 17, 2023 · 2 min · 云溪

golang base64 编码与 PHP 输出不一致

最近开发中,将一个 php 算法,移植到 golang 中,发现 base64 算法生成的字符串不一致,经过排查发现是由于 ASCII 控制字符导致的原因,加下来看代码 <?php $asciiArr =[10, 187, 217, 12, 207, 183, 184, 231, 184, 149, 118, 151]; $str = ''; foreach ($asciiArr as $ascii) { $str .= chr($ascii); } echo base64_encode($str); 上述代码输出: CrvZDM+3uOe4lXaX package main import ( "encoding/base64" "fmt" ) func main() { res := []int{10, 187, 217, 12, 207, 183, 184, 231, 184, 149, 118, 151} var str string var b []byte for _, v := range res { str += string(v) b = append(b, byte(v)) } byteCode := base64....

June 16, 2021 · 1 min · 云溪

Composer 私有仓库搭建

Composer 是 PHP 的软件包管理系统,它提供用于管理 PHP 软件和依赖库关系的标准格式。作为日常开发,Composer 能够满足我们的日常需求,但有些情况下,我们有些公司内部的扩展,不希望被检索或者放在共有库中,就需要搭建私有库来解决问题。 在讨论搭建私有仓库前,我们先了解一下 Composer 是如何安装扩展的 Composer 安装扩展流程 通过上图我们不难发现,如果要构建私有仓库,我们需要构建一个类似 Packagist 的网站,来告诉 Composer 该从哪里下载扩展代码,这就需要用到 Satis 工具 Satis 介绍 Satis 是一个开源的静态 Composer 仓库生成器,有了它我们可以轻松的构建出一个类似 Packagist 的索引网站,来告诉 Composer 通过我们自己的私有仓库下载扩展。 安装 命令行安装 // 安装 composer create-project composer/satis:dev-main // 构建索引仓库 php bin/satis build <configuration-file> <output-directory> docker 安装 下载镜像: docker pull composer/satis 运行镜像: docker run --rm --init -it \ --user $(id -u):$(id -g) \ --volume $(pwd):/build \ --volume "${COMPOSER_HOME:-$HOME/.composer}:/composer" \ composer/satis build <configuration-file> <output-directory> 配置 创建一个名为:satis....

April 1, 2021 · 1 min · 云溪

PHP-FFMpeg 安装

安装 FFMPEG wget http://download.bt.cn/install/ext/ffmpeg.sh && sh ffmpeg.sh 安装完后可输入以下命令是否安装成功 ffmpeg -version 删除禁用函数 proc_open, exec, system 安装 PHP-FFMpeg composer require php-ffmpeg/php-ffmpeg 常见问题 Executable not found, proposed : avprobe, ffprobe php-fpm 在执行 FFMPEG 的时候,没有找到 ffprobe 和 ffmpeg 解决办法如下: 命令行解决 通过 shell 确定文件位置 whereis ffprobe /usr/local/bin/ffprobe which ffmpeg /usr/local/bin/ffmpeg 在初始化 FFMpeg 的时候将文件位置写入 $ffmpeg = FFMpeg::create([ 'ffmpeg.binaries' => '/usr/local/bin/ffmpeg', 'ffprobe.binaries' => '/usr/local/bin/ffprobe', ]); PHP 代码直接解决 // 写入 WWW 用户的环境变量 putenv('PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:$PATH'); // 通过 exec 函数找到文件对应位置 $ffmpeg = FFMpeg::create([ 'ffmpeg....

August 28, 2020 · 1 min · 云溪

CSV 中文解析异常

最近在做导入 csv 数据的时候出现了,未按预期导出的情况,具体情况见下图: 如图所示,商家地址部分和商家电话部分,没有正常解析。后来在PHP官网找到如下解释: 该函数对区域设置是敏感的。比如说 LANG 设为 en_US.UTF-8 的话,单字节编码的文件就会出现读取错误。 我系统语言设置的 en, 当解析 utf8 字节编码的文件,就出现了上述问题。 既然找到了是因为区域的问题,就号解决了,在导入前先设置一下区域: setlocale(LC_ALL, 'us'); 如果有疑问欢迎留言交流。 Reference fgetcsv

June 6, 2020 · 1 min · 云溪