Yum 安装PHP7.2

本文介绍一种比较便捷的安装PHP环境的方法-yum安装,这种安装方式相比源码安装PHP,更加方便快捷。
使用yum安装PHP的前提是分清本身操作系统版本和想安装的PHP版本,版本的匹配和镜像源兼容是环境安装成功的关键。

本文以centos7和PHP7.2,没有安装过PHP环境的一台服务器为例来说明。

epel 源

epel 是 Extra Packages for Enterprise Linux (EPEL),网上相关资料提示 更新yum源,就是基于epel的。

参考网址 https://fedoraproject.org/wiki/EPEL#Quickstart

yum源.png

首先我们先把PHP环境下需要创建的用户创建完成

创建用户和组

groupadd php-fpm
groupadd nginx
groupadd mysql
useradd -g php-fpm php-fpm
useradd -g nginx nginx
useradd -g mysql mysql

通过yum方式安装PHP

第一步依然是寻找适合的版本

yum search php72

如图所示,命令会列出所有与php7.2相关的扩展,模块名称和模块说明依次罗列了出来。基本扩展fpm,pdo,mongodb,都在这里可以找到。

yumphp72.png

通过 yum install 模块名称,来安装所需要的模块

php72w-common.x86_64y
Installed:
  php72w-common.x86_64 0:7.2.21-1.w7 

yum install php72w-cli.x86_64

Installed:
php72w-cli.x86_64 0:7.2.21-1.w7

Dependency Installed:
libargon2.x86_64 0:20161029-3.el7

php72w-fpm.x86_64 : PHP FastCGI Process Manager

Running transaction
Installing : php72w-fpm-7.2.21-1.w7.x86_64 1/1
Verifying : php72w-fpm-7.2.21-1.w7.x86_64 1/1

Installed:
php72w-fpm.x86_64 0:7.2.21-1.w7

php72w-mysql.x86_64 : A module for PHP applications that use MySQL databases

Installed:
php72w-mysql.x86_64 0:7.2.21-1.w7

Dependency Installed:
php72w-pdo.x86_64 0:7.2.21-1.w7

yum install php72w-devel.x86_64

php72w-bcmath.x86_64 : A module for PHP applications for using the bcmath library

php72w-cli.x86_64 : Command-line interface for PHP

php72w-common.x86_64 : Common files for PHP

php72w-dba.x86_64 : A database abstraction layer module for PHP applications
php72w-devel.x86_64 : Files needed for building PHP extensions

php72w-embedded.x86_64 : PHP library for embedding in applications
php72w-enchant.x86_64 : Enchant spelling extension for PHP applications

php72w-fpm.x86_64 : PHP FastCGI Process Manager

php72w-gd.x86_64 : A module for PHP applications for using the gd graphics library

php72w-imap.x86_64 : A module for PHP applications that use IMAP
php72w-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases
php72w-intl.x86_64 : Internationalization extension for PHP applications
php72w-ldap.x86_64 : A module for PHP applications that use LDAP
php72w-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling

php72w-mysql.x86_64 : A module for PHP applications that use MySQL databases

php72w-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
php72w-odbc.x86_64 : A module for PHP applications that use ODBC databases

php72w-opcache.x86_64 : An opcode cache Zend extension

php72w-pdo.x86_64 : A database access abstraction module for PHP applications

php72w-pdo_dblib.x86_64 : MSSQL database module for PHP

php72w-pear.noarch : PHP Extension and Application Repository framework

php72w-pecl-apcu.x86_64 : APCu - APC User Cache
php72w-pecl-apcu-devel.x86_64 : APCu developer files (header)
php72w-pecl-geoip.x86_64 : Extension to map IP addresses to geographic places

php72w-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer

php72w-pecl-igbinary-devel.x86_64 : Igbinary developer files (header)

php72w-pecl-imagick.x86_64 : Provides a wrapper to the ImageMagick library

php72w-pecl-imagick-devel.x86_64 : Imagick developer files (header)
php72w-pecl-libsodium.x86_64 : Wrapper for the Sodium cryptographic library
php72w-pecl-memcached.x86_64 : Extension to work with the Memcached caching daemon

php72w-pecl-mongodb.x86_64 : PECL package MongoDB driver

php72w-pecl-redis.x86_64 : Extension for communicating with the Redis key-value store
php72w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
php72w-pgsql.x86_64 : A PostgreSQL database module for PHP
php72w-phpdbg.x86_64 : Interactive PHP debugger
php72w-process.x86_64 : Modules for PHP script using system process interfaces
php72w-pspell.x86_64 : A module for PHP applications for using pspell interfaces
php72w-recode.x86_64 : A module for PHP applications for using the recode library
php72w-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices
php72w-soap.x86_64 : A module for PHP applications that use the SOAP protocol

使用yum 方式安装完成的php环境,当然是支持php 命令行常见命令的,比如

查看配置文件基本信息

php  --ini

php7 以后主配置文件和扩展文件是分开的

Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/bcmath.ini,
/etc/php.d/bz2.ini,
/etc/php.d/calendar.ini,
/etc/php.d/ctype.ini,
/etc/php.d/curl.ini,
/etc/php.d/dom.ini,
/etc/php.d/exif.ini,
/etc/php.d/fileinfo.ini,
/etc/php.d/ftp.ini,
/etc/php.d/gd.ini,
/etc/php.d/gettext.ini,
/etc/php.d/gmp.ini,
/etc/php.d/iconv.ini,
/etc/php.d/igbinary.ini,
/etc/php.d/imagick.ini,

查看扩展模块加载情况

通过php -m |grep 模块名称 来查看模块的加载情况

如 查看mongodb的安装情况

[root@10-9-77-82 ~]# php -m  |grep mongodb
mongodb

查看PHP 扩展目录

php-config --extension-dir

pdo_mysql.so 加载错误

在执行 php -ini 时遇到以下错误,提示未能加载mysqli.so和pdo_mysql.so.so

PHP Warning:  PHP Startup: Unable to load dynamic library 'mysqli.so' (tried: /usr/lib64/php/modules/mysqli.so (libmysqlclient.so.18: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mysqli.so.so (/usr/lib64/php/modules/mysqli.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_mysql.so' (tried: /usr/lib64/php/modules/pdo_mysql.so (libmysqlclient.so.18: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/pdo_mysql.so.so (/usr/lib64/php/modules/pdo_mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

加载相关模块,解决加载 mysql.so 报错

yum install php72w-mysql.x86_64

检测验证

php -m |grep mysql

mysql.so.png
php72w-mysql.x86_64 : A module for PHP applications that use MySQL databases
php72w-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases

查找对应的缺失扩展

根据扩展名称查找如下

yum search mbstring

php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php55w-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php56w-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php70w-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php71w-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php72w-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
yum install php72w-mbstring.x86_64

Running transaction
  Installing : php72w-mbstring-7.2.21-1.w7.x86_64                                                                                           1/1 
  Verifying  : php72w-mbstring-7.2.21-1.w7.x86_64                                                                                           1/1 

Installed:
  php72w-mbstring.x86_64 0:7.2.21-1.w7  

编译安装 Nginx

tar -zxvf nginx-1.16.1.tar.gz

./configure --prefix=/usr/local/nginx --user=nginx  --group=nginx  --with-threads   --with-http_ssl_module --with-http_realip_module  --with-http_gzip_static_module --with-http_auth_request_module --with-http_stub_status_module --conf-path=/etc/nginx/conf/nginx.conf . --error-log-path=/var/log/nginx/error.log --sbin-path=/usr/local/nginx/sbin/nginx
Configuration summary
  + using threads
  + using system PCRE library
  + using system OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/etc/nginx/conf"
  nginx configuration file: "/etc/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/var/log/nginx/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"


mkdir -p /etc/nginx/conf
mkdir -p /var/log/nginx/

whereis redis-server

whereis redis-cli

验证nginx 是否成功

.验证Nginx是否开启成功

phpize运行异常

使用pecl install swool 安装扩展 Swool显示如下问题

Can't find PHP headers in /usr/include/php
The php-devel package is required for use of this command.

这个需要 上文中扩展列表的php72w-devel.x86_64模块

php72w-devel.x86_64 : Files needed for building PHP extensions

phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,phpize 是属于php-devel的内容。

遇到这种问题,首先查找phpize位置

which phpize

再次核对当前的php-devel版本

yum info php-devel

Available Packages
Name        : php-devel
Arch        : x86_64
Version     : 5.4.16
Release     : 46.el7
Size        : 602 k
Repo        : base/7/x86_64
Summary     : Files needed for building PHP extensions
URL         : http://www.php.net/
License     : PHP and Zend and BSD
Description : The php-devel package contains the files needed for building PHP
            : extensions. If you need to compile your own PHP extensions, you will
            : need to install this package.
The phpize command is meant to be run at the top level of an extension source dir (this source dir should contain a file name config.m4).

如果通过源码编译的方式 安装PHP ,安装扩展的基本步骤是这样的

$ cd extname
$ phpize
$ ./configure
$ make
# make install

没有源码的情况下,在phpize目录直接执行 phpize命令,就会出现以上,查找不到 config.m4的错误。总结如下

编译php扩展出现错误:Cannot find config.m4

原因:当前目录没在扩展的目录下


再次执行 安装命令

pecl install swool

安装成功

Build process completed successfully
Installing '/usr/lib64/php/modules/swoole.so'
Installing '/usr/include/php/ext/swoole/config.h'
install ok: channel://pecl.php.net/swoole-4.4.4
configuration option "php_ini" is not set to php.ini location
You should add "extension=swoole.so" to php.ini

移除 mariadb

rpm -qa |grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64

rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

什么是 systemctl

systemctl 是一种Linux服务管理的方式

从CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon。

systemctl-centos7.png

systemd的设计目标是,为系统的启动和管理提供一套完整的解决方案。

systemctl是 Systemd 的主命令,用于管理系统

根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统

关于systemctl详细的介绍请移步这里

Systemd 入门教程:命令篇 http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
Systemd 入门教程:实战篇 http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

认识 /usr/lib/systemd/system

对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件,我们cd 到这个目录下,找到php-fpm.service文件,看看内容如下

cd /usr/lib/systemd/system

[root@10-9-77-82 system]# cat php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=notify
PIDFile=/var/run/php-fpm/php-fpm.pid
EnvironmentFile=/etc/sysconfig/php-fpm
ExecStart=/usr/sbin/php-fpm --nodaemonize --fpm-config /etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

以下是systemctl 常用命令

启动服务

systemctl start php-fpm
chmod-php.png
systemctl-php-fpm.png

查看所有启动的服务

systemctl list-units --type=service
systemctl-list.png

如图,我们可以 看到服务名称php-fpm.service 和crond.service

查看服务状态

systemctl status  php-fpm
systemctl-status.png

查找php-fpm的运行用户

首先使用grep 命令查看详情

ps -ef |grep php

centos-php.png

每一行的第一列就是所属用户UID

为了解决问题

The directory is not writable by the Web process: /home/www/basic/web/assets

cat /etc/php-fpm.conf
最后一行有一个包含文件

include=/etc/php-fpm.d/*.conf

cd /etc/php-fpm.d/
ls
cat www.conf

; Start a new pool named 'www'.
[www]

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

chown -R apache assets/

用户是apache

以下 我们以Nginx 和PHP-FPM两个服务为例

查看服务状态

service php-fpm status
php-fpm (pid  25929) is running...

sudo service nginx  status
nginx (pid  25763) is running...

查看服务所属运行用户

使用grep 命令和查看配置文件两种方式

ps -ef |grep nginx
php-grep.png

从命令的结果我们可以跟踪到Nginx 服务的主配置文件 /etc/nginx/nginx.conf,同时每一行的第一列就是服务的所属用户UID

重启系统,服务自动重启

由于权限写入

参考

CentOS7中systemctl的使用与CentOS6中service的区别

CentOS7下PHP&Nginx&Mysql编译安装及sytemd配置

编译Mysql

MySQL的my.cnf文件

通过 PECL 安装 PHP 扩展(以 CentOS7 中安装 swoole 为例)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容