安装步骤如下
安装必要的软件
yum install -y autoconf automake libtool re2c libxml* openssl* BZip2* libcurl* libjpeg* libpng* libXpm* libzip* zlib* freetype* pcre* flex bison tar get
获取源码
wget -O /data1/source/php-7.3.1.tar.gz http://cn2.php.net/get/php-7.3.1.tar.gz/from/this/mirror
cd /data1/source/
tar zxf php-7.3.1.tar.gz
cd php-7.3.1
编译安装
// php根目录设置为/data1/install/php
// php的配置文件目录为/data/config/php
// php-fpm的配置文件目录为/data/install/php/etc
// php-fpm的可运行文件在源码目录的sapi/fpm下
// php的可执行文件目录为/usr/local/bin
./configure --prefix=/data1/install/php --with-config-file-path=/data1/config/php/ --bindir=/usr/local/bin --sbindir=/user/local/sbin --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-libxml-dir --enable-debug --with-zlib --disable-rpath --enable-sysvsem --with-curl --enable-mbregex --enable-mbstring --enable-zip --enable-soap --with-pear --disable-phar --disable-tokenizer --enable-ftp --with-mysqli --with-pdo-mysql --with-openssl --with-bz2 --with-jpeg-dir --with-webp-dir --with-png-dir --with-xpm-dir --with-freetype-dir --with-mhash --with-iconv-dir --enable-gd-jis-conv --with-gd --enable-sockets --with-pcre-dir --enable-bcmath --enable-pdo
make
make install
安装过程可能遇到的一些问题
如果提示libzip版本需要升级,则安装新版的,
以下是安装1.2.0版本libzip的步骤
yum remove libzip
cd ~
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure && make && make install
如果出现"off_t undefined; check your library configuration"这个错误
在运行一下命令
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf&&ldconfig -v
编译参数详解
[]内的路径表示默认路径
安装目录:
--prefix=PREFIX 指定 php 安装目录 [/usr/local]
--exec-prefix=EPREFIX 指定 php 用户可执行文件安装目录 [PREFIX]
--bindir=DIR 用户可执行文件 [EPREFIX/bin]
--sbindir=DIR 系统管理员可执行文件 [EPREFIX/sbin]
--libexecdir=DIR 程序可执行文件 [EPREFIX/libexec]
--sysconfdir=DIR 只读的单一机器数据目录DIR ,用于存放php.ini之类的服务器配置文件 [PREFIX/etc]
--sharedstatedir=DIR 可改写的体系无关数据目录DIR [PREFIX/com]
--localstatedir=DIR 可改写的单一机器数据目录DIR [PREFIX/var]
--runstatedir=DIR 可改写的每个进程数据目录DIR [LOCALSTATEDIR/run]
--libdir=DIR 对象代码库目录DIR [EPREFIX/lib]
--includedir=DIR PHP的C头文件目录DIR [PREFIX/include]
--oldincludedir=DIR 非gcc的C头文件目录DIR [/usr/include]
--datarootdir=DIR PHP服务器只读的体系无关数据根目录DIR [PREFIX/share]
--datadir=DIR PHP服务器只读的体系无关数据目录DIR [DATAROOTDIR]
--infodir=DIR 信息文档目录DIR [DATAROOTDIR/info]
--localedir=DIR 地区相关数据DIR [DATAROOTDIR/locale]
--mandir=DIR 手册文档目录DIR [DATAROOTDIR/man]
--docdir=DIR 文档根目录 [DATAROOTDIR/doc/PACKAGE]
--htmldir=DIR html文档目录DIR [DOCDIR]
--dvidir=DIR dvi文档目录DIR [DOCDIR]
--pdfdir=DIR pdf文档目录DIR [DOCDIR]
--psdir=DIR ps文档目录DIR [DOCDIR]
交叉编译选项:
--build=BUILD 指定编译工具所在系统的系统类型BUILD [guessed]
--host=HOST 指定HTTP服务器将要进行交叉编译时运行的目标系统类型HOST [BUILD]
--target=TARGET 指定交叉编译所产生的目标代码类型 [HOST]
可选功能和包:
--disable-option-checking 忽略无法识别的--enable/--with选项
--disable-FEATURE 关闭特征选项
--enable-FEATURE[=ARG] 启用特征选项
--with-PACKAGE[=ARG] 使用封装
--without-PACKAGE 禁用封装
--with-libdir=NAME 库文件查找路径设置…/XXX/lib/
--disable-rpath 禁用传递其他运行库搜索路径
--enable-re2c-cgoto 启用-g标志到re2c以使用计算的goto-gcc扩展
--disable-gcc-global-regs 是否启用GCC全局寄存器变量
SAPI模块:
--with-apxs2=FILE 编译共享的apache2.0处理程序的模块。参数是apache apxs工具的路径文件
--disable-cli 编译禁用CLI的PHP版本。这个参数需要–without-pear (this forces –without-pear)
--enable-embed=TYPE 实验性:建立内嵌的SAPI库。参数为shared、static。
--enable-fpm 启用执行FPM的SAPI可执行文件
--with-fpm-user=USER 设置php-fpm运行用户,此处最好和Nginx服务用户统一 [nobody]
--with-fpm-group=GRP 设置php-fpm运行用户组,对于系统用户,此通常应设置为与fpm用户名匹配,此处最好和Nginx服务用户统一 [nobody]
--with-fpm-systemd 激活SystemD集成
--with-fpm-acl 使用POSIX访问控制列表
--with-litespeed 将PHP构建为LiteSpeed模块
--enable-phpdbg 构建PHPDBG
--enable-phpdbg-webhelper 构建phpdbg web sapi支持
--enable-phpdbg-debug 在调试模式下生成phpdbg
--disable-cgi 禁用生成PHP的CGI版本
--with-valgrind=DIR 启用Valgrind支持
普通参数设置:
--enable-gcov 请用GCOV代码覆盖率(仅用于开发人员使用)
--enable-debug 带调试符号的编译
--with-layout=TYPE 显示安装文件的布局。参数为PHP或GNU [PHP]
--with-config-file-path=PATH php.ini文件位置 [PREFIX/lib]
--with-config-file-scan-dir=PATH 扫描配置文件的路径
--enable-sigchild 使用PHP自带的SIGCHLD处理器
--enable-libgcc 启用libgcc的精确链接
--disable-short-tags 默认禁用短形式的<?作为php代码的开始标记
--enable-dmalloc 启用dmalloc(dmalloc是Linux C编程侦测记忆体溢出工具)
--disable-ipv6 禁用IPv6支持
--enable-dtrace 启用dtrace支持
--enable-fd-setsize 设置描述符集的大小
扩展参数:
语法: --with-EXTENSION=[shared[,PATH]] (注:并非所有模块都可编译成共享方式)
下面的例子显示了把foobar编译成共享方式,并指定安装路径为/usr/local/foobar/
例如: –with-foobar=shared,/usr/local/foobar/
--disable-all 关闭默认为启用的所有扩展功能
--disable-libxml 禁用LIBXML支持
--with-libxml-dir=DIR LIBXML安装目录
--enable-ftp 启用ftp支持
--with-openssl=DIR 启用openssl支持
--with-openssl-dir=DIR 指定openssl的安装目录
--with-kerberos=DIR OpenSSL的支持:包括Kerberos
--with-system-ciphers openssl:使用系统默认密码列表而不是硬编码值
--with-pcre-regex=DIR 启用pcre(perl兼容正则表达式)支持
--with-pcre-jit 启用PCRE JIT功能(仅捆绑)
--with-pcre-valgrind=DIR 启用PCRE Valgrind支持。仅限开发人员!
--without-sqlite3=DIR 不包括sqlite3支持。dir是sqlite3安装目录的前缀。
--with-zlib=DIR 启用zlib支持
--with-zlib-dir=<DIR> 定义zlib安装所在的目录
--enable-bcmath 启用bcmatch
--with-bz2=DIR 包含BZip2支持
--enable-calendar 启用日历转换支持
--disable-ctype 禁用ctype功能
--with-curl=DIR 启用cURL支持
--enable-dba 构架捆绑模块的DBA。要建立扩展的共享模块使用–enable-dba=shared参数。
--with-qdbm=DIR 启用QDBM支持
--with-gdbm=DIR 启用GDBM支持
--with-ndbm=DIR 启用NDBM支持
--with-db4=DIR 启用Berkeley DB4支持
--with-db3=DIR 启用Berkeley DB3支持
--with-db2=DIR 启用Berkeley DB2支持
--with-db1=DIR 启用Berkeley DB1支持
--with-dbm=DIR 启用DBM支持
--with-tcadb=DIR 启用TCADB支持
--with-lmdb=DIR 启用LMDB支持
--without-cdb=DIR 启用CDB支持(捆绑方式)
--disable-inifile 启用INI支持(捆绑方式)
--disable-flatfile 启用QDBM支持(捆绑方式)
--disable-dom 禁用DOM支持
--with-libxml-dir=DIR 启用libxml2并指定其安装目录
--with-enchant=DIR 包括Enchant支持.gnu Aspell 1.1.3版或更高版本。
--enable-exif 启用exif(来自图像的元数据)支持
--disable-fileinfo 禁用文件信息支持
--disable-filter 禁用输入过滤支持
--with-pcre-dir 支持及其安装目录
--with-gd=DIR 启用GD支持并指定GD库的安装目录
--with-webp-dir=DIR 指定libwebp的安装目录
--with-jpeg-dir=DIR 指定libjpeg的安装目录
--with-png-dir=DIR 指定libpng的安装目录
--with-zlib-dir=DIR 指定libz的安装目录
--with-xpm-dir=DIR 指定libXpm的安装目录
--with-freetype-dir=DIR 指定FreeType2的安装目录
--enable-gd-jis-conv 启用JIS-mapped日语字体支持
--with-gettext=DIR 包含GNU gettext支持
--with-gmp=DIR 启用GNU MP支持
--with-mhash=DIR 启用mhash支持
--disable-hash 禁用hash支持
--without-iconv=DIR 禁用iconv支持
--with-imap=DIR 包含IMAP支持。指定c-client安装目录
--with-kerberos=DIR 启用kerberos支持并指定其目录
--with-imap-ssl=DIR 启用ssl支持并指定openssl目录
--with-interbase=DIR 启用interbase支持并指定其目录
--enable-intl 支持国际化
--with-icu-dir=DIR 指定可以在哪里找到ICU库和头文件
--disable-json 禁用JavaScript对象顺序话支持
--with-ldap=DIR 包含LDAP支持
--with-ldap-sasl=DIR 包含Cyrus SASL支持
--enable-mbstring 启用多字节字符串的支持
--with-onig=DIR mbstring:使用外部Oniguruma。dir是oniguruma安装前缀。如果未设置dir,将使用捆绑的oniguruma
--disable-mbregex 禁用多字节正则表达式的支持
--disable-mbregex-backtrack 禁用多字节正则表达式回溯检查
--with-mysqli=FILE 包含MySQLi支持。参数为mysql_config的位置。如果没有值或mysqlnd作为文件传递,则将使用mysql本机驱动程序
--enable-embedded-mysqli 启用embedded支持。注意:不适用于MySQL本机驱动程序!
--with-mysql-sock=SOCKPATH 定位mysql的unix 套接字指针。如果未指定,则按默认位置搜索。
--with-oci8=DIR 包含Oracle支持。如果使用Oracle客户端安装则使用–with-oci8=instantclient,/path/to/oic /lib
--with-odbcver=HEX 强制支持传递的ODBC版本。应为十六进制数,默认值为0x0350。使用特殊值0可防止定义显式ODBCver。
--with-adabas=DIR 包含Adabas D支持 [/usr/local]
--with-sapdb=DIR 包含SAP DB支持 [/usr/local]
--with-solid=DIR 包含Solid支持 [/usr/local/solid]
--with-ibm-db2=DIR 包含IBM DB2支持 [/home/db2inst1/sqllib]
--with-empress=DIR 包含empress支持
--with-empress-bcs=DIR 包含Empress本地访问支持。
--with-custom-odbc=DIR 包括用户自定义的ODBC的支持。目录是ODBC安装的主目录。确定定义了CUSTOM_ODBC_LIBS并且在include目录下有 odbc.h的头文件你要在QNX上为Sybase SQL Anywhere定义如下:运行此之前,配置脚本CPPFLAGS="-DODBC_QNX -DSQLANY_BUG" LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc"
--with-iodbc=DIR 包含iODBC支持 [/usr/local]
--with-esoob=DIR 包含Easysoft OOB支持 [/usr/local/easysoft/oob/client]
--with-unixODBC=DIR 包含unixODBC支持 [/usr/local]
--with-dbmaker=DIR 包含DBMaker支持
--disable-opcache 禁用Zend Opcache支持
--disable-opcache-file 禁用基于文件的缓存
--disable-huge-code-pages 禁止将PHP代码页复制到大页中
--enable-pcntl 启用pcntl支持(仅用于CLI和CGI)
--disable-pdo 禁用PHP数据对象支持
--with-pdo-dblib=DIR 启用DBLIB-DB支持,目录为FreeTDS主目录。
--with-pdo-firebird=DIR 启用Firebird支持 [/opt/firebird]
--with-pdo-mysql=DIR 启用PDO:mysql支持
--with-zlib-dir=DIR 设置PDO:MySQL的zlib安装目录
--with-pdo-oci=DIR 设置PDO:Oracle OCI支持。为Oracle安装客户端SDK使用–with-pdo-oci=instantclient,prefix,version参数
--with-pdo-odbc=flavour,dir 启用“flavour”ODBC支持。在dir目录的include和lib目录下查找。“flavour”参数值可以是ibm-db2, unixODBC, generic。如果dir省略,则使用默认值。如果你试图通过generic使用一个如若不支持的驱动程序。为generic ODBC提供的语法格式如下:–with-pdo-odbc=generic,dir,libname,ldflags,cflags。作为共享的编译 后的扩展文件的名一般为pdo_odbc.so
--with-pdo-pgsql=DIR 启用PDO:PostgreSQL支持
--without-pdo-sqlite=DIR 启用SQLite 3支持
--with-pgsql=DIR 启用PostgreSQL支持并指定其软件根目录或者pg_config的路径
--disable-phar 禁用phar支持
--disable-posix 禁用posix-like功能
--with-pspell=DIR 包含PSPELL支持GNU
--with-libedit=DIR 包含libedit readline更换(仅用于CLI和CGI)
--with-readline=DIR (CLI/CGI only)包含readline支持(仅用于CLI和CGI)
--with-recode=DIR 包含recode支持
--disable-session 禁用session支持
--with-mm=DIR 为session存储启用mm支持。
--enable-shmop 启用shmop支持
--disable-simplexml 禁用simpleXML支持
--with-libxml-dir=DIR 启用simpleXML:libXML2支持。
--with-snmp=DIR 包含SNMP支持。
--with-openssl-dir=DIR 包含SNMP:openssl支持
--enable-soap 启用SOAP支持
--with-libxml-dir=DIR 启用SOAP:LIBXML2支持
--enable-sockets 启用sockets支持
--with-sodium=DIR 包含sodium支持
--with-password-argon2=DIR 在密码中包含argon2支持。dir是argon2共享库路径
--enable-sysvmsg 启用sysvmsg支持
--enable-sysvsem 启用系统V信号支持
--enable-sysvshm 启用系统V共享内存支持
--with-tidy=DIR 包含tidy支持
--disable-tokenizer 禁用tokenizer支持
--enable-wddx 启用WDDX支持
--with-libxml-dir=DIR 包含WDDX:libxml2支持
--with-libexpat-dir=DIR 为XMLRPC-EPI启用libexpat(不推荐)
--disable-xml 禁用XML支持
--with-libxml-dir=DIR 启用libxml2支持
--with-libexpat-dir=DIR 启用libexpat支持(不推荐)
--disable-xmlreader 禁用XMLreader支持
--with-libxml-dir=DIR 启用XMLreader的libxml2支持
--with-xmlrpc=DIR 包含XMLRPC-EPI支持
--with-libxml-dir=DIR 启用XMLRPC-EPI:libxml2支持
--with-libexpat-dir=DIR 启用XMLRPC-EPI:libexpat支持(不推荐)
--with-iconv-dir=DIR 启用XMLRPC-EPI:iconv支持
--disable-xmlwriter 禁用XMLWriter支持
--with-libxml-dir=DIR 启用XMLReader:libxml2支持
--with-xsl=DIR 启用XSL支持
--enable-zend-test 启动zend-test扩展
--enable-zip 包含zip读写支持
--with-zlib-dir=DIR 启用zip:zlib支持
--with-pcre-dir ZIP: pcre安装目录
--with-libzip=DIR ZIP: 使用libzip
--enable-mysqlnd 显式启用mysqlnd,将在其他扩展需要时隐式完成
--disable-mysqlnd-compression-support 禁用对mysqlnd中mysql压缩协议的支持
--with-zlib-dir=DIR mysqlnd:设置libz安装前缀的路径
PEAR相关选项:
--with-pear=DIR 安装PEAR目录 [PREFIX/lib/php]
--without-pear 不安装PEAR
ZEND相关选项:
--enable-maintainer-zts 启用线程安全-仅限代码维护者!!
--disable-inline-optimization 如果构建zend_execute.lo失败,请尝试此开关
--disable-zend-signals 是否启用Zend信号处理
Thread Safe Resource Manager线程安全资源管理器相关配置:
--with-tsrm-pth=pth-config 使用GNU PTH
--with-tsrm-st 使用SGI的状态线程
--with-tsrm-pthreads 使用POSIX线程(默认)
Libtool相关配置:
--enable-shared=PKGS 编译共享模块
--enable-static=PKGS 编译静态模块
--enable-fast-install=PKGS 启用快速安装优化方式
--with-gnu-ld 假设C编译器使用GNU ld
--disable-libtool-lock 避免锁死(可能破坏并联的编译)
--with-pic 尝试仅使用PIC或non-PIC对象
--with-tags=TAGS 包括额外的配置
一些有影响的环境变量:
CC C编译器命令
CFLAGS C编译器标志
LDFLAGS 链接器标志
LIBS 要传递给链接器的库
CPPFLAGS C/C++预处理器标志
CPP C预处理器
YACC 另一个编译的编译为使用
YFLAGS 默认情况下将传递给$yacc的参数列表。此脚本将默认yFlags为空字符串,以避免一些make应用程序给出的默认值为“-d”。
CXX C++编译器命令
CXXFLAGS C++编译器标志
CXXCPP C++预处理器