编译安装php,nginx,mysql,mariadb。
一:编译安装PHP7.4
我的服务器是阿里云的centos7.8
1:下载PHP源码包
一般我都是从官方网站下载:https://php.net
当然,我是直接在服务器上下载的:
mkdir -p /usr/local/download
cd /usr/local/download
wget https://www.php.net/distributions/php-7.4.11.tar.gz
2:为服务器安装编译环境
我使用的服务器是纯净的环境,没有编译的环境,因此需要安装:
yum -y install gcc gcc-c++ autoconf automake build-essential zlib zlib-devel openssl openssl-devel pcre pcre-devel
3:安装PHP7.4所需要的的编译环境
yum install -y openssl-devel libxml2-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel recode-devel libicu-devel libzip-devel sqlite-devel oniguruma-devel
4:编译安装php7.4
(1):解压刚刚下载的源码包
tar -zxvf php-7.4.11.tar.gz
cd php-7.4.11
(2):编译(指定安装目录)并安装php-fpm
./configure --prefix=/usr/local/php --with-mysql --with-mysqli --with-pdo_mysql --with-iconv-dir --with-zlib --with-libxml-dir --enable-xml --with-curl
--enable-fpm
--enable-mbstring --with-gd --with-openssl --with-mhash --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-bcmath
如上图所示,编译成功
(3):安装
make&&make install
5:简化PHP执行命令
上一步操作中我们已经将PHP安装成功。
在服务器端执行PHP文件格式是这个样子的:
/usr/local/php/bin/php index.php
但是我们使用yum源安装的PHP,在服务器上可以直接使用php命令来执行:
php index.php
在当前登录用户(我是root)家目录下的.bash_profile中添加如下内容:
vim /root/.bash_profile
添加内容:
alias php=/usr/local/php/bin/php
alias phpfpm=/usr/local/php/sbin/php-fpm
修改之后文件内容:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
alias php=/usr/local/php/bin/php
alias phpfpm=/usr/local/php/sbin/php-fpm
重载一下文件:
source /root/.bash_profile
或者创建软连接
ln -s /usr/local/php/bin/php /usr/bin/php74
ln -s /usr/local/php/sbin/php-fpm /usr/bin/php-fpm74
理论上就可以使用php命令来执行PHP文件了
6:启动php-fpm报错解决方案
这里只记录在我安装的时候遇到的错误。
(1):找不到php-fpm.conf文件
[19-Apr-2018 16:02:08] ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)
[19-Apr-2018 16:02:08] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
[19-Apr-2018 16:02:08] ERROR: FPM initialization failed
错误信息说是找不到php-fpm.conf
解决方案:
到php的配置目录
cd /usr/local/php/etc
有一个php-fpm.conf.default的文件,cp复制
cp php-fpm.conf.default php-fpm.conf
编辑 php-fpm.conf
找到以下配置项, 配置如下
pid = /usr/local/php/var/run/php-fpm.pid
再次运行
/usr/local/php/sbin/php-fpm
进入下一个报错、
(2):找不到www.conf配置文件
[root@iZuf60ynur81p6k0ysvtneZ etc]# /usr/local/php/sbin/php-fpm
[13-Oct-2020 18:03:57] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/*.conf' from /usr/local/php/etc/php-fpm.conf at line 145.
[13-Oct-2020 18:03:57] ERROR: No pool defined. at least one pool section must be specified in config file
[13-Oct-2020 18:03:57] ERROR: failed to post process the configuration
[13-Oct-2020 18:03:57] ERROR: FPM initialization failed
解决方案:
进入php安装目录:
/usr/local/php/etc/php-fpm.d
当前目录下有一个www.conf.default文件
cp
www.conf.default
www.conf
再次执行
/usr/local/php/sbin/php-fpm
我的php-fpm便启动成功。
7:php.ini文件
Php编译安装成功之后,是没有php.ini文件的,需要我们从源码包中复制过去。
(1):查询php.ini文件位置
php -i | grep php.ini
[root@iZuf60ynur81p6k0ysvtneZ /]# php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/php/lib
Php.ini文件存放目录在/usr/local/php/lib中
(2):获取php.ini文件
找到了php.ini文件的存放位置,那么php.ini文件在哪获取呢?
进入我们的源码包,我们可以看到:
使用cp命令,将文件复制到指定位置并重命名php.ini
cp /usr/local/download/php-7.4.11/php.ini-development /usr/local/php/lib/php.ini
8:安装php扩展
敲黑板,敲黑板,安装扩展这个很重要。
我们使用php -m 命令可以查看PHP默认为我们安装了那些扩展:
[root@iZuf60ynur81p6k0ysvtneZ /]# php -m
[PHP Modules]
Core
ctype
date
dom
fileinfo
filter
hash
iconv
json
libxml
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
[Zend Modules]
其实,在PHP源码包中,为我们提供了部分的PHP的扩展源码包,这里没有的需要去PHP官网下载。在根目录下的ext目录中,如下图所示:
所以,我们如果需要安装相关的拓展,不需要去别的地方找,源码包啥都给你提供了。
下面,记录一下,我安装gd库扩展的过程:
(1):进入源码包的gd库目录:
cd /usr/local/download/php-7.4.11/ext/gd #这里是我的目录,需要改成你自己的目录
(2): 生成configure