Arm编译安装PHP 8.0.10

上一篇文章中提到的因为有个问题无法解决才改编译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行的10来“掩盖”这个错误:

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结合的那种方式运行,虽然不知道孰优孰劣,这次的截图可能稍后放出。

Arm编译安装PHP 8.0.10

ChiuYut

2021年9月17日

发布者

ChiuYut

咦?我是谁?这是什么地方? Ya ha!我是ChiuYut!这里是我的小破站!