CentOS7 下源代码安装php7

绪:配置选项讲解:./configure --help | less

使用--enable-NAME--disable-NAME开关编译哪些扩展和SAPI .

如果扩展或SAPI具有外部依赖关系,则需要使用--with-NAME--without-NAME.

如果NAME所需的库 不在默认位置(例如,因为您自己编译),则可以使用--with-NAME = DIR指定其位置.

如果选项是--enable-NAME--with-NAME说明该选项默认是关闭的.如果是--disable-NAME--without-NAME说明该选项默认是开启的.

引用链接

  • enable 是启用 PHP 源码包自带,但是默认不启用的扩展,比如 ftp 和 exif 扩展。with 是指定扩展依赖的资源库的位置,如果是默认位置,就可以留空。
  • php 的扩展分为静态编译和动态编译两种,静态编译就是随着PHP的源码一起编译安装,也就是 --enable 和 --with 启用的扩展。动态编译就是在一个已经可以使用的 PHP 环境下,使用 phpize 命令来给 php 增加扩展的方式,这种方式就是生成的 so 文件。所以想要把扩展编译进 php 内核,就需要和 php 一起编译安装。
  • php源码包ext目录下的就是官方默认支持的扩展,还有一部分就是 pecl 库里的扩展,pecl 的一部分扩展也是官方支持的,另一部分是第三方开发者支持的。
  • 把扩展跟随php一起编译安装,也就是 configure 命令
比如 configure 命令行可能看起来象这样:

$ ./configure --prefix=/where/to/install/php --enable-debug --enable-maintainer-zts --enable-cgi --enable-cli --with-mysql=/path/to/mysql

 

一、安装PHP7:
安装php:
tar zxvf php-7.1.2.tar.gz
cd php-7.1.2
./configure --prefix=/usr/local/php71 \
 --with-curl \
 --with-freetype-dir \
 --with-gd \
 --with-gettext \
 --with-iconv-dir \
 --with-jpeg-dir \
 --with-kerberos \
 --with-libdir=lib64 \
 --with-libxml-dir \
 --with-mysqli \
 --with-openssl \
 --with-pcre-regex \
 --with-pdo-mysql \
 --with-pdo-sqlite \
 --with-pear \
 --with-png-dir \
 --with-xmlrpc \
 --with-xsl \
 --with-zlib \
 --with-bz2 \
 --with-mhash \
 --with-fpm-user=www \
 --with-fpm-group=www \
 --enable-fpm \
 --enable-bcmath \
 --enable-libxml \
 --enable-inline-optimization \
 --enable-gd-native-ttf \
 --enable-mbregex \
 --enable-mbstring \
 --enable-opcache \
 --enable-pcntl \
 --enable-shmop \
 --enable-soap \
 --enable-sockets \
 --enable-sysvsem \
 --enable-sysvshm \
 --enable-xml \
 --enable-zip \
 --with-apxs2=/usr/local/apache24/bin/apxs

make
make install
 
最后到php的解压目录复制一下php的配置文件
#cp php.ini-development /usr/local/php71/lib/php.ini 
因为默认配置文件目录为 Configuration File (php.ini) Path     /usr/local/php/lib
 
目前apache 还无法加载PHP解析模块
vim /usr/local/apache/conf/httpd.conf
在最下面加入一行AddHandler application/x-httpd-php .php
重启Apache服务,然后写一个简单的检测文件吧。
<?php
    phpinfo();
?>
把PHP加入环境变量
 
遇到的问题:

Sorry, I cannot run apxs. Possible reasons follow:

1. Perl is not installed

2. apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs

3. Apache was not built using --enable-so (the apxs usage page is displayed)

首先:看是是否安装  perl -v

若没有 则 wget  http://www.cpan.org/src/5.0/perl-5.16.1.tar.gz

tar  xzvf  perl-5.16.1.tar.gz

cd  perl-5.16.1.tar.gz

./Configure -des -Dprefix=/usr/local/perl

make

make install

然后,若有安装perl :

1、根据不能run apxs 。cd 到apache的bin目录下运行./apxs 运行结果

bash: ./apxs: /replace/with/path/to/perl/interpreter: bad interpreter: No such file or directory

2、vim apxs文件 找“/replace/with/path/to/perl/interpreter”关键字

在第一个行 :#!/replace/with/path/to/perl/interpreter -w

根据perl的安装目录 /usr/bin/perl

修改为:#! /usr/bin/perl -w

 
configure: error: libxml2 not found. Please check your libxml2 installation.
yum install libxml2-devel -y
 
configure: error: Cannot find OpenSSL's <evp.h>
yum install openssl-devel -y
 
configure: error: cURL version 7.10.5 or later is required to compile php with cURL support
yum install curl-devel -y
 
configure: error: png.h not found.
yum install libpng-devel -y
 
configure: error: freetype-config not found.
yum install freetype-devel -y
 
configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
yum install libxslt-devel -y
 
configure: error: Package requirements (sqlite3 > 3.7.4) were not met
yum install sqlite-devel -y 
 

configure: error: Package requirements (oniguruma) were not met

git clone https://github.com/kkos/oniguruma
cd oniguruma
./configure --prefix=/usr --libdir=/lib64
make && make install

 
 
综上安装php大概需要的扩展:
yum install -y \
libxml2 libxml2-devel \
openssl openssl-devel \
libcurl libcurl-devel \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libmcrypt libmcrypt-devel \
libxslt-devel \
bzip2-devel \
sqlite-devel
 
启动 php-fpm 出现问题:
cd /usr/local/php71
cp etc/php-fpm.conf.default etc/php-fpm.conf
cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf
 

重启 php-fpm

我们在新安装扩展后,是需要重新php-fpm的,已使扩展生效。

最简单粗暴的重新php-fpm的方式是:

先找到php-fpm的进程号,kill 掉,再用/usr/local/php/sbin/php-fpm 这样启动。

其实还有更多温和的方法,就是使用信号。

INT, TERM:立刻终止

QUIT:平滑终止

USR1:重新打开日志文件

USR2:平滑重载所有worker进程并重新载入配置和二进制模块

示例:

php-fpm 关闭:kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

php-fpm 重启:kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

若是要生成php-fpm.pid文件,修改/usr/local/php71/etc/php-fpm.conf文件,默认pid是注释的

 

添加systemctl 命令管理:
vim /lib/systemd/system/php-fpm.service

[Unit]
Description=php-fpm
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/php71/var/run/php-fpm.pid
ExecStart=/usr/local/php71/sbin/php-fpm
ExecReload=/bin/kill -USR2 MAINPID
ExecStop=/bin/kill −INT MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

二、文件解释
 
生成的可执行文件php-fpm在sbin中,其他部分在bin目录下。

其中,php是CLI模式下的PHP脚本执行程序。

PEAR(PHP Extension and Application Repository,PHP扩展与应用库),是PHP官方开源类库,可以使用pear list列出所有已经安装的包。通过pear install可以安装需要的包。

PECL是PHP的扩展库,可以通过PEAR的Package Manager的管理

php-config是输出PHP编译信息的辅助命令。

phpdbg是一个轻量级,具有丰富功能的调试平台。PHP 5.4以上版本支持,比如可以使用它查看opcode

phpdbg的其他功能可以通过phpdbg--help查看。

phpize命令用来动态安装扩展,如果在安装PHP时没有安装某个扩展,可以通过这个命令随时安装。

 

 

参考文档:
https://www.linuxidc.com/Linux/2014-02/96761.htm
 

 

posted @ 2019-02-18 15:11  白開水  阅读(1832)  评论(0编辑  收藏  举报