PHP 架构和安装扩展的几种方式

PHP 三大模块:

  1. SAPI:接受并处理请求。
  2. Zend Engine:PHP 的核心,负责分析 PHP 代码并转为 opcode,然后在 Zend VM 虚拟机上执行。
  3. PHP 功能函数及扩展层:实现各种功能,例如 curl 通信、连接 MySQL 等。

PHP 中,有以下几种方式添加扩展:

相比通过 yum installapt-get 等各大 Linux 发行版自带的安装方向,源码编译安装略显复杂,但是灵活性也更高,比如要安装 PCNTL 等扩展,就只能通过源码编译安装。

注意:源码编译安装时,只会安装指定的扩展,而好多扩展是默认不安装的。对于常用的数据库驱动、OpenSSL、GD 库等都需要指定。如果安装后发现遗漏,可以重新编译,加上相应的参数可得到驱动程序(Linux 下是 *.so 文件),然后复制到 PHP 的扩展目录(一般是 /usr/local/php/include/php/ext)下,并在 php.ini 配置文件中开启扩展既可以。

通过 yum list php72w-* 可以在 CentOS 中查看可以使用命令安装的扩展。

获取 PHP 源码并解压

下载源码

官网下载

官网下载地址:http://php.net/downloads ,在这个页面选择一个具体的版本,点击后会跳转到选择镜像的页面。我试了一下中国的两个镜像,都挂了,随便点了一个日本的镜像,结果下载成功了。。

Git 下载

可以在 GitHub 上的 PHP 源码仓库PHP 自建的 Git 仓库 下载源码。

解压

tar -zxvf mirror

配置并构建 PHP

核心配置选项列表

简单示例

PHP 初始的配置和安装过程被 configure 脚本中一系列命令行选项控制。可以通过 ./configure --help 命令了解 PHP 所有可用的编译选项及简短解释。

Linux 下安装软件的步骤:

  • ./configure:执行配置选项(例如 --prefix 可以指定安装位置),判断硬件及操作系统平台,生成 Makefile 文件
  • make:编译
  • make install:安装

配置好 PHP 后,便可以开始用 make 命令编译模块和可执行文件。

cd ../php-7.2.12
./configure --prefix=/tdata/soft/php/php-7.2.12
make && make install

执行 ./configure 命令时,可能会因为 Linux 尚未安装某些库而报错,安装即可解决。配置成功后会看到授权信息:

Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+

PHP 源码的 ext 目录中,有大量的扩展:

[root@VM_139_38_centos php-7.2.12]# ls
acinclude.m4 configure.ac libtool modules README.NEW-OUTPUT-API scripts
aclocal.m4 CONTRIBUTING.md LICENSE NEWS README.PARAMETER_PARSING_API server-tests-config.php
appveyor CREDITS ltmain.sh pear README.REDIST.BINS server-tests.php
build ext main php7.spec README.RELEASE_PROCESS snapshot
buildconf EXTENSIONS makedist php7.spec.in README.SELF-CONTAINED-EXTENSIONS stamp-h.in
buildconf.bat footer Makefile php.gif README.STREAMS tests
CODING_STANDARDS generated_lists Makefile.frag php.ini-development README.SUBMITTING_PATCH travis
config.guess genfiles Makefile.fragments php.ini-production README.TESTING TSRM
config.log header Makefile.gcov README.EXT_SKEL README.TESTING2 UPGRADING
config.nice include Makefile.global README.GIT-RULES README.UNIX-BUILD-SYSTEM UPGRADING.INTERNALS
config.status INSTALL Makefile.objects README.input_filter README.WIN32-BUILD-SYSTEM vcsclean
config.sub install-sh missing README.MAILINGLIST_RULES run-tests.php win32
configure libs mkinstalldirs README.md sapi Zend
[root@VM_139_38_centos php-7.2.12]# ls ext/
bcmath dba filter imap mysqli pcre pdo_pgsql recode soap sysvsem xmlrpc
bz2 dom ftp interbase mysqlnd pdo pdo_sqlite reflection sockets sysvshm xmlwriter
calendar enchant gd intl oci8 pdo_dblib pgsql session sodium tidy xsl
com_dotnet exif gettext json odbc pdo_firebird phar shmop spl tokenizer zend_test
ctype ext_skel gmp ldap opcache pdo_mysql posix simplexml sqlite3 wddx zip
curl ext_skel_win32.php hash libxml openssl pdo_oci pspell skeleton standard xml zlib
date fileinfo iconv mbstring pcntl pdo_odbc readline snmp sysvmsg xmlreader

常用的配置选项

PHP 选项

–prefix[=PREFIX]:安装路径的前缀,可以自定义,例如 /tdata/soft/php。指定prefix,可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share,很凌乱。指定 prefix,直接删掉一个文件夹就够了。

–with-config-file-path=PATH:设置 php.ini 的搜索路径。默认为 PREFIX/lib。

–disable-short-tags:默认禁用短形式的开始标签 <? 。

PHP 扩展

每个扩展对应的选项,需要在具体的扩展文档里找。大部分可以安装 PHP 之后再安装。

–enable-mbstring:开启 mbstring 多字节扩展

–with-gd[=DIR]:激活 GD 支持,可以指定扩展位置。编译 GD 库需要libpng 和 libjpeg。建议通过 sudo apt-get install php7.2-gdyum install php72w-gt 安装。

–with-pear:安装 PEAR 扩展。

–with-zip[=DIR]:提供 zip 支持,[DIR]是 ZZIPlib 库安装路径。建议通过 通过 PECL 安装

进程控制扩展:

–enable-pcntl:开启 PCNTL 进程控制扩展,只能编译安装。

网络相关扩展:

–with-openssl[=DIR]:开启 OpenSSL 扩展,可以指定扩展位置

–enable-ftp:开启 FTP 扩展

–with-curl:支持 cURL

–enable-sockets:开启 socket 扩展

–enable-soap:支持 SOAP

–enable-fpm:激活 FPM 支持

数据库扩展:

–with-mysql=mysqlnd

–with-mysqli=mysqlnd

–with-pdo-mysql=mysqlnd

–with-mysql=/usr/bin/mysql_config

–with-mysqli=mysqlnd

–with-pdo-mysql=mysqlnd

配置 PHP

在之前编译的源码包中,找到 php.ini-production,复制到/usr/local/php下,并改名为php.ini:

$ cp php.ini-production /usr/local/php/php.ini

编译安装 PHP 扩展

PHP 安装后,如果还需要安装扩展,可以先看看 PHP 源码的 ext 目录中有没有,有的话直接编译即可。

PHP 默认安装的扩展

执行 ./configure 命令时,如果不指定任何扩展,PHP 会默认安装如下扩展,其他的就需要自己制定了,例如 GD、MySQL、curl、mbstring、bz2、calendar、exif、ftp 等:

[root@VM_139_38_centos php-7.2.12]# /tdata/soft/php/php-7.2.12/bin/php -m
[PHP Modules]
Core
ctype
date
dom
fileinfo
filter
hash
iconv
json
libxml
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter [Zend Modules]

CentOS 通过 yum 命令安装的 PHP:

[root@VM_139_38_centos gd]# php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
json
libxml
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
swoole
tokenizer
xml
zip
zlib [Zend Modules]

PHP 的源码编译安装的更多相关文章

  1. SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...

  2. 源码编译安装 MySQL 5.5.x 实践

    1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...

  3. 烂泥:mysql5.5数据库cmake源码编译安装

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前也写过一篇有关mysql5.0源码编译的文章,该文章为<烂泥:mysql5.0数据库源码编译安装>.但是MySQL自5.5版本以后,就开 ...

  4. Centos7.X 源码编译安装subversion svn1.8.x

    说明:SVN(subversion)的运行方式有两种:一种是基于Apache的http.https网页访问形式:还有一种是基于svnserve的独立服务器模式.SVN的数据存储方式也有两种:一种是在B ...

  5. centos6.5环境源码编译安装mysql5.6.34

    centos6.5环境源码编译安装mysql5.6.34 源码下载地址http://dev.mysql.com/downloads/mysql/5.6.html#downloads 选择Generic ...

  6. centos 6.5源码编译安装subversion 1.8.10

    一.简介 CentOS 6.5的yum源可以安装的SVN客户端版本太低了,1.6.11,所以需要升级到1.8.10,而官网有没有找到1.8.10的安装包,只能选择源码编译安装. 二.安装步骤 参考官网 ...

  7. Linux环境PostgreSQL源码编译安装

    Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...

  8. 总结源码编译安装mysql

    最近在学习源码编译安装LAMP.LNMP时,一直遇到一个难题,就是就是mysql无论怎么源码编译安装,到最后启动服务都提示"Starting MySQL.The server quit wi ...

  9. Linux下源码编译安装rpy2

    R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具.rpy2是Python直接调用R的第三方库,它可以实现使用python读取R的对象.调用R的方法以及Python与R数据结构转换等.这 ...

  10. 源码编译安装 MySQL 5.5.x 实践(转)

    1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...

随机推荐

  1. Python 自定义三方库

    一.注册一个pypi账号 https://pypi.org/ 二.github上创建一个项目 https://github.com/ 三.编写自己的python项目 项目结构(参考):https:// ...

  2. editplus的使用技巧

    数据库sql语句中的 in 后面需要 ('xx','bb')这样的结果,多的话修改起来就比较麻烦,这时候使用editplus 的替换功能就可以实现 ,顶部菜单的 搜索 - > 替换 或者 ctr ...

  3. 04-A的LU分解

    一.矩阵$AB$的逆 $(AB)^{-1}=B^{-1}A^{-1}$,顺序正好相反 二.$A=LU$ 如矩阵: $\left[\begin{array}{ll}{2} & {1} \\ {8 ...

  4. MFC学习笔记1---准备工作

    什么是MFC MFC,全称Microsoft Foundation Classes,微软基础类库,顾名思义,是微软的攻城狮们将一些常用的基础的Windows API 函数用C++的形式封装成类,简化程 ...

  5. 内置的re模块

    re(正则表达式) 字符匹配: 普通字符匹配:re.findall("alex","shfalexjaf"),直接查找符合的字符 元字符:  .  ^ $ * ...

  6. select case语句 is和to用法

    在select case 语句中可以使用关系运算符大于>小于<等于=等关系运算符,需要用关键字IS和TO.用个例子来说明: Private Sub Command1_Click() Dim ...

  7. JavaScript设计模式 样例二 —— 策略模式

    策略模式(Strategy Pattern): 定义:定义了一族算法: 封装了每个算法: 这族的算法可互换代替. 目的:将算法的使用与算法的实现分离开来. 场景:可用来消除大量的条件分支语句. 例:J ...

  8. 计蒜客 蓝桥模拟 I. 天上的星星

    计算二维前缀和,节省时间.容斥定理. 代码: #include <cstdio> #include <cstdlib> #include <cstring> #in ...

  9. pull request的使用

    在git中,不少开发者对自己的提升非常看重,github中的开源项目就是一个非常好的学习资料. github中的开源项目并不是完全正确的,而成为项目贡献者是一件值得骄傲的事情. 所以如何才能对开源项目 ...

  10. eclipse把函数内容折叠的方法

    eclipse 将方法折叠要先启动折叠功能启用方法:Ctrl+ / (小键盘) 或者:右键点击行号左边的空白,弹出的选项中,选择“Folding”下的“Enable Folding”这样启动foldi ...