1. 程式人生 > >安裝-PHP

安裝-PHP

yum安裝

新增remi源:

見:軟體安裝&倉庫\2_yum源收集

===================================================================

安裝7.2

搜尋擴充套件:

yum list install "php*" --disablerepo=remi-safe,epel,base --enablerepo=remi-php72

===================================================================

安裝7.0

搜尋擴充套件:

yum list install "php*" --disablerepo=remi-safe,epel,base --enablerepo=remi-php70

===================================================================

安裝5.6

搜尋擴充套件:

yum list install "php*" --disablerepo=remi-safe,epel

 

安裝:

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引數

http://php.net/manual/zh/configure.about.php

幫助

./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相對應的結果。

==========================

--with-pear 安裝pear擴充套件,並指定pear和pecl包的安裝路徑,預設路徑是[prefix]/lib/php

--without-pear --disable-phar

http://www.cnblogs.com/tjxwg/p/3967744.html

安裝5.1.2時,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擴充套件

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

http://pear.php.net/

http://pear.php.net/manual/en/

https://www.ibm.com/developerworks/cn/linux/sdk/php/pear1/index.html

 

安裝PEAR(安裝後才會有pecl和pear命令)

https://pear.php.net/manual/en/installation.getting.php

wget http://pear.php.net/go-pear.phar

php go-pear.phar

安裝完新增命令對映:

ln -sf /usr/local/php/bin/pear /usr/local/bin/pear

ln -sf /usr/local/php/bin/pecl /usr/local/bin/pecl

 

如果不用上面這種方式,也可以在編譯php原始碼包的時候安裝(使用--with-pear引數)

如何使用PEAR包

安裝後,

首先要確保pear包所在目錄已經加入到配置的include_path中:

 

然後直接在php程式碼include對應的php檔案即可。

PEAR命令

http://pear.php.net/manual/en/guide.users.commandline.commands.php

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(找擴充套件的地方)

http://php.net/manual/zh/install.pecl.intro.php

  1. 像redis、memcached、swoole這些擴充套件是不能在安裝php的時候就安裝的(作者沒有把相關擴充套件加入到原始碼包),這個時候就需要另外再去安裝擴充套件了。
  2. 如果用原始碼安裝php的話,有不少的包依賴和擴充套件都得自己去解決和安裝了。用yum就不同,一個yum install就全都有了。當然,往往yum安裝的擴充套件包不能安裝最新的,得等對應的yum倉庫的定期更新,而用原始碼安裝的話,你可以直接就用最新的,定製性好。
  3. 使用tarball方式安裝擴充套件時,如果存在多個版本的php,要特別注意phpize和php-config兩個命令的路徑
  4. 編譯安裝PHP時指定安裝擴充套件。見:PHP手冊-搜尋對應擴充套件-安裝與配置
  5. 使用PECL命令或者使用擴充套件原始碼包的方式安裝。

安裝PHP擴充套件的方式

PECL命令

把PECL擴充套件庫靜態編譯到PHP原始碼包,那麼以後就可以跟核心模組一樣使用configure引數配置安裝模組。

 

pecl 檢視所有pecl相關命令 

pecl install xxx 安裝某個pecl包,安裝後的包放在:/usr/local/php/lib/php/extensions/debug-non-zts-20131226目錄

pecl list 列出已經安裝的pecl包

pecl list-channels

pecl channel-update pecl.php.net 更新channel

pecl config-show 檢視pecl的配置 

pecl config-get 檢視某項配置 

pecl config-set 設定某項配置

使用PECL命令安裝擴充套件?

  1. pecl install 副檔名。此命令會下載擴充套件原始碼,編譯之,並將 extname.so 安裝到 extension_dir 中。
  2. 配置php.ini 檔案,新增一行:extension=extname.so。注意:對於php-fpm,需要重啟才能載入對應擴充套件。
  3. 預設情況下,pecl 命令不會安裝標記為 alpha 或 beta 狀態的包。如果沒有 stable 包可用,也可以用以下命令安裝一個 beta 包:pecl install extname-beta
  4. 安裝指定版本的擴充套件庫,使用pecl install 副檔名-版本名的方式。如:pecl install mcrypt-1.0.1

安裝各種擴充套件

pecl一鍵安裝

vim extension-7.0.32.sh

phpIni=/usr/local/php-7.1.11/lib/php.ini

pecl install redis-3.1.5

pecl install xdebug-2.6.0

pecl install swoole-1.10.3

pecl install yar-2.0.4

pecl install imagick-3.4.3

pecl install yar-2.0.4

pecl install mongodb-1.3.4

pecl install event-2.3.0

安裝時報錯會有什麼原因?

  1. 確定好phpize和php-config兩個命令沒有問題
  2. 擴充套件的版本是否過高或者過低了
  3. 是否安裝某個擴充套件前還需要安裝其依賴包(如:安裝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. 2.       wget  https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz

wget https://launchpad.net/libmemcached/1.0/1.0.17/+download/libmemcached-1.0.17.tar.gz

  1. tar -zxvf libmemcached-1.0.18.tar.gz 
  2. cd libmemcached-1.0.18/
  3. ./configure --prefix=/usr/local/libmemcached --with-memcached        //注意:--with-memcached這個選項一定要加上
  4. make && make install

===============================================================================

安裝memcached擴充套件

(安裝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的路徑就得注意了)

 

  1. ./configure --with-php-config=/usr/local/php/bin/php-config  --with-libmemcached-dir=/usr/local/libmemcached(注意,如果安裝了多個版本的php,這個php-config的路徑就得注意了)
  2. make && make install;

擴充套件安裝成功會有這麼一條記錄。

 

  1. 在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

 

安裝時會要求輸入libmemcached的路徑,輸入/usr/local/libmemcached即可

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

安裝xdebug擴充套件

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

 

pecl install xdebug

 

新增配置:

php 5.6.30:

zend_extension=/usr/local/php-5.6.30/lib/php/extensions/debug-non-zts-20131226/xdebug.so

php 7.1.11:

zend_extension=/usr/local/php-7.1.11/lib/php/extensions/debug-non-zts-20160303/xdebug.so

php 7.2.1

暫時不支援安裝

安裝swoole擴充套件

swoole官網提供的:

https://github.com/LinkedDestiny/swoole-doc/blob/master/01-%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E5%8F%8A%E6%89%A9%E5%B1%95%E5%AE%89%E8%A3%85.md

 

https://github.com/swoole/swoole-src

pecl 官網提供的:

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

 

php 5.6.30:

pecl install swoole-1.9.23

php 7.1.11:

pecl install swoole

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

or

yum install libevent-devel

安裝php libevent 擴充套件

php 5.6.30:

pecl install libevent-0.1.0

extension=libevent.so

===================================

php 7.1.11:

php7不能採用pecl安裝,估計還沒更新吧。參考:這裡

cd /usr/local/src

wget https://github.com/expressif/pecl-event-libevent/archive/master.zip -O pecl-event-libevent.zip

unzip pecl-event-libevent.zip

cd pecl-event-libevent-master/

phpize

./configure --with-php-config=php-config

make && make install

===================================

新增到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

多版本的php

多版本管理

切換 php版本

切換到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

重定向命令

  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

 

  1. 把/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

配置php.ini

php --ini 獲取php載入的php.ini檔案路徑

此路徑可以在安裝php時通過引數--with-config-file-path

 

===================================================================================

安裝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後,會生成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/

當然,你也可以沿用之前使用yum方式安裝的配置檔案。

===================================================================================

關於php-fpm配置檔案的備份,見:相關目錄。

===================================================================================

啟動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目錄刪除就可以了,非常方便。

 

php7.0.32

  1. mv php-7.0.32.tar.gz /usr/local/src/
  2. cd  /usr/local/src/
  3. tar -zxvf php-7.0.32.tar.gz
  4. cd php-7.0.32/

======================================================================================

# 配置引數

執行命令:

參考php7.1.11安裝,改一下--prefix=/usr/local/php-7.0.32/ 即可。

======================================================================================

# 安裝

執行命令:

make -j8 && make install

php5.6.30

http://www.cnblogs.com/brishenzhou/p/6140699.html

  1. mv php-5.6.30.tar.gz /usr/local/src/
  2. cd  /usr/local/src/
  3. tar -zxvf php-5.6.30.tar.gz
  4. cd php-5.6.30/
  5. 配置編譯資訊

./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

6.  make -j8&& make install (安裝完之後,可以選擇性地執行make test,有什麼作用?

安裝成功會展示檔案路徑。可以看到php5.6.30的安裝路徑中所有的東西都是安裝在/user/local目錄下面,所以一旦要解除安裝php,直接把php-5.6.30目錄刪除就可以了,非常方便。而php5.6.12的安裝路徑就比較分散一點了。

 

 

安裝過程遇到的問題

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.

http://blog.csdn.net/lovely_1014/article/details/54023976

如果./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

指定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

/usr/local/bin/php

phpize

/usr/local/bin/phpize

php.ini的路徑(用原始碼方式安裝的php,往往找不到php.ini檔案)

其實是在原始碼的根目錄下就可以找到了。 = =!

php.ini-development or php.ini-production

 

把這些配置檔案複製到

/usr/local/php/lib/php.ini

libphp5.so所在的目錄(make install的結果就是為了生成這麼一個動態連結庫)

如果搭建的環境是lamp,那麼生成的libphp5.so生成在目錄/usr/lib64/httpd/modules/下