前言
本着能懒则懒的原则,之前我都是宝塔、lnmp脚本等“一键”
再不济也得来个 apt/yum install php
什么?源码 make install
? 编译参数一言难尽,劝退劝退...我只是想要个开发环境而已
没关系!我来整理一下常用模块以及参数!环境为 ubuntu/debian
为啥不用
docker
?
开发环境有时候想跑一跑代码,还得先进入到容器里,里面通常又没有宿主机的一些工具(有的容器甚至连ping都没有),来回切换感觉很麻烦
总结
- 源码压缩包要检查 sha256
- 快速安装 只看 1、2、4、5
- 3 为模块对应的参数表
开始
1. 准备源码
检查压缩包的完整性,与官网 sha256比较
wget https://www.php.net/distributions/php-8.1.2.tar.gz
sha256sum php-8.1.2.tar.gz
tar zxvf php-8.1.2.tar.gz
2. 准备编译环境
安装以下包
// debian/ubuntu
apt install gcc make pkg-config libxml2-dev libsqlite3-dev libonig-dev libcurl4-openssl-dev libssl-dev libzip-dev
# GD
apt install zlib1g-dev libpng-dev
3. 编译参数
官方的拓展分类
根据需要的模块添加其后对应的参数
./configure 各种参数
模块 | 参数 | 作用 | 备注 |
---|---|---|---|
--prefix= | 安装目录前缀 | 核心配置项 | |
--with-pear | 安装pear | ||
--with-config-file-path | 指定 php.ini的位置 | ||
FPM | --enable-fpm | 详细配置 | |
FPM | --with-fpm-user | 运行者 | |
FPM | --with-fpm-group | 运行组 | |
FPM | --with-fpm-systemd | 使用systemd运行管理 | |
GD | --enable-gd | 使用推荐版本GD | 详细配置 |
mbstring | --enable-mbstring | 多字节字符串 | |
CURL | --with-curl | ||
PDO_MYSQL | --with-pdo-mysql | 默认使用的是 Mysqlnd | |
OpenSSL | --with-openssl | ||
Zip | --with-zip | ||
sockets | --enable-sockets |
4. 编译命令
包含常用模块,可以直接使用
./configure --prefix=/usr/local --with-pear --enable-fpm --with-fpm-systemd --enable-gd --enable-mbstring --with-curl --with-pdo-mysql --with-openssl --with-zip
5. 编译&安装
编译并安装后
复制 php.ini 到默认目录/usr/local/lib/
编译的时候可指定
make && make install
cp php.ini-development /usr/local/lib/php.ini
检查 php安装是否正确
$ php -v
PHP 8.1.2 (cli) (built: Feb 18 2022 08:17:32) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
$ php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
复制 fpm 配置文件、运行服务文件
www.conf
php-fpm.conf
php-fpm.service
cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
cp sapi/fpm/php-fpm.service /etc/systemd/system/
修改 fpm 用户和组,默认为nobody
编译的时候可指定
user = www-data
group = www-data
/usr/local/etc/php-fpm.d/www.conf
修改服务文件,取消只读 不然日志不能读写无法启动
ProtectSystem=false
/etc/systemd/system/php-fpm.service
设置自启动并运行
systemctl enable php-fpm
service php-fpm start
service php-fpm status
* php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/etc/systemd/system/php-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-02-18 09:46:29 UTC; 5s ago
Main PID: 397784 (php-fpm)
本地起服务测试
php -S 0.0.0.0:8080
[附]编译错误
No package 'libxml-2.0' found
apt install libxml2-dev
No package ‘sqlite3‘ found
apt install libsqlite3-dev
configure: WARNING: unrecognized options: –with-gd
--with-gd becomes --enable-gd
No package 'zlib' found
apt install zlib1g-dev
No package 'libpng' found
apt install libpng-dev
No package 'oniguruma' found
apt install libonig-dev
No package 'libcurl' found
apt install libcurl4-openssl-dev
No package 'libsystemd' found
apt install libsystemd-dev
No package 'openssl' found
apt install libssl-dev
No package 'libzip' found
apt install libzip-dev