基础环境
阿里云-轻量应用服务器 CentOS 7.6
编译 PHP 版本 7.4.13
注意
本内容目前仅作步骤记录和复现,该流程不适用于想要正确流程的人(但大体的正确流程可从中摘出
下载源码包
国内镜像:http://php.p2hp.com
- 切换至某一目录,本人为:
mkdir /data
cd /data
- 下载:
wget https://mirrors.sohu.com/php/php-7.4.13.tag.gz
- 解压:
tar -zxvf php-7.4.13.tar.gz
准备安装
cd php-7.4.13
- 查看编译的配置参数
./configure --help
- 配置
指定安装目录:
./configure --prefix=/usr/local/php7.4
php-fpm,暂时未使用,但是在后续的操作中顺路查询了后续开启的方法,得到的建议是重新带参数编译,即需要的话建议在开始阶段就加上此参数
--enable-fpm
执行 make
,报错:未找到 sqlite3,因基本使用不到 sqlite,故使用 ./configure --help | grep sqlite
查看相关编译参数后,添加参数:
--without-sqlite3 --without-pdo-sqlite
再次执行 make
,报错:未找到 libxml-2.0,结合百度和 yum search libxml2
,安装:
yum install -y libxml2 libxml2-devel
- 编译安装,以下是两条命令,可分开执行
make && make install
- 其他配置
ln -s /usr/local/php7.4/bin/php /usr/local/bin/php74 # 配置可直接执行的 php 命令,这里是 php74
cp /usr/local/php7.4/etc/php-fpm.conf.default /usr/local/php7.4/etc/php-fpm.conf # 暂未使用
cp /usr/local/php7.4/etc/php-fpm.d/www.conf.default /usr/local/php7.4/etc/php-fpm.d/www.conf # 暂未使用
cp */php.ini-development | */php.ini-production /usr/local/php7.4/etc/php.ini # 暂未使用
- 安装 Composer
报错 Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?
,结合百度(参考链接)和 ./configure --help | grep openssl
,可以在配置阶段重新添加以下参数进行配置后,重新配置、编译、安装:
--with-openssl
openssl 并未在此安装,考虑到后期需要补充添加的模块较多,此时开始尝试在不重新编译的情况下添加模块(参考链接)
已编译安装的 php 添加模块
openssl 为例
- 切换到解压的源目录下的
/data/php-7.4.13/ext/openssl
,执行:
/usr/local/php7.4/bin/phpize
报错:
Cannot find config.m4. Make sure that you run '/usr/local/php7.4/bin/phpize' in the top level source directory of the module
ls 查看,没有 config.m4
,但是有 config0.m4
,将该文件复制或移动并重命名(参考链接)为 config.m4
重新执行 phpize
,报错
Cannot find autoconf
安装
yum install autoconf
再次执行 phpize
当前目录下生成 configure
等文件
./configure
报错
configure: error: Cannot find php-config. Please use --with-php-config=PATH
执行
./configure --with-php-config=/usr/local/php7.4/bin/php-config
报错
no package 'openssl' found
执行 openssl version
发现是有 openssl 的,查看 ./configure --help | grep openssl
,添加参数后执行
./configure --with-php-config=/usr/local/php7.4/bin/php-config --with-openssl
再次报错 no package 'openssl' found
,安装 yum install openssl-devel
(参考链接) 后执行
./configure --with-php-config=/usr/local/php7.4/bin/php-config
make
Libraries have been installed in:
/data/php-7.4.13/ext/openssl/modules
make install
Installing shared extensions: /usr/local/php7.4/lib/php/extensions/no-debug-non-zts-20190902/
此后在多次尝试修改 php.ini 中的 extension_dir 以及 开启 openssl 无果后,,考虑是否是编译的 so 文件需要 apache 来加载,转而开始编译安装 apache,因为需要关联 apache 与 php,故重新编译,参数:
./configure --prefix=/usr/local/php7.4 --without-sqlite3 --without-pdo-sqlite --enable --with-apxs2=/usr/local/apache2.4/bin/apxs/
编译后,在 /usr/local/apache2.4/modules/ 目录会多出 libphp7.so,同时 /usr/local/apache2.4/conf/httpd.conf 最后会多出 LoadModule php7_module modules/libphp7.so,再加上
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
并修改
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
/usr/local/apache2.4/hotdocs/index.php <?php phpinfo(); ?>
进行关联测试
重复上面部分操作,无果
openssl 问题解决
php74 --ini
Configuration File (php.ini) Path: /usr/local/php7.4/lib
Loaded Configuration File: (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
据此,php.ini 复制的目标路径不应该是 /usr/local/php7.4/etc/php.ini,应该是 /usr/local/php7.4/lib/php.ini,可以先复制到 etc 目录下,再添加 ln -s 软链接过去
或者是在编译阶段添加参数 --with-config-file-path=/usr/local/php7.4/etc 参考链接