yum安裝
添加
remi源。-
搜索安裝包和擴(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 -
安裝。
# 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/。
安裝過程遇到的問題
- http://bovin.szecp.com/?p=76 (編譯php遇到的各種問題)
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
PEAR是PHP的上層擴(kuò)展,PECL是PHP的底層擴(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ì)有pecl和pear命令):
#方式一,安裝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ò)展的過程:
到
pecl官網(wǎng)查找對應(yīng)的擴(kuò)展,獲取該擴(kuò)展的版本信息,一定要安裝適用于當(dāng)前PHP版本的擴(kuò)展。執(zhí)行命令:
pecl install 擴(kuò)展名安裝擴(kuò)展。此命令會(huì)下載擴(kuò)展源代碼,編譯之,并將extname.so安裝到 extension_dir 中。-
配置php.ini 文件,添加一行:
extension=extname.so。注意:需要重啟
php-fpm才能加載對應(yīng)擴(kuò)展。 默認(rèn)情況下,pecl 命令不會(huì)安裝標(biāo)記為 alpha 或 beta 狀態(tài)的包。如果沒有 stable 包可用,也可以用以下命令安裝一個(gè)
beta包:pecl install extname-beta安裝指定版本的擴(kuò)展庫,使用
pecl install 擴(kuò)展名-版本名的方式。如:pecl install mcrypt-1.0.1
Linux下安裝PHP擴(kuò)展(PECL)的方式
https://www.php.net/manual/zh/install.pecl.php
源碼安裝PHP時(shí),指定需要安裝的擴(kuò)展。見:
PHP手冊-搜索對應(yīng)擴(kuò)展-安裝與配置,如:MySQL的PDO安裝。使用
pecl命令安裝擴(kuò)展。見:這里。-
使用擴(kuò)展的源碼包安裝。見:這里
- 除非在
pecl官網(wǎng)找不到對應(yīng)版本的pecl,否則一般不采用此方式安裝擴(kuò)展。 - 使用源碼方式安裝擴(kuò)展時(shí),如果存在多個(gè)版本的
php,要特別注意phpize和php-config兩個(gè)命令的路徑。
- 除非在
-
使用
yum安裝。-
yum install就全都有了。 - 但是,往往
yum安裝擴(kuò)展包是不能安裝最新版本的,得等對應(yīng)的yum倉庫的定期更新,而用源碼安裝的話,你可以直接就用最新的,定制性好。
-
安裝各種PHP擴(kuò)展
安裝擴(kuò)展時(shí)報(bào)錯(cuò)會(huì)有什么原因?
- 多個(gè)
PHP版本使用源碼方式安裝擴(kuò)展時(shí),確定好phpize和php-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ò)展
- http://pecl.php.net/package/memcached
- http://www.cnblogs.com/dyllove98/archive/2014/11/27/4126840.html
前提安裝:
安裝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