centos编译安装PHP

3,356 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情

centos编译安装PHP7.4

我的服务器是阿里云的centos7.8

1:下载PHP源码包

一般我都是从官方网站下载:php.net

1.png

当然,我是直接在服务器上下载的:

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

2.png

如上图所示,编译成功

(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文件了

3.png

6:启动php-fpm报错解决方案

这里只记录在我安装的时候遇到的错误。

(1):找不到php-fpm.conf文件

[19-Apr-2018 16:02:08ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)
 [19-Apr-2018 16:02:08ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
 [19-Apr-2018 16:02:08ERROR: 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文件在哪获取呢?

进入我们的源码包,我们可以看到:

4.png

使用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目录中,如下图所示:

5.png

所以,我们如果需要安装相关的拓展,不需要去别的地方找,源码包啥都给你提供了。

下面,记录一下,我安装gd库扩展的过程:

(1):进入源码包的gd库目录:

cd /usr/local/download/php-7.4.11/ext/gd  #这里是我的目录,需要改成你自己的目录

(2): 生成configure

/usr/local/php/bin/phpize  
#这里是我的目录,需要改成你自己的目录

如下图所示:注意文件的生成时间

6.png

(3):执行编译

./configure --with-php-config=/usr/local/php/bin/php-config --with-jpeg-dir=/usr/local/jpeg/

有的时候会出现如下警告:

creating libtool
appending configuration tag "CXX" to libtool
configure: patching config.h.in
configure: creating ./config.status
config.status: creating config.h

不需要理会他

(4):安装

make&&make install

安装成功之后会返回文件安装位置:

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/

(5):配置php.ini文件,使安装生效

在php.ini中添加

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd.so

修改完成之后

查看php-fpm的进程

ps -aux | grep php-fpm
[root@iZuf60ynur81p6k0ysvtneZ lib]# ps -aux|grep php-fpm
root     14783  0.0  0.3 212116  6244 ?        Ss   Oct13   0:02 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody   14784  0.0  0.3 212116  7448 ?        S    Oct13   0:00 php-fpm: pool www
nobody   14785  0.0  0.3 212116  7444 ?        S    Oct13   0:00 php-fpm: pool www
root     18338  0.0  0.0 112808   968 pts/0    R+   10:01   0:00 grep --color=auto php-fpm

终止php-fpm进程:

Kill 14783

重启php-fpm

/usr/local/php/sbin/php-fpm

使用php -m查看安装模块:

[root@iZuf60ynur81p6k0ysvtneZ lib]# php -m
[PHP Modules]
Core
ctype
date
dom
fileinfo
filter
gd
hash
iconv
json
libxml
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
 
[Zend Modules]

我们发现gd库安装成功。

9:查看已安装的PHP扩展文件

已安装的扩展目录在:/usr/local/php/include/php/ext

7.png

10:设置开机启动

确保rc.local 文件有执行权限,否则,开机启动不生效

vim  /etc/rc.d/rc.local

添加如下内容:

/usr/local/php/sbin/php-fpm

至此 PHP 编译安装完成

有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”