ubuntu 20.04安装PHP 7.4.32
前提
- 已经安装了apache2
# apache2-dev 是为了获取apxs,用户PHP编译安装时生成apache的mod
apt install apache2 apache2-dev
- 安装了gcc
apt install gcc
- 预先安装了autoconf
# 虽然编译安装PHP不需要autoconf,但是后期追加PHP扩展还是需要的(phpize)
apt install autoconf
- 使用的是腾讯云服务器(Ubuntu 20.04 LTS),环境已经搭建好了的,其他环境依赖就不一一例举了
下载PHP 7.4.32
进入官网下载
https://www.php.net/downloads
下载PHP 7.4.31
在Linux上下载,我一般喜欢使用wget进行下载,当然也可以使用curl -s save_name url
进行下载
sudo su
cd /usr/local/src
# curl -o php-7.4.32.tar.gz https://www.php.net/distributions/php-7.4.32.tar.gz
wget https://www.php.net/distributions/php-7.4.32.tar.gz
解压下载文件
这里我选择的是.tar.gz,也可以选择.tar.bz2和.tar.xz,解压命令如下
.tar.gz
,.tgz
tar -zxvf php-7.4.32.tar.gz
.tar.bz2
,.tbz
tar -jxvf php-7.4.32.tar.gz
.tar.xz
,txz
tar -Jxvf php-7.4.32.tar.gz
安装
进入解压目录,安装检测
依赖
apt install libxml2-dev -y
apt install libsqlite3-dev -y
apt install zlib1g-dev -y
apt install libpng-dev -y
apt install libonig-dev -y
apt install libssl-dev -y
apt install libzip-dev -y
不用安装所有扩展,选择自己要得(ps: 后面可以自己安装扩展的)
cd /usr/local/src/php-7.4.32/
./configure \
--prefix=/usr/local/php7 \
--with-config-file-path=/usr/local/php7/etc \
--with-apxs2=/usr/bin/apxs \
--enable-pcntl \
--enable-gd \
--with-openssl \
--with-mysqli \
--enable-sockets \
--enable-soap \
--enable-mbstring \
--with-curl \
--enable-xml \
--with-zlib \
--enable-fpm \
--with-zip \
--enable-ftp
- 说明
- –prefix
指定安装目录 - –with-config-file-path
指定php.ini目录 - –with-apxs2
指定apache的apsx目录,生成libphp7.so,一般在/usr/lib/apache2/modules/
下 - –enable-pcntl
进程控制,POSIX默认安装 - –enable-gd
gd(Graphics Database)扩展,图形的扩展库 - –enable-openssl
openssl,使用composer要安装这个 - –enable-mysqli
mysqli的扩展 - –enable-sockets
sockets扩展,安装了pcntl必须安装这个 - –enable-soap
SOAP扩展可用于编写SOAP服务器和客户机 - –enable-mbstring
多字节字符串扩展 - –enable-curl
curl - –enable-xml
xml - –enable-fpm
php-cgi - –enable-zlib
读写gzip (.gz)压缩文件,通过使用gzip压缩文件(和未压缩文件,但不使用套接字)的大多数文件系统函数的版本。 - –enable-zip
zip扩展 - –enable-ftp
ftp
- –prefix
检测报错
可以参考这篇博客:https://www.jianshu.com/p/ec5b225a92b0
- No package ‘libxml-2.0’ found
apt install libxml2-dev -y
- No package ‘sqlite3’ found
apt install libsqlite3-dev -y
- No package ‘zlib’ found
apt install zlib1g-dev -y
- No package ‘libpng’ found
apt install libpng-dev -y
- No package ‘oniguruma’ found
apt install libonig-dev -y
- No package ‘openssl’ found
apt install libssl-dev -y
- No package ‘libzip’ found
apt install libzip-dev -y
编译
make -j4
安装
make install
复制配置文件到配置文件目录
cp php.ini-development /usr/local/php7/etc/php.ini
可选
安装完成后,会有一条警告,如下:
似乎是因为:因为之前"./configure"的“--prefix”参数与预期安装的目录不匹配而发出警告
,执行相关命令就可以了
apt install libtool-bin -y
libtool --finish /usr/local/src/php-7.4.32/libs
设置环境
上面的步骤已经安装完成了,可以进入到bin目录查看php的版本号
cd /usr/local/php7/bin
./php -v
锵锵,安装成功啦~
现在配置好环境变量就可以了,执行如下操作即可:
- 编辑/etc/bash.bashrc文件,设置环境变量
export PATH=$PATH:/usr/local/php7/bin
- 使环境变量生效
source /etc/bash.bashrc
- 测试
# 进入家目录
cd ~
pwd
php -v
php -i | grep .ini
重启apache2
然后,当我们重启apache2后,回报一个不兼容的错误,如下:
进过百度后知道,原来apache的工作模式不兼容的问题,只要禁用掉mpm_event以及开启mpm_prefork模块就行了,执行以下命令:
a2dismod mpm_event
a2enmod mpm_prefork
systemctl restart apache2
- 查询启用的所有模块命令
apachectl -tD DUMP_MODULES
还没有结束,因为这样apache是不会识别php文件,只会将其作为普通文本打开,如下:
此时,让apache能够识别php文件就可以了,如下:
- vi /etc/apache2/mods-available/mime.conf
AddType application/x-httpd-php .php
重启apache2后查看:
至此,PHP的安装就结束了
可选:启用其他模块
- 启用rewrite模块
a2enmod rewrite
- 启用headers模块
a2enmod headers
systemctl restart apache2