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
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
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: Package requirements (oniguruma) were not met
git clone https://github.com/kkos/oniguruma
cd oniguruma
./configure --prefix=/usr --libdir=/lib64
make && make install
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
我们在新安装扩展后,是需要重新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是注释的
[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是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时没有安装某个扩展,可以通过这个命令随时安装。