上一篇文章中提到的因为有个问题无法解决才改编译PHP 7.4.23的,不过在这次编译成功了,步骤都一样其实没有什么好重复水的。
轻车熟路了还是蛮简单的,虽然在x86_64架构下也编译过了。
1、安装依赖
编译的相关组件在之前已经安装了。
跟上篇一样先安装以下组件免得需要一个个的补充安装。
yum -y install libxml2 ibxml2-devel libcurl-devel.x86_64 bzip2 bzip2-devel libxslt-devel libpng-devel epel-release oniguruma oniguruma-devel sqlite-devel libcurl-devel
2、下载源码并解压
wget https://www.php.net/distributions/php-8.0.10.tar.gz tar -zxf php-8.0.10.tar.gz cd php-8.0.10
直接编译也会出现这个错误:
/ext/standard/filestat.c -o ext/standard/filestat.lo In file included from /root/php-8.0.10/Zend/zend.h:357:0, from /root/php-8.0.10/main/php.h:31, from /root/php-8.0.10/ext/standard/array.c:22: /root/php-8.0.10/ext/standard/array.c: In function \u2018zif_array_sum\u2019: /root/php-8.0.10/Zend/zend_operators.h:692:2: error: invalid 'asm': invalid operand prefix '%c' __asm__ goto( ^ /bin/sh /root/php-8.0.10/libtool --silent --preserve-dup-deps --mode=compile cc -std=gnu99 -Iext/standard/ -I/root/php-8.0.10/ext/standard/ -I/root/php-8.0.10/include -I/root/php-8.0.10/main -I/root/php-8.0.10 -I/root/php-8.0.10/ext/date/lib -I/usr/include/libxml2 -I/usr/include/libpng15 -I/root/php-8.0.10/ext/mbstring/libmbfl -I/root/php-8.0.10/ext/mbstring/libmbfl/mbfl -I/root/php-8.0.10/TSRM -I/root/php-8.0.10/Zend -Wno-clobbered -Wall -Wextra -Wno-strict-aliasing -Wno-implicit-fallthrough -Wno-unused-parameter -Wno-sign-compare -g -O2 -fvisibility=hidden -DZEND_SIGNALS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -c /root/php-8.0.10/ext/standard/flock_compat.c -o ext/standard/flock_compat.lo /root/php-8.0.10/ext/standard/array.c: At top level: cc1: warning: unrecognized command line option "-Wno-implicit-fallthrough" [enabled by default] make: *** [ext/standard/array.lo] Error 1 make: *** Waiting for unfinished jobs....
修改/root/php-8.0.10/Zend/zend_operators.h
文件的第522行的1
为0
来“掩盖”这个错误:
521 #if defined(HAVE_ASM_GOTO) && !__has_feature(memory_sanitizer) 522 # define ZEND_USE_ASM_ARITHMETIC 0 523 #else 524 # define ZEND_USE_ASM_ARITHMETIC 0 525 #endif
3、编译代码
./configure --prefix=/usr/local/php8 \ --with-config-file-path=/usr/local/php8 \ --enable-mbstring \ --enable-ftp \ --enable-gd \ --enable-gd-jis-conv \ --enable-mysqlnd \ --enable-pdo \ --enable-sockets \ --enable-fpm \ --enable-xml \ --enable-soap \ --enable-pcntl \ --enable-cli \ --with-openssl \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-pear \ --with-zlib \ --with-iconv \ --with-curl
# 这次的服务器是4核的CPU,所以使用 -j4 加快编译速度,其他核心数按需填写对应的参数 make -j4 # 测试(耗时有点长啊) make test # 安装 make install
4、配置并启动
cp php.ini-production /usr/local/php8/php.ini cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm80 chmod +x /etc/init.d/php-fpm80 cd /usr/local/php8/etc/ cp php-fpm.conf.default php-fpm.conf cd php-fpm.d/ cp www.conf.default www.conf
启动
/etc/init.d/php-fpm80 start
这次安装了Nginx并且配置了规则可以在浏览器上面打开了,编译过程的输出就不放出来了。
php -v
:
[root@kp1 php-8.0.10]# /usr/local/php8/bin/php -v PHP 8.0.10 (cli) (built: Sep 17 2021 01:24:23) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.10, Copyright (c) Zend Technologies
php -m
:
[root@kp1 php-8.0.10]# /usr/local/php8/bin/php -m [PHP Modules] Core ctype curl date dom fileinfo filter ftp gd hash iconv json libxml mbstring mysqli mysqlnd openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar posix Reflection session SimpleXML soap sockets SPL sqlite3 standard tokenizer xml xmlreader xmlwriter zlib [Zend Modules]
通过不同的端口可以给不同的站点使用不同的PHP版本。
还是习惯和Apache结合的那种方式运行,虽然不知道孰优孰劣,这次的截图可能稍后放出。
ChiuYut
2021年9月17日