编译安装 PHP 8.1 开启 ZTS(线程安全)

主要是前几天在搞一个小东西的适合发现安装的 PHP 扩展需要开 ZTS,然后就得重新安装一遍了,所以写一下随便把编译安装的步骤也写下来,这份操作是在 Ubuntu 系统上完成的。

下载 PHP8.1 安装包并且解压 php

wget https://www.php.net/distributions/php-8.1.5.tar.gz
tar -zxvf php-8.1.5.tar.gz
cd php-8.1.5

这里就是先下载然后解压,进入到目录里面准备编译安装 php。

配置 makefile

./configure --prefix=/usr/local/php8.1 --with-config-file-path=/usr/local/php8.1 --with-config-file-scan-dir=/usr/local/php8.1/etc/php.d --enable-fastcgi --disable-fileinfo --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --enable-ftp --with-gd --enable-gd-native-ttf --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-pear --with-gettext --enable-calendar --with-openssl --with-mcrypt --enable-zts

这里就是配置一下你要安装 php 的 makefile 然后等下才能顺利安装,需要注意的是上面的指令是有开 ZTS 线程安全 的,如果不需要开 ZTS 的话把 --enable-zts 删掉就行。如果这里卡住了通常都是一些包没有安装好或者太旧了,如果没安装的话可能需要百度一下看一下那个包的名字,太旧了的话建议就是运行这个指令之前先运行一次:

sudo apt-get upgrade

make 安装 php

sudo make && make install

这里就是需要最长时间等待的地方了,有时候会安装到一般然后断掉,需要详细判断原因,我安装的适合碰到的问题就是内存太小了,编译的时候跑光了,所以还得多加点 Swap 内存,详细可以看这篇文章

复制 php.ini 文件并且添加 php 程序档案软连接

cp ./php.ini-production /usr/local/php8.1/etc/php.ini
ln -s /usr/local/php8.1/bin/php /usr/bin/php

第一个指令就是复制我们的 php.ini 文件到指定的 php 配置目录下面,第二个指令就是创建一个软连接把 php 的执行档案 /usr/local/php8.1/bin/php 到我们的运行目录 /usr/bin/php 下,当然我们也可以通过添加 PATH 的形式实现,但是这里就不多说了。

检查 PHP 版本以及是否有开启 ZTS

php -v # 查看 PHP 版本
php -i | grep Thread

第一个就是检查 PHP 版本的指令,如果成功的话会看到下面的 php 头信息

PHP 8.1.5 (cli) (built: Apr 27 2022 09:11:27) (ZTS)
Copyright (c) The PHP Group
Zend Engine v4.1.5, Copyright (c) Zend Technologies

第二个就是查看是否有开启 ZTS 线程安全的,如果有的话会看到下面的 php 输出信息

Thread Safety => enabled
Thread API => POSIX Threads

如果没有开启的话应该就是

Thread Safety => disabled