yum安裝
添加
remi
源。-
搜索安裝包和擴展包。
# 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參數
#幫助
./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/
。
安裝過程遇到的問題
- 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
的時候有時候會說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
PEAR
是PHP
的上層擴展,PECL
是PHP
的底層擴展。它們都是為特定的應用提供現成的函數或者類。-
PEAR
的所有擴展都是用純粹的PHP
代碼編寫的,用戶在下載到PEAR
擴展以后可以直接使用將擴展的代碼包含(include
)到自己的PHP
文件中使用,如:memcached
庫。目前
PEAR
比較少用,已經被Composer代替了。 PECL
是使用C
語言開發的,需要通過生成一個so
文件(動態鏈接文件)然后在php.ini
文件中include
對應的so
文件,如:swoole的安裝。無論是核心擴展或是非核心擴展,都屬于
PECL
。
安裝PEAR包
安裝PEAR
(安裝后才會有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時執行安裝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
命令安裝擴展的過程:
到
pecl
官網查找對應的擴展,獲取該擴展的版本信息,一定要安裝適用于當前PHP
版本的擴展。執行命令:
pecl install 擴展名
安裝擴展。此命令會下載擴展源代碼,編譯之,并將extname.so
安裝到 extension_dir 中。-
配置php.ini 文件,添加一行:
extension=extname.so
。注意:需要重啟
php-fpm
才能加載對應擴展。 默認情況下,pecl 命令不會安裝標記為 alpha 或 beta 狀態的包。如果沒有 stable 包可用,也可以用以下命令安裝一個
beta
包:pecl install extname-beta
安裝指定版本的擴展庫,使用
pecl install 擴展名-版本名
的方式。如:pecl install mcrypt-1.0.1
Linux下安裝PHP擴展(PECL)的方式
https://www.php.net/manual/zh/install.pecl.php
源碼安裝PHP時,指定需要安裝的擴展。見:
PHP手冊-搜索對應擴展-安裝與配置
,如:MySQL的PDO安裝。使用
pecl
命令安裝擴展。見:這里。-
使用擴展的源碼包安裝。見:這里
- 除非在
pecl
官網找不到對應版本的pecl
,否則一般不采用此方式安裝擴展。 - 使用源碼方式安裝擴展時,如果存在多個版本的
php
,要特別注意phpize
和php-config
兩個命令的路徑。
- 除非在
-
使用
yum
安裝。-
yum install
就全都有了。 - 但是,往往
yum
安裝擴展包是不能安裝最新版本的,得等對應的yum
倉庫的定期更新,而用源碼安裝的話,你可以直接就用最新的,定制性好。
-
安裝各種PHP擴展
安裝擴展時報錯會有什么原因?
- 多個
PHP
版本使用源碼方式安裝擴展時,確定好phpize
和php-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
擴展
- http://pecl.php.net/package/memcached
- http://www.cnblogs.com/dyllove98/archive/2014/11/27/4126840.html
前提安裝:
安裝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