# 下载 php 源码
首先到 www.php.net下 载 php 源码,最新版是 8.3.2 , 那我们就下载最新版本,另外也下载 php-7.4.33 (wordpress 博客只能使用 php7.4)
www.php.net
# 安装编译 php 必要的库
# 使用 yum 安装
首先使用 yum 安装必要的一些库
| yum -y install sqlite-devel \ | |
| libcurl-devel \ | |
| libffi-devel \ | |
| gmp-devel \ | |
| libicu-devel \ | |
| openssl \ | |
| openssl-devel \ | |
| readline-devel \ | |
| net-snmp-devel \ | |
| libzip-devel | 
# 安装 oniguruma
oniguruma 是一个处理正则表达式的库, mbstring 的正则功能需要 oniguruma 的支持,我们需要安装该库.
下载地址:https://github.com/kkos/oniguruma/releases/tag/v6.9.9
下载下来之后解压,然后进入目录,执行编译
| ./configure --prefix=/usr --libdir=/lib64 | |
| make && make install | |
| # 配置动态库的路径 | |
| export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig/ | 
# 到 php 源码目录下执行编译
然后进入到 php 源码目录下进行编译
| ./configure \ | |
| --prefix=/usr/local/php \ | |
| --enable-fpm \ | |
| --with-fpm-user=www \ | |
| --with-fpm-group=www \ | |
| --disable-debug \ | |
| --enable-mysqlnd \ | |
| --with-mysqli=mysqlnd \ | |
| --with-pdo-mysql=mysqlnd \ | |
| --enable-opcache \ | |
| --with-pcre-jit   \ | |
| --with-openssl \ | |
| --with-bz2 \ | |
| --with-iconv \ | |
| --with-zlib \ | |
| --enable-gd \ | |
| --with-jpeg \ | |
| --with-freetype \ | |
| --with-gettext \ | |
| --with-curl \ | |
| --enable-sockets \ | |
| --with-snmp \ | |
| --with-zip \ | |
| --with-zlib \ | |
| --enable-mbstring \ | |
| --disable-rpath \ | |
| --enable-shared  \ | |
| --with-mhash \ | |
| --with-sqlite3 \ | |
| --enable-bcmath \ | |
| --enable-calendar \ | |
| --with-cdb \ | |
| --enable-dom \ | |
| --enable-exif \ | |
| --enable-fileinfo \ | |
| --enable-filter \ | |
| --enable-gd-jis-conv \ | |
| --with-gettext \ | |
| --with-gmp \ | |
| --enable-mbregex \ | |
| --enable-pdo \ | |
| --with-pdo-sqlite \ | |
| --with-readline \ | |
| --enable-session \ | |
| --enable-shmop \ | |
| --enable-xml \ | |
| --enable-simplexml \ | |
| --enable-sockets  \ | |
| --enable-sysvmsg \ | |
| --enable-sysvsem \ | |
| --enable-sysvshm \ | |
| --with-xsl \ | |
| --enable-mysqlnd-compression-support \ | |
| --with-pear \ | |
| --with-ffi \ | |
| --enable-intl \ | |
| CFLAGS="-fPIE" \ | |
| CXXFLAGS="-fPIC" \ | |
| LDFLAGS="-pie" | 
显示如下图片即代表编译检查通过

下面执行 make -j 2 && make install
等待编译安装完成 (大约 15-20 分钟左右)
中途可能会报类似以下这样的错误,在 configure 的时候加入 CFLAGS="-fPIE" CXXFLAGS="-fPIC" LDFLAGS="-pie" 或者 make 的时候不加 -j 参数就好
| /usr/bin/ld: dynamic STT_GNU_IFUNC symbol `mb_utf16be_to_wchar' with pointer equality in `ext/mbstring/libmbfl/filters/mbfilter_utf16.o' can not be used when making an executable; recompile with -fPIE and relink with -pie | |
| collect2: error: ld returned 1 exit status | |
| make: *** [Makefile:313: sapi/cli/php] Error 1 | 
显示如下内容即代表编译安装成功

# 配置 PHP
将 php 的配置文件复制到指定目录
| cp php.ini-development /usr/local/php/lib/php.ini | |
| cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf | |
| cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf | 
修改 /usr/local/php/lib/php.ini 文件,将 data.timezone 修改为 Asia/Shanghai
# 启动 php-fpm
php 的执行文件在 sbin 下的 php-fpm, 直接运行就行了,会默认监听 9000 端口
# 修改 nginx 配置显示 phpinfo 页面
修改 nginx.conf 文件,有一段 php 的配置是被注释的,将注释去掉,并且修改 /scripts/ 为 $DOCUMENT_ROOT , 然后保存退出
| location ~ \.php$ { | |
|     root           html; | |
| fastcgi_pass 127.0.0.1:9000; | |
|     fastcgi_index  index.php; | |
| fastcgi_param SCRIPT_FILENAME $DOCUMENT_ROOT$fastcgi_script_name; | |
|     include        fastcgi_params; | |
| } | 
在 nginx/html 下创建一个 phpinfo.php 文件,内容如下:
| <?php  | |
| phpinfo(); | 
访问浏览器 http://{服务器的ip}/phpinfo.php , 看到如下页面

接下来编译安装 7.4 版本也是一样的流程,只不过需要改一下 www.conf 文件里的 listen, 改成 9001 或者其他端口号即可
# 安装 swoole 及 redis 扩展
安装扩展很容易,可以进入到安装好的 php 目录下,执行 ./bin/pecl install swoole 即可,安装完之后在 php.ini 中添加 extension=swoole.so
redis 扩展同理
# 安装 composer
composer 相当于 node 里的 npm, 重要性不言而喻,所以必须也要装上
首先将 php 加入到环境变量中
| #/etc/profile.d/web.sh | |
| export PATH="/usr/local/php/bin:/usr/local/redis/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/node/bin:$PATH" | 
执行 source /etc/profile 使配置生效
安装 composer, 执行以下 3 条命令即可
| php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" | |
| php composer-setup.php | |
| php -r "unlink('composer-setup.php');" | 
然后将 composer.phar 放到 /usr/local/php/bin 目录下,并重命名为 composer
| mv composer.phar /usr/local/php/bin/composer | 
然后试一试 composer --version
修改 composer 的国内镜像
| composer config -g repo.packagist composer https://packagist.phpcomposer.com | 
# 将 php-fpm 加入到 systemd 服务,并设置开机启动
编写 /etc/systemd/system/php-fpm.service 文件
| #/etc/systemd/system/php-fpm.service | |
| [Unit] | |
| Description=The PHP FastCGI Process Manager | |
| After=network.target | |
| After=nginx.service | |
| [Service] | |
| Type=simple | |
| ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf | |
| ExecReload=/bin/kill -USR2 $MAINPID | |
| ExecStop=/bin/kill -INT $MAINPID | |
| [Install] | |
| WantedBy=multi-user.target | 
执行
| systemctl start php-fpm | |
| systemctl enable php-fpm | 
# 结束
至此,PHP8.3.2 基本的运行环境已经安装完成了,后期再针对服务器对 php 进行优化配置
