博客 / Linux/ PHP 7 编译配置选项详解与最佳实践

PHP 7 编译配置选项详解与最佳实践

核心配置选项概述

PHP 的 configure 脚本提供了丰富的编译选项,用于在类 Unix 环境下定制 PHP 的构建。这些选项仅在编译时生效,运行时配置需通过 php.ini 文件调整。

要查看所有可用选项,可在 PHP 源代码目录中运行:

./configure --help

以下是对常用配置选项的分类详解。

安装目录配置

这些选项控制 PHP 及其相关文件的安装路径。

  • --prefix=PREFIX:安装架构无关文件的根目录,默认为 /usr/local
  • --exec-prefix=EPREFIX:安装架构相关文件的目录,默认为 PREFIX
  • --bindir=DIR:用户可执行文件目录,默认为 EPREFIX/bin
  • --libdir=DIR:库文件目录,默认为 EPREFIX/lib。在 64 位系统上,可能需要指定为 --with-libdir=lib64
  • --sysconfdir=DIR:只读的单机配置文件目录,默认为 PREFIX/etc

SAPI(服务器 API)模块

SAPI 定义了 PHP 与外部环境的交互方式。

常用 SAPI 选项

  • --enable-fpm:构建 PHP-FPM(FastCGI 进程管理器),适用于 Nginx 等 Web 服务器。
  • --with-fpm-user=USER:设置 php-fpm 运行用户,默认为 nobody
  • --with-fpm-group=GRP:设置 php-fpm 运行组,默认为 nobody
  • --with-fpm-systemd:启用 systemd 集成。
  • --with-apxs2=FILE:构建 Apache 2.0 共享模块。需指定 apxs 工具的路径。
  • --disable-cli:禁用 CLI(命令行界面)版本的构建。
  • --disable-cgi:禁用 CGI 版本的构建。自 PHP 5.3.0 起,此选项会启用 FastCGI。

常规设置

  • --enable-debug:启用调试符号,便于问题排查。
  • --with-config-file-path=PATH:设置 php.ini 的搜索路径,默认为 PREFIX/lib
  • --with-config-file-scan-dir=PATH:设置额外配置文件扫描目录。
  • --disable-short-tags:默认禁用短标签 <?,推荐启用以提高代码可移植性。
  • --enable-opcache:启用 Zend OPcache 字节码缓存,强烈建议在生产环境中启用

扩展模块配置

PHP 扩展可以静态编译或构建为共享模块(.so 文件)。使用 =shared 后缀可构建为共享扩展。

常用扩展选项示例

--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-openssl
--with-zlib
--enable-mbstring
--enable-bcmath
--enable-calendar
--enable-ftp
--with-curl
--with-gd
--enable-exif
--enable-intl
--with-xsl
--enable-zip

关键说明

  • MySQL 驱动:推荐使用 mysqlnd(MySQL Native Driver),它通常内置于 PHP 源码中,无需外部库。
    --with-mysqli=mysqlnd
    --with-pdo-mysql=mysqlnd
  • GD 库:如需图像处理功能,需启用 GD 并指定相关库路径。
    --with-gd --with-freetype --with-jpeg --with-png
  • 共享扩展:若希望扩展能单独启用/禁用,可构建为共享模块。
    --with-zlib=shared

编译优化与线程安全

  • --enable-maintainer-zts:启用线程安全(ZTS)。仅当您需要将 PHP 嵌入到多线程应用(如某些 Apache MPM 模式)或构建线程安全的扩展时才需启用。 大多数 CLI 或 FPM 环境无需此选项。
  • --disable-inline-optimization:如果编译 zend_execute.lo 失败,可尝试此选项。

环境变量

编译时可通过环境变量传递参数给工具链:

  • CFLAGS:C 编译器标志,如优化级别 -O2
  • CPPFLAGS:预处理器标志,如指定头文件路径 -I/usr/local/include
  • LDFLAGS:链接器标志,如指定库路径 -L/usr/local/lib

典型编译配置示例

以下是一个适用于生产环境 PHP 7.4+ 的通用配置示例,包含常用扩展并启用了 OPcache:

./configure 
    --prefix=/usr/local/php 
    --with-config-file-path=/usr/local/php/etc 
    --enable-fpm 
    --with-fpm-user=www-data 
    --with-fpm-group=www-data 
    --enable-opcache 
    --with-mysqli=mysqlnd 
    --with-pdo-mysql=mysqlnd 
    --with-openssl 
    --with-zlib 
    --enable-mbstring 
    --enable-bcmath 
    --with-curl 
    --with-gd 
    --with-jpeg 
    --with-freetype 
    --enable-exif 
    --with-zip 
    CFLAGS="-O2"

注意:实际配置应根据服务器已安装的库和项目需求进行调整。编译前请确保已安装所有必要的开发包(如 libxml2-devlibssl-dev 等)。

发表评论

您的邮箱不会公开。必填项已用 * 标注。