安装-PHP

Posted jasonzhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安装-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/下

 

以上是关于安装-PHP的主要内容,如果未能解决你的问题,请参考以下文章

如何编译安装PHP扩展

php 怎么安装扩展

LNMP编译安装之php安装--图文详解

安装PHP5与安装PHP7

Docker 编译安装php7.3

linux的php安装目录在哪