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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容