← 返回文章列表

PHP7beta版编译安装笔记

安装环境以centos6.6为例,Web服务器采用Nginx + PHP-FPM的形式,以php-src/作为源代码文件夹。

之前也做过一些这方面的笔记,但总的来说不是很完整。

依赖

  • autoconf 用于生成自动配置程序
  • gcc 用于编译
  • re2c 一个基于c的正则表达解析器,用于php本身的词法分析
  • bison 用于生成语法分析器程序
  • libxml2 libxml2-devel XML和HTML的支持库的开发版
  • openssl openssl-devel 用于php的openssl.so扩展的编译
  • libcurl-devel 用于php的curl.so扩展的编译
  • gd-devel 用于php的gd.so扩展的编译
  • gmp-devel 用于php的gmp.so扩展的编译
  • libmcrypt-devel 用于php的mcrypt.so扩展的编译,yum的epel源
  • mhash-devel 用于php的mhash.so扩展的编译,yum的epel源

yum安装:

yum install autoconf gcc re2c bison libxml2 libxml2-devel openssl openssl-devel libcurl-devel gd-devel gmp-devel libmcrypt-devel mhash-devel

configure文件

通过configure文件进行编译配置,若configure文件不存在,通过buildconf程序生成。

./buildconf

configure文件用于生成Makefile文件,可以查看帮助得知配置项:

./configure --help

一些常用的配置说明如下,详情可查看核心配置选项列表

--prefix                              安装前缀目录,其它相关路径依赖于此,默认[/usr/local]
--exec-prefix=EPREFIX                 执行文件前缀目录,其它相关路径依赖于此,默认[PREFIX]

--bindir=DIR                          用户执行文件(php等)安装目录,默认[EPREFIX/bin]
--sbindir=DIR                         管理员执行文件(如php-fpm)安装目录,默认[EPREFIX/sbin]
--libexecdir=DIR                      program executables [EPREFIX/libexec]
--sysconfdir=DIR                      系统配置文件目录,默认[PREFIX/etc]
--sharedstatedir=DIR                  modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR                   与本机相关的可变文件目录(如log,pid文件) 默认[PREFIX/var]
--libdir=DIR                          库文件目录,默认[EPREFIX/lib]

--with-config-file-path=PATH          php.ini文件位置目录 [PREFIX/lib]
--with-config-file-scan-dir=PATH      配置文件目录,其下的所有ini文件会被包含,可放置php扩展的配置文件,默认无

--with-apxs2=FILE                     apache的apxs程序位置,根据此程序,可编译apache2的module,并放到相应位置
--disable-cli                         禁止cli,有此项会强制不安装pear( --without-pear)

--enable-fpm                          安装php-fpm,程序执行位置为[SBINDIR]
--with-fpm-user=USER                  php-fpm worker的linux用户名. (默认: nobody)
--with-fpm-group=GRP                  php-fpm worker的linux group (默认: nobody)
--with-fpm-systemd                    激活systemd的相关整合程序文件

--with-openssl=DIR                    包含openssl支持,此DIR可不带(只需--with-openssl)(需要OpenSSL>=0.9.6)
--with-curl=DIR                       包含cURL支持,此DIR可不带
--enable-mbstring                     多字节字符串支持
--with-mcrypt=DIR                     包含mcrypt支持,用于加密,需要libmcrypt库,centos需要epel源
--with-gmp=DIR                        GNU MP 多重精度计算支持
--with-mhash=DIR                      安装mhash支持,centos6需要epel源,libmcrypt也需要依赖mhash
--with-gd=DIR                         gd图形处理支持,需要gd-devel
--enable-zip                          包含 Zip 读写支持

--enable-mysqlnd                      mysql native driver 支持
--with-pdo-mysql=DIR                  PDO MySQL支持,DIR 为MySQL 主文件夹路径。无值或mysqlnd为mysqlnd。
--with-mysqli=FILE                    MySQLi支持,FILE是到mysql_config的路径,
                                      没有值或者是mysqlnd,则为MySQL native driver
--with-pdo-pgsql=DIR                  PDO: PostgreSQL support.  DIR is the PostgreSQL base
                                      install directory or the path to pg_config
--without-pdo-sqlite=DIR              PDO: sqlite 3 support.  DIR is the sqlite base
                                      install directory BUNDLED
--with-pgsql=DIR                      Include PostgreSQL support.  DIR is the PostgreSQL
                                      base install directory or the path to pg_config

--disable-opcache                     禁用Zend OPcache支持,用于缓存php脚本解析的opcode,5.5版本后默认集成,
                                      5.4以前需要--enable-opcache声明编译
--with-snmp=DIR                       Include SNMP support

configure使用例子,可以根据自己的需求自行修改:

./configure --prefix=/opt/php7 --enable-fpm --with-openssl --with-curl --enable-mbstring  --with-mcrypt --with-mhash --with-gd --enable-zip --with-gmp    --enable-mysqlnd  --with-pdo-mysql --with-mysqli

通过configure配置可以生一些编译需要的数据,以及替换一些路径信息;还会检测依赖,可以根据提示自己安装所依赖的库。

编译和安装

configure程序后,会生成相应的Makefile文件,此时可通过make命令编译PHP,编译所花的时间较长,请耐心等待:

make

编译完成后,若对编译有不满意,可以清理掉已编译的内容再重新编译:

make clean

将编译好的PHP安装到configure中配置的安装目录,执行下面的命令,可能需要安装目录的权限:

make install 

配置

安装好后,对于上面的编译安装配置,可以找到PHP的安装目录/opt/php7,有PHP的执行文件路径为/opt/php7/bin/php,可查看版本信息:

[root@localhost ~]# /opt/php7/bin/php --version
PHP 7.0.0-dev (cli) (built: Aug  8 2015 08:28:48)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies

可以创建一个链接文件方便php的执行,之后便可以直接使用php而无须全路径,(这里需root权限):

ln -s /opt/php7/bin/php /usr/local/bin/php

可以通过php --ini命令查看php.ini所在位置,如下:

[root@localhost ~]# php --ini
Configuration File (php.ini) Path: /opt/php7/lib
Loaded Configuration File:         (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

可以看到php要加载php.ini的路径为/opt/php7/lib/php.ini,而当前安装好PHP,这个php.ini文件是不存在的。

需要自己从源代码中复制过来,源代码下有php.ini-developmentphp.ini-production两个文件,分别代表开发版和生产环境版的php.ini配置文件,任选一个合适的复制,如:

cp ./php.ini-development /opt/php7/lib/php.ini

之后再执行php --ini可以看到,已加载了相应的配置文件:

[root@localhost ~]# php --ini
Configuration File (php.ini) Path: /opt/php7/lib
Loaded Configuration File:         /opt/php7/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

php-fpm服务操作

php-fpm是一个PHPfastcgi管理和分发程序,运行时作为一个服务进程(daemon)运行,监听一个端口或者unix socket

使用configure程序生成编译配置项时,也会生成一个php-fpm的服务操作shell脚本,位置为php-src/sapi/fpm/init.d.php-fpm,可以将其拷贝出来,加上执行权限,如下:

cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

由于/etc/init.d/的脚本可以直接通过service进行启动和关闭程序,可以有以下两种方式管理php-fpm进程:

#直接shell执行
/etc/init.d/php-fpm status
/etc/init.d/php-fpm start
/etc/init.d/php-fpm stop
/etc/init.d/php-fpm restart

#通过service
service php-fpm status
service php-fpm start
service php-fpm stop
service php-fpm restart

当然现在执行,会提示找不到相应的php-fpm配置文件,这个也需要自己复制:

cp /opt/php7/etc/php-fpm.conf.default /opt/php7/etc/php-fpm.conf
cp /opt/php7/etc/php-fpm.d/www.conf.default /opt/php7/etc/php-fpm.d/www.conf

php-fpm.confwww.confphp-fpm自带的两个默认配置,可以根据需求自行修改。

实际上仔细查看/etc/init.d/php-fpm的脚本内容,可以看到管理php-fpm最根本的操作实际上是:

#启动 --fpm-config选择配置文件 --pid储存pid的文件位置
/opt/php7/sbin/php-fpm --daemonize --fpm-config /opt/php7/etc/php-fpm.conf --pid /opt/php7/var/run/php-fpm.pid

#关闭
kill -QUIT `cat /opt/php7/var/run/php-fpm.pid`

php-fpm启动时还有一些别的参数设置,详情可以通过/opt/php7/sbin/php-fpm --help查看

开启opcache

opcache随着PHP已经编译,但默认的php.ini配置中并没有包含,开启opcache只需要在php.ini中添加:

zend_extension=opcache.so

相关的还有一些ini配置,详情查看php.net >> opcache.configuration

一个推荐的配置(from 风雪之隅):

opcache.enable_cli=1
opcache.memory_consumption=128      //共享内存大小, 这个根据你们的需求可调
opcache.interned_strings_buffer=8   //interned string的内存大小, 也可调
opcache.max_accelerated_files=4000  //最大缓存的文件数目
opcache.revalidate_freq=60          //60s检查一次文件更新
opcache.fast_shutdown=1             //打开快速关闭, 打开这个在PHP Request Shutdown的时候
                                    //    会收内存的速度会提高
opcache.save_comments=0             //不保存文件/函数的注释