2019-08-21

yum安装

  1. 添加remi源。

  2. 搜索安装包和扩展包。

    # PHP7.2
    yum list install "php*" --disablerepo=remi-safe,epel,base --enablerepo=remi-php72
    
    # PHP7.0
    yum list install "php*" --disablerepo=remi-safe,epel,base --enablerepo=remi-php70
    
    # PHP5.6
    yum list install "php*" --disablerepo=remi-safe,epel
    
  3. 安装。

    # PHP5.6
    yum install php.x86_64 php-cli.x86_64 php-common.x86_64 php-fpm.x86_64 \
    php-mcrypt.x86_64 php-gd.x86_64 php-mbstring.x86_64 php-mysqlnd.x86_64 php-opcache.x86_64 php-pdo.x86_64 php-pear.noarch php-pecl-http.x86_64 php-pecl-jsonc.x86_64 php-pecl-memcache.x86_64  php-pecl-memcached.x86_64  php-pecl-mongo.x86_64   php-pecl-redis.x86_64 php-pecl-swoole.x86_64 php-pecl-xdebug.x86_64 php-process.x86_64 php-xml.x86_64 php-pecl-amqp.x86_64   php-bcmath.x86_64  php-pecl-event.x86_64  --enablerepo=remi-php56,remi
    

源码安装

configure参数

#帮助
./configure --help
./configure --help | grep ‘xxx’#查找某个配置项
#基本参数
--prefix                
#指定php安装目录

--with-config-file-path 
#指定配置文件(php.ini)所在目录,如:--with-config-file-path=/usr/local/php/etc

--enable-debug              
#激活调试模式

--with-apxs2=/usr/bin/apxs  
#apache相关的配置(这里会在/usr/lib64/httpd/modules生成libphp5.so 模块)

--enable-maintainer-zts     
#开启php的线程安全机制(Thread Safe Resource Manager(TSRM)/Zend Thread Safety(ZTS))

--enable-embed
#php的嵌入式开发的场景中。平时我们把php作为apache的一个module进行编译,得到libphp5.so,而这个选项便使php编译后得到一个与我们设定的SAPI相对应的结果。
====================================================
--without-pear --disable-phar
#安装PHP时,执行make命令报错: PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.这个错误的意思是,php编译时默认是会依赖pear package,而现在pear还没有安装,所以编译会出问题的。因此需要在configure时指定参数--without-pear --disable-phar。指定--without-pear使得php的编译不再依赖pear package,由于phar是pear的子库,所以需要—disable-phar把phar这个模块也关掉。
#当执行make install命令后,再执行下面的操作安装pear包即可。
#wget  http://pear.php.net/go-pear.phar  
#php go-pear.phar
==========================
--enable-fpm       #安装php-fpm
--with-fpm-systemd #把php-fpm加入到systemctrl管理
#核心扩展
--with-pdo-mysql   #开启mysql pdo扩展
--enable-mysqlnd   #使用mysqlnd驱动,mysql推荐就是使用此驱动
--with-gd          #开启gd扩展
--enable-mbstring  #开启mbstring扩展
--with-curl        #开启curl扩展
--enable-bcmath    #开启bcmatch扩展
--with-openssl     #开启openssl扩展
--with-libxml      #开启xml扩展

多版本的PHP

多版本管理

重定向命令

#方式一:目前采用的方案。
# 系统变量PATH只包括了/usr/local/bin目录。
# 把php相关的命令都链接到/usr/local/bin目录下,方便统一管理。
#1. 把/usr/local/php/bin/目录下的php相关命令,重定向到/usr/local/bin/目录下
ln -sf /usr/local/php/bin/php /usr/local/bin/php && \
ln -sf /usr/local/php/bin/php-config /usr/local/bin/php-config && \
ln -sf /usr/local/php/bin/phpize /usr/local/bin/phpize && \
ln -sf /usr/local/php/bin/php-cgi /usr/local/bin/php-cgi && \
ln -sf /usr/local/php/bin/pecl /usr/local/bin/pecl && \
ln -sf /usr/local/php/bin/pear /usr/local/bin/pear

#2. 把/usr/local/php/sbin/目录下的php相关命令,重定向到/usr/local/bin/目录下
ln -sf /usr/local/php/sbin/php-fpm /usr/local/bin/php-fpm

#方式二:
如果不想创建上面的ln,可以直接修改PATH为:
export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH

最终效果:

[图片上传失败...(image-b8b5fa-1566358744636)]

配置php.ini

  • 命令php --ini 可以获取php加载的php.ini文件路径。此路径在安装PHP时通过参数--with-config-file-path指定。

  • 目前采用的方案是,不同版本的PHP读取各自版本的php.ini文件。

  • 安装PHP后,可以从PHP源码包中复制一份php.ini到php --ini命令指定的目录。

    如:cd /usr/local/src/php-5.6.30/ && cp php.ini-development /usr/local/php/lib/php.ini

  • 关于php.ini配置文件的备份,见:相关目录。

配置php-fpm

  • 启动php-fpm的命令为:

    php-fpm -y /etc/php-fpm.conf -c /usr/local/php/lib/php.ini

  • 目前采用的方案是,不同版本的PHP统一读取/etc/php-fpm.conf文件。

  • 安装php后的安装目录会生成php-fpm的配置文件,需要复制一下:

    cp   /usr/local/php-7.1.11/etc/php-fpm.conf.default   /etc/php-fpm.conf
    cp -r  /usr/local/php-7.1.11/etc/php-fpm.d/         /etc/
    
  • 关于php-fpm配置文件的备份,见:相关目录。

切换 php版本

确保php的相关命令都链接到/usr/local/bin目录

#切换到php-7.2.1
rm -f /usr/local/php && ln -sf /usr/local/php-7.2.1/ /usr/local/php
killall php-fpm && php-fpm -y /etc/php-fpm.conf -c /usr/local/php/lib/php.ini
=======================================================================
#切换到php-7.1.11
rm -f /usr/local/php && ln -sf /usr/local/php-7.1.11/ /usr/local/php
killall php-fpm && php-fpm -y /etc/php-fpm.conf -c /usr/local/php/lib/php.ini
=======================================================================
#切换到php-7.0.32
rm -f /usr/local/php && ln -sf /usr/local/php-7.0.32/ /usr/local/php
killall php-fpm && php-fpm -y /etc/php-fpm.conf -c /usr/local/php/lib/php.ini
=======================================================================
#切换到php-5.6.30
rm -f /usr/local/php && ln -sf /usr/local/php-5.6.30/ /usr/local/php
killall php-fpm && php-fpm -y /etc/php-fpm.conf -c /usr/local/php/lib/php.ini

安装PHP的前提操作

#安装lib
yum install -y \
libxml2-devel.x86_64 \
libpng libpng-devel libjpeg-turbo libjpeg-turbo-devel freetype freetype-devel gd \
libmcrypt  libmcrypt-devel \
postgresql-devel 

# 添加用户
执行命令:
useradd www 

# 创建相关目录
mkdir /var/log/php-fpm/
chown www:www /var/log/php-fpm/

安装php7.1.11

1.  mv php-7.1.11.tar.gz /usr/local/src/
2.  cd  /usr/local/src/
3.  tar -zxvf php-7.1.11.tar.gz
4.  cd php-7.1.11/ 
======================================================================================
# 配置参数
执行命令:
./configure --prefix=/usr/local/php-7.1.11/ \
./configure --prefix=/usr/local/php-7.0.32/ \
--enable-fpm --with-fpm-user=www --with-fpm-group=www --with-fpm-systemd=no \
--enable-debug \
--enable-mysqlnd --with-mysqli --with-pdo-mysql  --with-pdo-pgsql \
--enable-pcntl \
--enable-sysvsem --enable-sysvshm --enable-sysvmsg \
--with-gd --with-zlib --with-png-dir --with-jpeg-dir --with-freetype-dir \
--enable-zip \
--enable-mbstring \
--with-curl \
--enable-bcmath \
--with-openssl  \
--enable-sockets \
--enable-soap \
--with-mcrypt \
--with-pear
======================================================================================
# 安装
执行命令:
make -j8 && make install

安装成功会展示文件路径,如下图,可以看到php-7.1.11的安装路径中所有的东西都是安装在/user/local目录下面,所以一旦要卸载php,直接把php-7.1.11目录删除就可以了,非常方便。

[图片上传失败...(image-bc637-1566358744636)]

安装php7.0.32

参照php7.1.11,只需要把configure命令的--prefix参数改为--prefix=/usr/local/php-7.0.32/即可。

安装php5.6.30

参照php7.1.11,configure配置为:

./configure --prefix=/usr/local/php-5.6.30/ --with-config-file-path=/usr/local/php-5.6.30/lib\
--enable-fpm --enable-debug \
--with-pdo-mysql  --enable-mysqlnd  \
--with-gd --with-zlib --with-png-dir --with-jpeg-dir --with-freetype-dir \
--enable-mbstring --with-curl --enable-bcmath --with-openssl  --enable-pcntl --enable-sockets \
--with-pear

相关路径

安装后命令路径:安装时指定的--prefix目录下的bin目录,php-fpm位于sbin目录。

初始的php.ini文件路径:

#用源码方式安装的php,往往找不到php.ini文件
#在源码的根目录下就可以找到了。
php.ini-development or php.ini-production 

libphp5.so所在的目录:

如果搭建的环境是lamp,那么生成的libphp5.so生成在目录/usr/lib64/httpd/modules/

安装过程遇到的问题

error: xml2-config not found. Please check your libxml2 installation.

./configure --prefix=/usr/local/php/ --enable-debug --enable-maintainer-zts 
的时候有时候会说error: xml2-config not found. Please check your libxml2 installation.

这个时候就可以用yum命令去安装
yum install libxml2-devel.x86_64 

PEAR package PHP_Archive not installed

见:configure参数中--without-pear --disable-phar说明。

configure: error: png.h not found.

如果./configure 中有--with-gd参数就有可能报这个错误。
需要安装libpng和devel
yum install libpng libpng-devel

cURL 7.10.5 or greater... configure: error: cURL version 7.10.5 or later is required to compile php with cURL support

更新libcurl的版本,然后指定curl目录即可--with-curl=/usr/local/bin/curl

安装gd扩展时,--with-freetype-dir和--with-jpeg-dir选项一直没有生效

  • gd库特别难安装,主要就是jpeg和free type库的问题。

  • 采用yum方式安装lib后,--with-freetype-dir和--with-jpeg-dir选项一直没有生效,--with-freetype-dir和--with-jpeg-dir指定的路径不知道应该指定什么。

  • 后来找到的原因是重新编译时需要make clean。

PHP库

PECL和PEAR的区别

http://jingyan.baidu.com/article/e9fb46e1a3eb277521f76619.html

  • PEARPHP的上层扩展,PECLPHP的底层扩展。它们都是为特定的应用提供现成的函数或者类。

  • PEAR的所有扩展都是用纯粹的PHP代码编写的,用户在下载到PEAR 扩展以后可以直接使用将扩展的代码包含(include)到自己的PHP 文件中使用,如:memcached库。

    目前PEAR比较少用,已经被Composer代替了。

  • PECL是使用C 语言开发的,需要通过生成一个so文件(动态链接文件)然后在php.ini文件中include对应的so文件,如:swoole的安装

  • 无论是核心扩展或是非核心扩展,都属于PECL

安装PEAR包

安装PEAR(安装后才会有peclpear命令):

#方式一,安装PHP后再安装PEAR
1. wget http://pear.php.net/go-pear.phar
2. php go-pear.phar
3. 安装完添加命令映射:
ln -sf /usr/local/php/bin/pear /usr/local/bin/pear
ln -sf /usr/local/php/bin/pecl /usr/local/bin/pecl

#方式二,安装PHP时执行安装PEAR
如果不用上面这种方式,也可以在编译php源码包的时候安装(使用--with-pear参数)。

#如果安装PHP时不报错PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.则建议使用方式二。

命令pear

pear              #查看所有pear相关命令 
pear install xxx  #安装某个pear包,安装后的包放在:/usr/share/pear目录
======================================
pear list         #列出已经安装的pear包
pear list-channels 
======================================
pear config-show  #查看pear的配置 
pear config-get   #查看某项配置 
pear config-set   #设置某项配置

安装PECL包


命令pecl:

pecl                       #查看所有pecl相关命令 
pecl help
pecl download <扩展名-版本> #只下载扩展的源码包
pecl install <扩展名-版本>  #安装pecl包,安装路径可以通过pecl config-show查看
======================================
pecl list                        #列出已经安装的pecl包
pecl list-channels 
pecl channel-update pecl.php.net #更新channel
======================================
pecl config-show #查看pecl的配置 
pecl config-get  #查看某项配置 
pecl config-set  #设置某项配置
pecl config-get download_dir #查看源码包下载后的保存路径
======================================

使用pecl命令安装扩展的过程:

  1. pecl官网查找对应的扩展,获取该扩展的版本信息,一定要安装适用于当前PHP版本的扩展。

  2. 执行命令:pecl install 扩展名安装扩展。此命令会下载扩展源代码,编译之,并将 extname.so 安装到 extension_dir 中。

  3. 配置php.ini 文件,添加一行:extension=extname.so

    注意:需要重启php-fpm才能加载对应扩展。

  4. 默认情况下,pecl 命令不会安装标记为 alpha 或 beta 状态的包。如果没有 stable 包可用,也可以用以下命令安装一个 beta 包:pecl install extname-beta

  5. 安装指定版本的扩展库,使用pecl install 扩展名-版本名的方式。如:pecl install mcrypt-1.0.1

Linux下安装PHP扩展(PECL)的方式

https://www.php.net/manual/zh/install.pecl.php

  1. 源码安装PHP时,指定需要安装的扩展。见:PHP手册-搜索对应扩展-安装与配置,如:MySQL的PDO安装。

  2. 使用pecl命令安装扩展。见:这里

  3. 使用扩展的源码包安装。见:这里

    • 除非在pecl官网找不到对应版本的pecl,否则一般不采用此方式安装扩展。
    • 使用源码方式安装扩展时,如果存在多个版本的php,要特别注意phpizephp-config两个命令的路径。
  4. 使用yum安装。

    • yum install就全都有了。
    • 但是,往往yum安装扩展包是不能安装最新版本的,得等对应的yum仓库的定期更新,而用源码安装的话,你可以直接就用最新的,定制性好。

安装各种PHP扩展

安装扩展时报错会有什么原因?

  • 多个PHP版本使用源码方式安装扩展时,确定好phpizephp-config两个命令的路径。
  • 扩展的版本是否与当前PHP的版本不匹配。扩展的版本是否过高或者过低了。
  • 安装扩展前,是否还需要安装其他依赖包。如:安装memcached时就遇到这个问题。

安装amqp扩展

使用Rabbitmq


前提安装:

#安装lib
cd /usr/local/src/
wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.7.1/rabbitmq-c-0.7.1.tar.gz
tar -zxvf rabbitmq-c-0.7.1.tar.gz
cd rabbitmq-c-0.7.1/
./configure --prefix=/usr/local/rabbitmq-c-0.7.1
make -j4 && make install

安装扩展:

pecl install amqp-1.9.3 
#之后如果要填写路径,则填写:/usr/local/rabbitmq-c-0.7.1
extension = amqp.so

安装memcached扩展


前提安装:

安装libmemcached(安装php memcached扩展前需安装libmemcached)
1) cd /usr/local/src
2) wget  https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
3) tar -zxvf libmemcached-1.0.18.tar.gz 
4) cd libmemcached-1.0.18/
5) ./configure --prefix=/usr/local/libmemcached --with-memcached #注意:--with-memcached这个选项一定要加上
6) make && make install

安装扩展:

注意,安装时会要求输入libmemcached的路径,输入/usr/local/libmemcached即可

# 源码方式安装
# 安装memcached-2.2.0.tgz这个版本没有问题、安装memcached-3.0.3.tgz就一直报错,原因是3.0版本开始都是需要php7的
1) mv  -t /usr/local/src/ memcached-2.2.0.tgz
2) cd /usr/local/src/
3) tar -zxvf memcached-2.2.0.tgz
4) cd memcached-2.2.0
5) /usr/local/php/bin/phpize #注意,如果安装了多个版本的php,这个phpize的路径就得注意了
6) ./configure --with-php-config=/usr/local/php/bin/php-config  --with-libmemcached-dir=/usr/local/libmemcached #注意,如果安装了多个版本的php,这个php-config的路径就得注意了
7) make && make install;
8) 在php.ini文件中添加一条extension=memcached.so的记录

# 使用pecl安装
#php 5.6.30:
pecl install memcached-2.2.0
extension=memcached.so

#php 7.1.11:
pecl install memcached
extension=memcached.so

安装redis扩展

http://pecl.php.net/package/redis

#php 5.6.30:
pecl install redis-2.2.8
extension=redis.so
=======================
#php 7.1.11:
pecl install redis-3.1.5
extension=redis.so

安装xdebug扩展

http://pecl.php.net/package/xdebug

#php 5.6.30:
pecl install xdebug-2.6.0
zend_extension=/usr/local/php-5.6.30/lib/php/extensions/debug-non-zts-20131226/xdebug.so

#php 7.1.11:
pecl install xdebug-2.7.2
zend_extension=/usr/local/php-7.1.11/lib/php/extensions/debug-non-zts-20160303/xdebug.so

#php 7.2.1
#暂时不支持安装

安装swoole扩展

#php 5.6.30:
pecl install swoole-1.9.23
#php 7.1.11:
pecl install swoole-1.10.3

安装libevent扩展

前提安装:

#安装libevnt
#源码方式安装
cd /usr/local/src
wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gz
tar zxvf libevent-2.0.20-stable.tar.gz
cd libevent-2.0.20-stable/
./configure --prefix=/usr/local/libevent/
make && make install

#yum方式安装
yum install libevent-devel

安装扩展:

#php 5.6.30
pecl install libevent-0.1.0 
extension=libevent.so

#php 7.1.11
php7不能采用pecl命令安装,估计还没更新吧。需要参考:https://github.com/expressif/pecl-event-libevent
1) cd /usr/local/src
2) wget https://github.com/expressif/pecl-event-libevent/archive/master.zip -O pecl-event-libevent.zip
3) unzip pecl-event-libevent.zip
4) cd pecl-event-libevent-master/
5) phpize
6) ./configure --with-php-config=php-config
make && make install
7) 添加到php.ini:extension=libevent.so

安装event扩展

#php 7.1.11
pecl install event=2.3.0
extension=event.so

安装yar扩展

#php 7.1.11:
pecl install yar-2.0.4
extension=yar.so

安装mongodb扩展

#php 7.1.11
pecl install mongodb-1.3.4
extension=yar.so

安装imagick扩展

前提安装:yum install -y ImageMagick ImageMagick-devel

安装扩展:

#php 7.1.11
pecl install imagick-3.4.3
extension=imagick.so

安装SeasLog 扩展

#php 7.1.11
pecl install seaslog-2.0.2
extension=seaslog.so

#php 7.0.32
pecl install seaslog-2.0.2
extension=seaslog.so

安装rdkafka扩展

使用kafka

前提安装:

git clone https://github.com/edenhill/librdkafka.git
cd librdkafka
./configure
make && make install

安装扩展:

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

推荐阅读更多精彩内容