2019-08-21

yum安裝

  1. 添加remi源。

  2. 搜索安裝包和擴(kuò)展包。

    # 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參數(shù)

#幫助
./configure --help
./configure --help | grep ‘xxx’#查找某個(gè)配置項(xiàng)
#基本參數(shù)
--prefix                
#指定php安裝目錄

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

--enable-debug              
#激活調(diào)試模式

--with-apxs2=/usr/bin/apxs  
#apache相關(guān)的配置(這里會(huì)在/usr/lib64/httpd/modules生成libphp5.so 模塊)

--enable-maintainer-zts     
#開啟php的線程安全機(jī)制(Thread Safe Resource Manager(TSRM)/Zend Thread Safety(ZTS))

--enable-embed
#php的嵌入式開發(fā)的場景中。平時(shí)我們把php作為apache的一個(gè)module進(jìn)行編譯,得到libphp5.so,而這個(gè)選項(xiàng)便使php編譯后得到一個(gè)與我們設(shè)定的SAPI相對應(yīng)的結(jié)果。
====================================================
--without-pear --disable-phar
#安裝PHP時(shí),執(zhí)行make命令報(bào)錯(cuò): PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.這個(gè)錯(cuò)誤的意思是,php編譯時(shí)默認(rèn)是會(huì)依賴pear package,而現(xiàn)在pear還沒有安裝,所以編譯會(huì)出問題的。因此需要在configure時(shí)指定參數(shù)--without-pear --disable-phar。指定--without-pear使得php的編譯不再依賴pear package,由于phar是pear的子庫,所以需要—disable-phar把phar這個(gè)模塊也關(guān)掉。
#當(dāng)執(zhí)行make install命令后,再執(zhí)行下面的操作安裝pear包即可。
#wget  http://pear.php.net/go-pear.phar  
#php go-pear.phar
==========================
--enable-fpm       #安裝php-fpm
--with-fpm-systemd #把php-fpm加入到systemctrl管理
#核心擴(kuò)展
--with-pdo-mysql   #開啟mysql pdo擴(kuò)展
--enable-mysqlnd   #使用mysqlnd驅(qū)動(dòng),mysql推薦就是使用此驅(qū)動(dòng)
--with-gd          #開啟gd擴(kuò)展
--enable-mbstring  #開啟mbstring擴(kuò)展
--with-curl        #開啟curl擴(kuò)展
--enable-bcmath    #開啟bcmatch擴(kuò)展
--with-openssl     #開啟openssl擴(kuò)展
--with-libxml      #開啟xml擴(kuò)展

多版本的PHP

多版本管理

重定向命令

#方式一:目前采用的方案。
# 系統(tǒng)變量PATH只包括了/usr/local/bin目錄。
# 把php相關(guān)的命令都鏈接到/usr/local/bin目錄下,方便統(tǒng)一管理。
#1. 把/usr/local/php/bin/目錄下的php相關(guān)命令,重定向到/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相關(guān)命令,重定向到/usr/local/bin/目錄下
ln -sf /usr/local/php/sbin/php-fpm /usr/local/bin/php-fpm

#方式二:
如果不想創(chuàng)建上面的ln,可以直接修改PATH為:
export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH

最終效果:

[圖片上傳失敗...(image-b8b5fa-1566358744636)]

配置php.ini

  • 命令php --ini 可以獲取php加載的php.ini文件路徑。此路徑在安裝PHP時(shí)通過參數(shù)--with-config-file-path指定。

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

  • 安裝PHP后,可以從PHP源碼包中復(fù)制一份php.ini到php --ini命令指定的目錄。

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

  • 關(guān)于php.ini配置文件的備份,見:相關(guān)目錄。

配置php-fpm

  • 啟動(dòng)php-fpm的命令為:

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

  • 目前采用的方案是,不同版本的PHP統(tǒng)一讀取/etc/php-fpm.conf文件。

  • 安裝php后的安裝目錄會(huì)生成php-fpm的配置文件,需要復(fù)制一下:

    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/
    
  • 關(guān)于php-fpm配置文件的備份,見:相關(guān)目錄。

切換 php版本

確保php的相關(guān)命令都鏈接到/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 

# 添加用戶
執(zhí)行命令:
useradd www 

# 創(chuàng)建相關(guān)目錄
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/ 
======================================================================================
# 配置參數(shù)
執(zhí)行命令:
./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
======================================================================================
# 安裝
執(zhí)行命令:
make -j8 && make install

安裝成功會(huì)展示文件路徑,如下圖,可以看到php-7.1.11的安裝路徑中所有的東西都是安裝在/user/local目錄下面,所以一旦要卸載php,直接把php-7.1.11目錄刪除就可以了,非常方便。

[圖片上傳失敗...(image-bc637-1566358744636)]

安裝php7.0.32

參照php7.1.11,只需要把configure命令的--prefix參數(shù)改為--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

相關(guān)路徑

安裝后命令路徑:安裝時(shí)指定的--prefix目錄下的bin目錄,php-fpm位于sbin目錄。

初始的php.ini文件路徑:

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

libphp5.so所在的目錄:

如果搭建的環(huán)境是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 
的時(shí)候有時(shí)候會(huì)說error: xml2-config not found. Please check your libxml2 installation.

這個(gè)時(shí)候就可以用yum命令去安裝
yum install libxml2-devel.x86_64 

PEAR package PHP_Archive not installed

見:configure參數(shù)中--without-pear --disable-phar說明。

configure: error: png.h not found.

如果./configure 中有--with-gd參數(shù)就有可能報(bào)這個(gè)錯(cuò)誤。
需要安裝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擴(kuò)展時(shí),--with-freetype-dir和--with-jpeg-dir選項(xiàng)一直沒有生效

  • gd庫特別難安裝,主要就是jpeg和free type庫的問題。

  • 采用yum方式安裝lib后,--with-freetype-dir和--with-jpeg-dir選項(xiàng)一直沒有生效,--with-freetype-dir和--with-jpeg-dir指定的路徑不知道應(yīng)該指定什么。

  • 后來找到的原因是重新編譯時(shí)需要make clean。

PHP庫

PECL和PEAR的區(qū)別

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

  • PEARPHP的上層擴(kuò)展,PECLPHP的底層擴(kuò)展。它們都是為特定的應(yīng)用提供現(xiàn)成的函數(shù)或者類。

  • PEAR的所有擴(kuò)展都是用純粹的PHP代碼編寫的,用戶在下載到PEAR 擴(kuò)展以后可以直接使用將擴(kuò)展的代碼包含(include)到自己的PHP 文件中使用,如:memcached庫。

    目前PEAR比較少用,已經(jīng)被Composer代替了。

  • PECL是使用C 語言開發(fā)的,需要通過生成一個(gè)so文件(動(dòng)態(tài)鏈接文件)然后在php.ini文件中include對應(yīng)的so文件,如:swoole的安裝。

  • 無論是核心擴(kuò)展或是非核心擴(kuò)展,都屬于PECL。

安裝PEAR包

安裝PEAR(安裝后才會(huì)有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時(shí)執(zhí)行安裝PEAR
如果不用上面這種方式,也可以在編譯php源碼包的時(shí)候安裝(使用--with-pear參數(shù))。

#如果安裝PHP時(shí)不報(bào)錯(cuò)PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.則建議使用方式二。

命令pear

pear              #查看所有pear相關(guān)命令 
pear install xxx  #安裝某個(gè)pear包,安裝后的包放在:/usr/share/pear目錄
======================================
pear list         #列出已經(jīng)安裝的pear包
pear list-channels 
======================================
pear config-show  #查看pear的配置 
pear config-get   #查看某項(xiàng)配置 
pear config-set   #設(shè)置某項(xiàng)配置

安裝PECL包


命令pecl:

pecl                       #查看所有pecl相關(guān)命令 
pecl help
pecl download <擴(kuò)展名-版本> #只下載擴(kuò)展的源碼包
pecl install <擴(kuò)展名-版本>  #安裝pecl包,安裝路徑可以通過pecl config-show查看
======================================
pecl list                        #列出已經(jīng)安裝的pecl包
pecl list-channels 
pecl channel-update pecl.php.net #更新channel
======================================
pecl config-show #查看pecl的配置 
pecl config-get  #查看某項(xiàng)配置 
pecl config-set  #設(shè)置某項(xiàng)配置
pecl config-get download_dir #查看源碼包下載后的保存路徑
======================================

使用pecl命令安裝擴(kuò)展的過程:

  1. pecl官網(wǎng)查找對應(yīng)的擴(kuò)展,獲取該擴(kuò)展的版本信息,一定要安裝適用于當(dāng)前PHP版本的擴(kuò)展。

  2. 執(zhí)行命令:pecl install 擴(kuò)展名安裝擴(kuò)展。此命令會(huì)下載擴(kuò)展源代碼,編譯之,并將 extname.so 安裝到 extension_dir 中。

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

    注意:需要重啟php-fpm才能加載對應(yīng)擴(kuò)展。

  4. 默認(rèn)情況下,pecl 命令不會(huì)安裝標(biāo)記為 alpha 或 beta 狀態(tài)的包。如果沒有 stable 包可用,也可以用以下命令安裝一個(gè) beta 包:pecl install extname-beta

  5. 安裝指定版本的擴(kuò)展庫,使用pecl install 擴(kuò)展名-版本名的方式。如:pecl install mcrypt-1.0.1

Linux下安裝PHP擴(kuò)展(PECL)的方式

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

  1. 源碼安裝PHP時(shí),指定需要安裝的擴(kuò)展。見:PHP手冊-搜索對應(yīng)擴(kuò)展-安裝與配置,如:MySQL的PDO安裝。

  2. 使用pecl命令安裝擴(kuò)展。見:這里

  3. 使用擴(kuò)展的源碼包安裝。見:這里

    • 除非在pecl官網(wǎng)找不到對應(yīng)版本的pecl,否則一般不采用此方式安裝擴(kuò)展。
    • 使用源碼方式安裝擴(kuò)展時(shí),如果存在多個(gè)版本的php,要特別注意phpizephp-config兩個(gè)命令的路徑。
  4. 使用yum安裝。

    • yum install就全都有了。
    • 但是,往往yum安裝擴(kuò)展包是不能安裝最新版本的,得等對應(yīng)的yum倉庫的定期更新,而用源碼安裝的話,你可以直接就用最新的,定制性好。

安裝各種PHP擴(kuò)展

安裝擴(kuò)展時(shí)報(bào)錯(cuò)會(huì)有什么原因?

  • 多個(gè)PHP版本使用源碼方式安裝擴(kuò)展時(shí),確定好phpizephp-config兩個(gè)命令的路徑。
  • 擴(kuò)展的版本是否與當(dāng)前PHP的版本不匹配。擴(kuò)展的版本是否過高或者過低了。
  • 安裝擴(kuò)展前,是否還需要安裝其他依賴包。如:安裝memcached時(shí)就遇到這個(gè)問題。

安裝amqp擴(kuò)展

使用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

安裝擴(kuò)展:

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

安裝memcached擴(kuò)展


前提安裝:

安裝libmemcached(安裝php memcached擴(kuò)展前需安裝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這個(gè)選項(xiàng)一定要加上
6) make && make install

安裝擴(kuò)展:

注意,安裝時(shí)會(huì)要求輸入libmemcached的路徑,輸入/usr/local/libmemcached即可

# 源碼方式安裝
# 安裝memcached-2.2.0.tgz這個(gè)版本沒有問題、安裝memcached-3.0.3.tgz就一直報(bào)錯(cuò),原因是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 #注意,如果安裝了多個(gè)版本的php,這個(gè)phpize的路徑就得注意了
6) ./configure --with-php-config=/usr/local/php/bin/php-config  --with-libmemcached-dir=/usr/local/libmemcached #注意,如果安裝了多個(gè)版本的php,這個(gè)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擴(kuò)展

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擴(kuò)展

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
#暫時(shí)不支持安裝

安裝swoole擴(kuò)展

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

安裝libevent擴(kuò)展

前提安裝:

#安裝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

安裝擴(kuò)展:

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

#php 7.1.11
php7不能采用pecl命令安裝,估計(jì)還沒更新吧。需要參考: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擴(kuò)展

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

安裝yar擴(kuò)展

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

安裝mongodb擴(kuò)展

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

安裝imagick擴(kuò)展

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

安裝擴(kuò)展:

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

安裝SeasLog 擴(kuò)展

#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擴(kuò)展

使用kafka

前提安裝:

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

安裝擴(kuò)展:

#php 7.1.11
pecl install rdkafka-3.1.0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容