# apache2-dev 是为了获取apxs,用户PHP编译安装时生成apache的mod
apt install apache2 apache2-dev
apt install gcc
# 虽然编译安装PHP不需要autoconf,但是后期追加PHP扩展还是需要的(phpize)
apt install autoconf
https://www.php.net/downloads
在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
/usr/lib/apache2/modules/
下可以参考这篇博客:https://www.jianshu.com/p/ec5b225a92b0
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
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
锵锵,安装成功啦~
现在配置好环境变量就可以了,执行如下操作即可:
export PATH=$PATH:/usr/local/php7/bin
source /etc/bash.bashrc
# 进入家目录
cd ~
pwd
php -v
php -i | grep .ini
然后,当我们重启apache2后,回报一个不兼容的错误,如下:
进过百度后知道,原来apache的工作模式不兼容的问题,只要禁用掉mpm_event以及开启mpm_prefork模块就行了,执行以下命令:
a2dismod mpm_event
a2enmod mpm_prefork
systemctl restart apache2
apachectl -tD DUMP_MODULES
还没有结束,因为这样apache是不会识别php文件,只会将其作为普通文本打开,如下:
此时,让apache能够识别php文件就可以了,如下:
AddType application/x-httpd-php .php
a2enmod rewrite
a2enmod headers
systemctl restart apache2