2019年11月15日星期五

一键安装最新内核并开启 BBR 脚本

最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。
于是我根据目前三大发行版的最新内核,开发了一键安装最新内核并开启 TCP BBR 脚本。

本脚本适用环境

系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等
内存要求:≥128M
日期  :2018 年 12 月 14 日

关于本脚本

1、本脚本已在 Vultr 上的 VPS 全部测试通过。
2、当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。
3、脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。
4、由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果。

使用方法

使用root用户登录,运行以下命令:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh
安装完成后,脚本会提示需要重启 VPS,输入 y 并回车后重启。
重启完成后,进入 VPS,验证一下是否成功安装最新内核并开启 TCP BBR,输入以下命令:
uname -r
查看内核版本,显示为最新版就表示 OK 了
sysctl net.ipv4.tcp_available_congestion_control
返回值一般为:
net.ipv4.tcp_available_congestion_control = bbr cubic reno
或者为:
net.ipv4.tcp_available_congestion_control = reno cubic bbr
sysctl net.ipv4.tcp_congestion_control
返回值一般为:
net.ipv4.tcp_congestion_control = bbr
sysctl net.core.default_qdisc
返回值一般为:
net.core.default_qdisc = fq
lsmod | grep bbr
返回值有 tcp_bbr 模块即说明 bbr 已启动。注意:并不是所有的 VPS 都会有此返回值,若没有也属正常。

CentOS 下最新版内核 headers 安装方法

本来打算在脚本里直接安装 kernel-ml-headers,但会出现和原版内核 headers 冲突的问题。因此在这里添加一个脚本执行完后,手动安装最新版内核 headers 之教程。
执行以下命令
yum --enablerepo=elrepo-kernel -y install kernel-ml-headers
根据 CentOS 版本的不同,此时一般会出现类似于以下的错误提示:
Error: kernel-ml-headers conflicts with kernel-headers-2.6.32-696.20.1.el6.x86_64
Error: kernel-ml-headers conflicts with kernel-headers-3.10.0-693.17.1.el7.x86_64
因此需要先卸载原版内核 headers ,然后再安装最新版内核 headers。执行命令:
yum remove kernel-headers
确认无误后,输入 y,回车开始卸载。注意,有时候这么操作还会卸载一些对内核 headers 依赖的安装包,比如 gcc、gcc-c++ 之类的。不过不要紧,我们可以在安装完最新版内核 headers 后再重新安装回来即可。
卸载完成后,再次执行上面给出的安装命令。
yum --enablerepo=elrepo-kernel -y install kernel-ml-headers
成功安装后,再把那些之前对内核 headers 依赖的安装包,比如 gcc、gcc-c++ 之类的再安装一次即可。
为什么要安装最新版内核 headers 呢?
这是因为 shadowsocks-libev 版有个 tcp fast open 功能,如果不安装的话,这个功能是无法开启的。

内核升级方法

如果是 CentOS 系统,执行如下命令即可升级内核:
yum -y install kernel-ml kernel-ml-devel
如果你还手动安装了新版内核 headers ,那么还需要以下命令来升级 headers :
yum -y install kernel-ml-headers
CentOS 6 的话,执行命令:
sed -i 's/^default=.*/default=0/g' /boot/grub/grub.conf
CentOS 7 的话,执行命令:
grub2-set-default 0
如果是 Debian/Ubuntu 系统,则需要手动下载最新版内核来安装升级。
这里下载最新版的内核 deb 安装包。
如果系统是 64 位,则下载 amd64 的 linux-image 中含有 generic 这个 deb 包;
如果系统是 32 位,则下载 i386 的 linux-image 中含有 generic 这个 deb 包;
安装的命令如下(以最新版的 64 位 4.12.4 举例而已,请替换为下载好的 deb 包):
dpkg -i linux-image-4.12.4-041204-generic_4.12.4-041204.201707271932_amd64.deb
安装完成后,再执行命令:
/usr/sbin/update-grub
最后,重启 VPS 即可。

特别说明

如果你使用的是 Google Cloud Platform (GCP)更换内核,有时会遇到重启后,整个磁盘变为只读的情况。只需执行以下命令即可恢复:
mount -o remount rw /

更新日志:

2018 年 12 月 14 日:
1、修正:在 CentOS 6 系统下 kernel-ml 及 kernel-ml-devel 无法安装的问题。原因是 elrepo 官方最近取消了 kernel-ml 及 kernel-ml-devel 的 rpm 资源。脚本已改为下载 rpm 来安装的方式。版本 4.18.20 将会是 CentOS 6 下最新的内核,目测以后也不会再有升级了,请尽快迁移到 CentOS 7 系统。
2018 年 06 月 09 日:
1、修正:在 CentOS 系统下将 elrepo-kernel 默认启用,以解决在安装新内核后执行 yum update 再次安装旧内核的问题。
2018 年 05 月 12 日:
1、修正:在 Ubuntu 或 Debian 系统中某些情况下获取不到某个编译失败的安装包导致退出安装的问题。并且现在可以手动选择安装从 4.14 到最新版本的内核。
2018 年 02 月 24 日:
1、新增:手动安装最新版内核 headers 的教程。
2017 年 10 月 28 日:
1、更新:自动判断内核版本。如果内核版本已经大于或等于 4.9 且没有开启 BBR,脚本会直接设置好 BBR;
2、新增:脚本执行时会在当前目录下创建日志(install_bbr.log),方便查看及排错。
2017 年 02 月 22 日:
1、更新:自动获取最新版 4.10 内核。
2017 年 01 月 20 日:
1、新增:自动获取并下载安装最新版内核的功能。
2017 年 01 月 13 日:
1、更新:内核到 4.9.3。
2017 年 01 月 09 日:
1、更新:内核到 4.9.1。

参考链接:

2019年10月23日星期三

使用 GPG 加密 Github Commits

GnuPG(简称 GPG),它是目前最流行、最好用的开源加密工具之一。
GPG 有许多用途,比如对文件,邮件的加密。而本文要说的是,如何使用 GPG 来加密 Github Commits。
在 Github 上查看一些项目的 Commits 时,偶尔会发现「This commit was signed with a verified signature.」字样,具体来说,就是下图示例那样。

一、安装 Git 和 TortoiseGit

关于如何在 Windows 下安装 Git 和 TortoiseGit,请参考《Git初学者:msysgit和tortoisegit》一文。
官方网站:
https://git-scm.com
https://tortoisegit.org

二、生成密钥

在安装完 Git 之后,开始菜单项里会有个 Git Bash,打开,如下图所示:
Git 自带了 gpg 命令,因此可以直接在 Git Bash 里生成密钥。命令如下:
gpg --gen-key
回车,提示信息如下:
gpg (GnuPG) 1.4.21; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection?
选择加密算法,默认选择第一个选项即可,表示加密和签名都使用 RSA 算法。
选 1,回车。
选择密钥长度,默认为 2048,建议输入 4096。
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
输入 4096,回车。
设定密钥的有效期。
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0)
密钥只是个人使用的话,建议选择第一个选项,即永不过期。
输入 0,回车。
系统会问你上述设置是否正确。
Is this correct? (y/N)
输入 y,回车。
系统会要求你输入个人信息。
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name:
「Real name」填入你的名字,需是英文。回车。
Email address:
「Email address」填入你的邮箱地址。回车。
Comment:
「Comment」可以空着不填。回车。
系统会再次让你确认填入的信息。
You selected this USER-ID:
    "Teddysun <i@teddysun.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
输入 O,回车。
系统会让你设定一个私钥的密码。
You need a Passphrase to protect your secret key.
Enter passphrase:
Repeat passphrase:
注意这里要留空不填,直接回车即可。这是因为 TortoiseGit 不支持 1.4.x 含有私钥密码。
系统这时开始生成密钥,这时会要求你做一些随机的举动,以生成一个随机数。你拿起鼠标随便晃晃,直到完成密钥生成。
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
最后,提示生成完毕。
gpg: key 0AD6C46D marked as ultimately trusted
public and secret key created and signed.

三、列出密钥

命令如下:
gpg --list-keys
输出结果如下:
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
/c/Users/teddysun/.gnupg/pubring.gpg
------------------------------------
pub   4096R/0AD6C46D 2017-02-22
uid                  Teddysun <i@teddysun.com>
sub   4096R/5BB7BB4E 2017-02-22
第一行显示公钥文件名(pubring.gpg)
第二行显示公钥特征(4096 位,Hash 字符串和生成时间)
第三行显示用户信息
第四行显示私钥特征

四、输出密钥

公钥文件(.gnupg/pubring.gpg)以二进制形式储存,armor 参数可以将其转换为 ASCII 码显示。
gpg --armor --output public-key.txt --export [密钥ID]
[密钥ID]指定用户的公钥,如 0AD6C46D,output 参数指定输出文件名,如 public-key.txt
同时,export-secret-keys 参数可以转换私钥。
gpg --armor --output private-key.txt --export-secret-keys
public-key.txt 和 private-key.txt 默认会导出至用户目录 C:\Users\<用户名>\ 下。

五、上传公钥至 Github 帐号

点击用户头像,打开 Settings,左侧菜单点击 SSH and GPG keys,在 GPG keys 那里,点击 New GPG key。
在输入框里填入刚刚导出的 public-key.txt 内容。
点击 Add GPG key,完成上传。

六、设置 Git

回到 Git Bash 窗口,根据刚才 gpg –list-keys 显示的结果,此时已经知道密钥 ID 为 0AD6C46D。
设置 Git 使用该密钥 ID 加密:
git config --global user.signingkey 0AD6C46D
设置 Git 全局使用该密钥加密:
git config --global commit.gpgsign true
最后,再输入以下命令查看 Git 配置情况:
git config -l
包含以下信息。
user.signingkey=0AD6C46D
commit.gpgsign=true
至此,使用 GPG 加密 Github Commits 就正式完成了。
以后再 Git Commit,同步到 Github 上之后,就会发现该 Commit 已显示 Verified。

参考链接:

2019年10月16日星期三

PHP模块一览及简要说明

PHP 编译完成后,可以通过一个简单的函数 phpinfo() 查看关于 PHP 的所有信息。以下介绍的模块一览,皆全部来自于函数 phpinfo() 的输出信息。

SAPI Modules

什么是 SAPI?
SAPI 即 Server API, Server Application Programming Interface。

1、Apache 2.0 Handler(apache2handler)

用于 Apache 2 的模块,当安装的是 PHP 5 的时候,编译出来的文件名是 libphp5.so;当安装的是 PHP 7 的时候,编译出来的文件名是 libphp7.so。
libphp5.so 或 libphp7.so 通常被安装在 Apache 的安装目录下的 modules 目录。
编译的时候需指定参数 −−with-apxs2=FILE,比如 −−with-apxs2=/usr/local/apache/bin/apxs

2、CGI / FastCGI

CGI,意为 Common Gateway Interface。
通常编译安装在 PHP 安装目录 bin 下,这个可执行文件名是 php-cgi。

3、CLI

CLI,意为 Command Line。命令行模式。
通常编译安装在 PHP 安装目录 bin 下,这个可执行文件名是 php。
输入 php -h 显示其用法。

4、Embed

默认不编译安装,除非指定编译参数 −−enable-embed
该模块允许在 C/C++ 语言中调用 PHP 提供的函数。

5、FastCGI Process Manager

FastCGI Process Manager,也就是 FPM,PHP FastCGI 进程的管理器。

6、litespeed

用于 LiteSpeed 的模块,默认不编译。
通过指定编译参数 −−with-litespeed 安装。 Build PHP as litespeed module

7、phpdbg

从 PHP 5.6 开始,引入了 phpdbg,交互式调试器,用于 Debug PHP 程序,可以在不用修改代码,不影响性能的情况下控制 PHP 的运行环境。
通常编译安装在 PHP 安装目录 bin 下,这个可执行文件名是 phpdbg。
PHP 5.4 和 5.5 也可以单独安装该模块。

PHP Modules

PHP 源码自带的扩展模块,根据 PHP 版本的不同略有差别,大致为以下这么 71 个模块。

1、BC Math

通过指定编译参数 −−enable-bcmath 安装。 Enable bc style precision math functions

2、Bzip2

通过指定编译参数 −−with-bz2=DIR 安装。 Include BZip2 support
Debian/Ubuntu 需安装 libbz2-dev 依赖包。
Redhat/CentOS 需安装 bzip2-devel 依赖包。

3、Calendar

通过指定编译参数 −−enable-calendar 安装。 Enable support for calendar conversion

4、COM and .Net

Windows 专用扩展。COM 是指 Component Object Model,组件对象模型,是多项微软技术与框架的基础,包括OLE、OLE自动化、ActiveX、COM+、DCOM、Windows shell、DirectX、Windows Runtime。

5、ctype

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-ctype

6、cURL

通过指定编译参数 −−with-curl=DIR 安装。 Include cURL support
Debian/Ubuntu 需安装 libcurl4-gnutls-dev 依赖包。
Redhat/CentOS 需安装 curl-devel 依赖包。

7、Date/Time Support(date)

日期和时间函数,默认编译安装,不可禁止。

8、DBA

通过指定编译参数 −−enable-dba 安装。 Build DBA with bundled modules
该参数会默认自带 3 个参数,−−with-cdb,−−enable-inifile,inifile-flatfile,若要禁止,则需通过参数−−without-cdb=DIR,−−disable-inifile,−−disable-flatfile 实现。

9、DB-LIB (MS SQL, Sybase)(pdo_dblib)

Windows 专用扩展。用于连接  SQL Server 和 Sybase 数据库的 PDO 驱动扩展。

10、DOM

此扩展默认为启用,Document Object Model。编译时可通过下列选项禁用:−−disable-dom

11、enchant

通过指定编译参数 −−with-enchant=DIR 安装。 Include enchant support. GNU Aspell version 1.1.3 or higher required.
一般需指定其目录,−−with-enchant=/usr
Debian/Ubuntu 需安装 libenchant-dev, libpspell-dev 依赖包。
Redhat/CentOS 需安装 enchant-devel, aspell-devel 依赖包。

12、EXIF

通过指定编译参数 −−enable-exif 安装。 Enable EXIF (metadata from images) support

13、fileinfo

此扩展默认为启用,fileinfo support。编译时可通过下列选项禁用:−−disable-fileinfo
注意:在内存比较小的机器上编译此扩展时可能会失败,因此内存加 SWAP 的容量小于 480MB 时就不要安装了。

14、Filter

此扩展默认为启用,input filter support。编译时可通过下列选项禁用:−−disable-filter
另如果要给此扩展指定 PCRE 安装目录的话,则还有以下的编译参数。
−−with-pcre-dir  FILTER: pcre install prefix

15、Firebird driver for PDO(pdo_firebird)

−−with-interbase=DIR Include Firebird support.  DIR is the Firebird base install directory
−−with-pdo-firebird=DIR PDO: Firebird support.  DIR is the Firebird base install directory

16、FTP

通过指定编译参数 −−enable-ftp 安装。Enable FTP support
安装该扩展还有个参数 −−with-openssl-dir=DIR  FTP: openssl install prefix,可不指定,则使用系统自带 openssl 库。

17、GD imaging(gd)

通过指定编译参数 −−with-gd=DIR 安装。Include GD support.  DIR is the GD library base install directory BUNDLED
这是一个打包式的依赖,需要依赖如下安装包。
−−with-webp-dir=DIR(PHP 7.0, 7.1 only)
−−with-jpeg-dir=DIR
−−with-png-dir=DIR
−−with-zlib-dir=DIR
−−with-xpm-dir=DIR
−−with-freetype-dir=DIR
−−enable-gd-native-ttf
−−enable-gd-jis-conv
PHP5.4、PHP5.5、PHP5.6 则还有个
−−with-vpx-dir=DIR
Debian/Ubuntu 需安装 libwebp-dev, libjpeg-dev, libpng-dev, libxpm-dev, libfreetype6-dev, libvpx-dev 依赖包。
Redhat/CentOS 需安装 libwebp-devel, libjpeg-devel, libpng-devel, libXpm-devel, freetype-devel, libvpx-devel 依赖包。

18、GetText

通过指定编译参数 −−with-gettext=DIR 安装。Include GNU gettext support
Debian/Ubuntu 需安装 gettext 依赖包。
Redhat/CentOS 需安装 gettext, gettext-devel 依赖包。

19、GMP

通过指定编译参数 −−with-gmp=DIR 安装。Include GNU MP support
Debian/Ubuntu 需安装 libgmp-dev 依赖包。
Redhat/CentOS 需安装 gmp-devel 依赖包。

20、Hash

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-hash  Disable hash support

21、iconv

此扩展默认为启用,编译时可通过下列选项禁用:−−without-iconv=DIR  Exclude iconv support

22、IMAP

通过指定以下编译参数。
−−with-imap=DIR         Include IMAP support. DIR is the c-client install prefix
−−with-kerberos=DIR     IMAP: Include Kerberos support. DIR is the Kerberos install prefix
−−with-imap-ssl=DIR     IMAP: Include SSL support. DIR is the OpenSSL install prefix
编译此选项时,PHP 需指定 libc-client.a 所在目录。

23、InterBase

−−with-interbase=DIR Include Firebird support.  DIR is the Firebird base install directory

24、Internationalization(intl)

通过指定编译参数 −−enable-intl 安装。 Enable internationalization support

25、json

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-json  Disable JavaScript Object Serialization support

26、LDAP

−−with-ldap=DIR         Include LDAP support
−−with-ldap-sasl=DIR    LDAP: Include Cyrus SASL support
Debian/Ubuntu 需安装 libldap-2.4-2, libldap2-dev 依赖包。
Redhat/CentOS 需安装 openldap, openldap-devel 依赖包。

27、libxml

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-libxml  Disable LIBXML support
−−with-libxml-dir=DIR   LIBXML: libxml2 install prefix
Debian/Ubuntu 需安装 libxml2, libxml2-dev 依赖包。
Redhat/CentOS 需安装 libxml2, libxml2-devel 依赖包。

28、Multibyte String Functions(mbstring)

通过指定编译参数 −−enable-mbstring 安装。 Enable multibyte string support
−−disable-mbregex  MBSTRING: Disable multibyte regex support
−−disable-mbregex-backtrack  MBSTRING: Disable multibyte regex backtrack check
−−with-libmbfl=DIR  MBSTRING: Use external libmbfl.  DIR is the libmbfl base install directory BUNDLED
−−with-onig=DIR  MBSTRING: Use external oniguruma. DIR is the oniguruma install prefix. If DIR is not set, the bundled oniguruma will be used
libmbfl 对 mbstring 是必要的。libmbfl 被捆绑到了 mbstring。
Debian/Ubuntu 需安装 libonig2, libonig-dev 依赖包。
Redhat/CentOS 需安装 oniguruma, oniguruma-devel 依赖包。

29、mcrypt

通过指定编译参数  −−with-mcrypt=DIR 安装。  Include mcrypt support
Debian/Ubuntu 需安装 libmcrypt-dev 依赖包。
Redhat/CentOS 需编译安装 libmcrypt 和 mcrypt 。如果安装了 EPEL 的话,则需安装 libmcrypt-devel 依赖包。

30、MySQL driver for PDO(pdo_mysql)

−−with-mysql-sock=SOCKPATH  MySQLi/PDO_MYSQL: Location of the MySQL unix socket pointer
指定系统里安装的 MYSQL 的 mysql.sock 路径。
−−with-pdo-mysql=DIR  PDO: MySQL support. DIR is the MySQL base directory
指定系统里安装的 MYSQL 的基本目录。若未指定,则默认安装 mysqlnd(MySQL native driver)

31、MySQLi

−−with-mysqli=FILE  Include MySQLi support. FILE is the path to mysql_config
指定系统里安装的 MYSQL 的目录下的 mysql_config 文件路径。

32、MySQLnd

通过指定编译参数 −−enable-mysqlnd 安装。 Enable mysqlnd explicitly, will be done implicitly when required by other extensions
另如果要给此扩展指定 libz 目录的话,则还有以下的编译参数。
−−with-zlib-dir=DIR  mysqlnd: Set the path to libz install prefix

33、OCI8

−−with-oci8=DIR  Include Oracle Database OCI8 support. DIR defaults to $ORACLE_HOME
系统里安装了 Oracle 数据库的话,则指定为 $ORACLE_HOME;否则需安装 Oracle Instant Client,指定为 /path/to/instant/client/lib

34、ODBC driver for PDO(pdo_odbc)

−−with-pdo-odbc=flavour,dir
PDO: Support for ‘flavour’ ODBC driver.
include and lib dirs are looked for under ‘dir’.
‘flavour’ can be one of:  ibm-db2, iODBC, unixODBC, generic
If ‘,dir’ part is omitted, default for the flavour
you have selected will be used. e.g.:
−−with-pdo-odbc=unixODBC
will check for unixODBC under /usr/local. You may attempt to use an otherwise unsupported driver using the “generic” flavour.
The syntax for generic ODBC support is:
−−with-pdo-odbc=generic,dir,libname,ldflags,cflags
When built as ‘shared’ the extension filename is always pdo_odbc.so

35、ODBC

ODBC 有很多种,一般使用如下编译参数即可。
−−with-unixODBC=DIR  Include unixODBC support /usr/local
Debian/Ubuntu 需安装 unixodbc, unixodbc-dev 依赖包。
Redhat/CentOS 需安装 unixODBC, unixODBC-devel 依赖包。
注意:PHP 默认会去 /usr/local/include 下去找头文件 sqlext.h,所以还要做个软链接。
ln -s /usr/include/sqlext.h /usr/local/include/

36、OpenSSL

−−with-openssl=DIR      Include OpenSSL support (requires OpenSSL >= 1.0.1)
−−with-kerberos=DIR     OPENSSL: Include Kerberos support
−−with-system-ciphers   OPENSSL: Use system default cipher list instead of hardcoded value
PHP 7.1 所需的 openssl 版本是 >= 1.0.1
PHP 7.0 所需的 openssl 版本是 >= 0.9.8
PHP 5.6 所需的 openssl 版本是 >= 0.9.6
PHP 5.5 所需的 openssl 版本是 >= 0.9.6
PHP 5.4 所需的 openssl 版本是 >= 0.9.6
PHP 5.3 所需的 openssl 版本是 >= 0.9.6

37、Oracle (OCI) driver for PDO(pdo_oci)

−−with-pdo-oci=DIR  PDO: Oracle OCI support. DIR defaults to $ORACLE_HOME.
Use −−with-pdo-oci=instantclient,prefix,version for an Oracle Instant Client SDK.
For example on Linux with 11.2 RPMs use:
−−with-pdo-oci=instantclient,/usr,11.2

38、pcntl

通过指定编译参数 −−enable-pcntl 安装。 Enable pcntl support (CLI/CGI only)

39、Perl Compatible Regular Expressions(PCRE)

−−with-pcre-regex=DIR   Include Perl Compatible Regular Expressions support. DIR is the PCRE install prefix BUNDLED
−−with-pcre-jit  Enable PCRE JIT functionality

40、PHP Archive(Phar)

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-phar  Disable phar support

41、PHP Data Objects(PDO)

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-pdo  Disable PHP Data Objects support

42、Posix

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-posix  Disable POSIX-like functions

43、PostgreSQL driver for PDO(pdo_pgsql)

−−with-pdo-pgsql=DIR  PDO: PostgreSQL support.  DIR is the PostgreSQL base install directory or the path to pg_config

44、PostgreSQL

−−with-pgsql=DIR  Include PostgreSQL support.  DIR is the PostgreSQL base install directory or the path to pg_config

45、Pspell

−−with-pspell=DIR  Include PSPELL support. GNU Aspell version 0.50.0 or higher required
一般需指定其目录,−−with-pspell=/usr
Debian/Ubuntu 需安装 libpspell-dev 依赖包。
Redhat/CentOS 需安装 aspell-devel 依赖包。

46、Readline

−−with-readline=DIR  Include readline support (CLI/CGI only)
Debian/Ubuntu 需安装 libreadline-dev 依赖包。
Redhat/CentOS 需安装 readline-devel 依赖包。

47、Recode

−−with-recode=DIR  nclude recode support
Debian/Ubuntu 需安装 librecode-dev 依赖包。
Redhat/CentOS 需安装 recode-devel 依赖包。

48、Reflection

此扩展默认为启用。

49、Sessions

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-session  Disable session support
另如果要给此扩展指定 mm 支持的话,则还有以下的编译参数。
−−with-mm=DIR  SESSION: Include mm support for session storage

50、Shared Memory Operations(shmop)

通过指定编译参数 −−enable-shmop 安装。 Enable shmop support

51、SimpleXML

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-simplexml  Disable SimpleXML support
另如果要给此扩展指定 libxml2 目录的话,则还有以下的编译参数。
−−with-libxml-dir=DIR  SimpleXML: libxml2 install prefix

52、SNMP

通过指定编译参数 −−with-snmp=DIR 安装。 Include SNMP support
另如果要给此扩展指定 openssl 目录的话,则还有以下的编译参数。
−−with-openssl-dir=DIR  SNMP: openssl install prefix
Debian/Ubuntu 需安装 libsnmp-dev 依赖包。
Redhat/CentOS 需安装 net-snmp-devel 依赖包。

53、SOAP

通过指定编译参数 −−enable-soap 安装。 Enable SOAP support
另如果要给此扩展指定 libxml2 目录的话,则还有以下的编译参数。
−−with-libxml-dir=DIR  SOAP: libxml2 install prefix

54、Sockets

通过指定编译参数 −−enable-sockets 安装。 Enable sockets support

55、SPL

此扩展默认为启用。

56、SQLite3

此扩展默认为启用,编译时可通过下列选项禁用:−−without-sqlite3=DIR  Do not include SQLite3 support. DIR is the prefix to SQLite3 installation directory

57、SQLite 3.x driver for PDO(pdo_sqlite)

此扩展默认为启用,编译时可通过下列选项禁用:−−without-pdo-sqlite=DIR  PDO: sqlite 3 support. DIR is the sqlite base install directory BUNDLED

58、System V Message based IPC

通过指定编译参数 −−enable-sysvmsg 安装。 Enable sysvmsg support

59、System V Semaphores

通过指定编译参数 −−enable-sysvsem 安装。 Enable System V semaphore support

60、System V Shared Memory

通过指定编译参数 −−enable-sysvshm 安装。 Enable the System V shared memory support

61、tidy

通过指定编译参数 −−with-tidy=DIR 安装。 Include TIDY support
一般需指定其目录,−−with-tidy=/usr
Debian/Ubuntu 需安装 libtidy-dev 依赖包。
Redhat/CentOS 需安装 libtidy-devel 依赖包。

62、tokenizer

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-tokenizer  Disable tokenizer support

63、WDDX

通过指定编译参数 −−enable-wddx 安装。 Enable WDDX support
另如果要给此扩展指定 libxml2 目录的话,则还有以下的编译参数。
−−with-libxml-dir=DIR  WDDX: libxml2 install prefix

64、XMLReader

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-xmlreader  Disable XMLReader support
另如果要给此扩展指定 libxml2 目录的话,则还有以下的编译参数。
−−with-libxml-dir=DIR  XMLReader: libxml2 install prefix

65、xmlrpc

通过指定编译参数 −−with-xmlrpc=DIR 安装。 Include XMLRPC-EPI support
另如果要给此扩展指定 libxml2 和 iconv 目录的话,则还有以下的编译参数。
−−with-libxml-dir=DIR  XMLRPC-EPI: libxml2 install prefix
−−with-iconv-dir=DIR  XMLRPC-EPI: iconv dir for XMLRPC-EPI

66、XML

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-xml  Disable XML support

67、XMLWriter

此扩展默认为启用,编译时可通过下列选项禁用:−−disable-xmlwriter  Disable XMLWriter support

68、XSL

通过指定编译参数 −−with-xsl=DIR 安装。 Include XSL support.  DIR is the libxslt base install directory (libxslt >= 1.1.0 required)
Debian/Ubuntu 需安装 libxslt1-dev 依赖包。
Redhat/CentOS 需安装 libxslt-devel 依赖包。

69、Zip

通过指定编译参数 −−enable-zip 安装。 Include Zip read/write support
另如果要给此扩展指定 libz, PCRE 和 libzip 目录的话,则还有以下的编译参数。
−−with-zlib-dir=DIR  ZIP: Set the path to libz install prefix
−−with-pcre-dir=DIR  ZIP: pcre install prefix
−−with-libzip=DIR  ZIP: use libzip

70、Zlib

通过指定编译参数 −−with-zlib=DIR 安装。 Include ZLIB support (requires zlib >= 1.0.9)
Debian/Ubuntu 需安装 zlib1g-dev 依赖包。
Redhat/CentOS 需安装 zlib-devel 依赖包。

71、Zend OPcache

PHP 5.5 之后的版本,此扩展默认为启用,编译时可通过下列选项禁用:−−disable-opcache  Disable Zend OPcache support
注意:默认编译安装不代表默认启用,还需配置到 ini 文件里才行。

另外,PHP 还有诸多的第三方扩展,框架,CMS,包管理工具等。举几个例子。

扩展:ZendGuardLoader, ionCube Loader, XCache, Imagemagick, GraphicsMagick, Memcached, Redis, Mongodb, Swoole
框架:Laravel, Symfony, Nette, Yii, Zend Framework, Silex, Slim, CakePHP, ThinkPHP
CMS:Wordpress, Drupal, Joomla, Typecho, Phpcms,
包管理工具:Composer