分类目录归档:技术

从编译到二进制安装

从编译到二进制安装

很长一段时间以来,安装 LAMP 时都是编译安装其数据库(MySQL,MariaDB,Percona Server)的。这是一个非常耗时的过程,而且编译安装的版本,很多插件默认是不会被编译安装的。
偶然间在 MariaDB 的下载列表里,看到有适用于 Linux 下的二进制安装包。于是就研究了一下,发现其二进制包分为 2 个版本:GLIBC_2.14 及 GLIBC_2.14+,解压其安装包后,稍微设置一下就可以直接使用了。
这大大提高了安装效率,安装速度只取决于从服务器下载二进制包的速度。
于是我在脚本里先做判断系统里安装的 GNU_LIBC_VERSION 是多少,2.14 是一道分界线,这也决定着下载链接是怎样的。

一)

MariaDB 5.5, MariaDB 10.0, MariaDB 10.1 一直都是这么安装的,直到 MariaDB 10.2 的出现,让我头疼的一件事出现了。
本来以为只要安装好了 MariaDB 10.2,后面编译 PHP 会非常顺利,结果一开始 configure 的时候就出错了。

checking for mysql_set_server_option in -lmysqlclient... no
configure: error: wrong mysql library version or lib not found. Check config.log for more information.

这个错误提示太熟悉了,缺少了 libmysqlclient.so, libmysqlclient.a,于是我就去 MariaDB 安装目录下的 lib 里一看,发现果然跟 Percona Server 一样改名了。
看起来 libmariadbclient.a, libmariadb.so.3 这两个文件最相似。
做了 symbolic link 后,将 libmysqlclient.a 指向为 libmariadbclient.a,libmysqlclient.so 指向为 libmariadb.so.3,继续编译 PHP。
果然 configure 没问题了,喜滋滋地等待编译完成。当编译到 mysqli 模块时,异常退出。

mysqli.c: In function 'zm_info_mysqli':
mysqli.c:990: error: 'MYSQL_SERVER_VERSION' undeclared (first use in this function)
mysqli.c:990: error: (Each undeclared identifier is reported only once
mysqli.c:990: error: for each function it appears in.)

What?这难道是 MariaDB 的头文件里未定义 MYSQL_SERVER_VERSION 变量?
去 MariaDB 安装目录下的 include/mysql 里 grep 一下所有的 .h 文件,发现 MYSQL_SERVER_VERSION 被定义在 mysql_version.h 里。
扒了一下 PHP 源代码里的 ext/mysqli 下的 mysqli.c,一路找到 php_mysqli_structs.h 文件里 include 了 my_global.h,又在 my_global.h 里看到 include 了 my_config.h。
最后我在 my_config.h 里确实没有看到 MYSQL_SERVER_VERSION 变量被定义。
然后,我手动修改了一下 my_global.h,在原来 #include <my_config.h> 后面加了一行 #include <mysql_version.h>。然后继续编译 PHP。
果然,不再出现 MYSQL_SERVER_VERSION 变量的问题,然而,结果还是 boom,错误提示如下:

mysqli_nonapi.c: In function 'mysqli_common_connect':
mysqli_nonapi.c:266: error: 'MYSQL' has no member named 'reconnect'
mysqli_nonapi.c: In function 'zif_mysqli_error_list':
mysqli_nonapi.c:448: warning: passing argument 4 of 'add_assoc_string_ex' discards qualifiers from pointer target type

然后,我就发现我搞不定这个问题了(如果有谁搞定了这个问题,可以联系我)。
于是我从 LAMP 脚本里去掉了安装 MariaDB 10.2 这个选项。

二)

有了二进制安装 MariaDB 的经验,直觉告诉我 MySQL 肯定也有二进制包,去官网一看,果然有的。
Oracle 将 MySQL 的二进制安装包命名为 Linux – Generic。对于 GNU_LIBC_VERSION,只要求 GLIBC_2.5 即可安装(正在开发的 MySQL 8.0 则需 GLIBC_2.12)
安装过程与 MariaDB 类似,唯一的区别是 MySQL 5.7 开始,不再使用 mysql_install_db 来初始化安装数据库,而是使用 mysqld –initialize-insecure 来安装。
与此同时,MySQL 5.7 的默认数据库 mysql 中的 user 表结构也发生了若干变化,去掉了 Password 列,将密码 hash 保存在 authentication_string 列等等。而这又导致了低版本的 phpMyAdmin 如 4.4 无法正确识别数据库里的所有用户。

基本上,Percona Server 遵循着和 MySQL 一样的节奏,比如 5.7 开始使用 mysqld –initialize-insecure 来初始化,除了版本号。
Percona Server 有着自己独特的版本号。在主版本号之外,还有个 rel 版本号。5.5 和 5.6 使用的 rel 版本号带小数点,比如 5.6.36-82.0。而 5.7 则没有,比如 5.7.18-15。
没错,Percona Server 也提供了二进制安装包。但是它也有自己的风格,是不一样的烟火。
Percona Server 对二进制包的 openssl 版本作了严格的区分。比如文件名含 ssl100 适用于所有的 Debian/Ubuntu 版本,而 ssl101 只适用于 CentOS 6 和 CentOS 7。
Percona Server 的个性远不止于此。
你以为解压了这个二进制包就万事大吉了吗?它的安装目录和压缩包名一样长!
安装目录下的 bin/mysqld_safe 和 bin/mysql_config 里也包含了和文件名一样的路径名,而且是 hard path,这就意味着如果直接解压到某个安装文件夹下,是无法初始化和启动的。
必须要先将这两个文件里的路径替换为实际安装路径才可以。
与此同时,安装目录的 lib 目录下,并没有 libmysqlclient.so 和 libmysqlclient.a,而是叫 libperconaserverclient.so 和 libperconaserverclient.a。
因此需要创建 symbolic link 后才能被 PHP 识别和编译。

三)

通过二进制安装数据库后,再通过 phpMyAdmin 登录,你会发现多了一个 Plugins Tab,点进去会显示很多插件,大体上分为 3 类:AUTHENTICATION, INFORMATION SCHEMA, STORAGE ENGINE。而通过编译安装的数据库就没有这些。
这让我想起了一个比喻:微软的 Windows 会直接给你一个蛋糕,你直接吃就好了,没得挑;而 Linux 会给你面粉,鸡蛋,黄油,水,苏打粉等,好了,你去编译一个自定义的蛋糕吧。
事实上,为什么不多提供一个选项,让喜欢吃蛋糕的人,既可以选成品,也可以选用原材料来自己做一个?
二进制包就是这样的一个成品。如果可以的话,其实我也想选择 Apache, PHP 最新版的二进制包,然而并没有,所以只好自己编译了。各个操作系统发行版自带的版本往往都是其中的某个大版本,然后不断更新也不会变,少了很多选择的乐趣。

PHP模块一览及简要说明

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

Top 10 Best Public DNS Servers & Fastest DNS Servers 2017

Fastest DNS Servers – What is the best free public DNS server? See the list of top 10 best public DNS servers & fastest DNS servers 2017, Get the best DNS servers to use and fastest DNS server in the world

In order to access the internet, you need to have DNS servers. All the websites which you access on the internet have DNS server which is responsible for handling all the requests which come to it via a computer.

There are different DNS (Domain Name System) servers which are allocated by different internet service providers to the computers. If you are not able to open some websites on your computer then there might be having a problem with the DNS server of the internet service provider you are using.

best public dns servers

You can always use Public DNS servers as there are a lot of free public DNS servers available. In today’s best free DNS servers guide, we are going to share a complete list of top 10 best public DNS servers to use and the fastest DNS server in the world. Check out the below mentioned best and fastest DNS servers 2017:

Top 10 Best Public DNS Servers in the World

Most of you might think that if your Internet Service Provider (ISP) comes with a default DNS Server then what is the actual need of finding and using an alternate DNS server or public DNS servers?

If similar questions are coming repeatedly in your mind then here are the some of the most appropriate reasons:

  • Internet speed depending upon the distance between your place and DNS server, so if you change DNS servers there will be speed improvements.
  • If your Internet Service Provider’s DNS servers are not quite reliable, obviously using an alternate DNS server or best free public DNS servers will improve stability.
  • In case, you are using an old Operating System on your PC with no regular security updates then using a third-party DNS server or safe DNS servers will be a great protection from phishing attacks.

So, now if you are quite clear with the terms like what is DNS server? Why you should change you DNS Server? and, How to change DNS Server on Windows, Mac, and Android devices? then let’s have a look at the list of top 10 best public DNS servers & fastest DNS servers of 2017:

(1) Google Public DNS Server

One of the fastest DNS servers which you can use on your computer is Google Public DNS server. Using Google Public DNS server, you will get better browsing experience and enhanced security on your computer. The details of Google DNS server are shared below:

  • Preferred DNS server: 8.8.8.8
  • Alternate DNS server: 8.8.4.4

google public dns server

(2) Norton ConnectSafe

Not only Norton provides the best internet security and antivirus programs but they are also having fastest DNS servers. You can always use Norton Connectsafe which is their cloud-based service. Norton Connectsafe will help you in getting protection from malicious websites and websites with offensive content.

norton connectsafe

There are three pre-defined content filtering policies are available with Norton ConnectSafe for home and personal use:

Policy 1: Security

  • Preferred DNS Server: 199.85.126.10
  • Alternate DNS Server: 199.85.127.10

Policy 2: Security + Pornography

  • Preferred DNS Server: 199.85.126.20
  • Alternate DNS Server: 199.85.127.20

Policy 3: Security + Pornography + Other

  • Preferred DNS Server: 199.85.126.30
  • Alternate DNS Server: 199.85.127.30

(3) OpenDNS

OpenDNS is another cloud-based fastest DNS server 2017 which aims at giving ultimate protection from malicious attacks which are sent by the attackers on the internet. OpenDNS is one of the best public DNS servers as there is rarely any downtime.

  • Preferred DNS Server: 208.67.222.222
  • Alternate DNS server: 208.67.222.220

opendns

(4) Comodo Secure DNS

If you are looking for a public DNS server 2017 which will provide better browsing experience as compared to your internet service provider you need to try Comodo Secure DNS. You will be able to surf all the websites safely and easily using Comodo Secure DNS.

  • Preferred DNS Server: 8.26.56.26
  • Alternate DNS server: 8.20.247.20

comodo secure dns

(5) Level3

The next free DNS servers which make our list of best free public DNS servers is Level3. The DNS server is operated by Level 3 communications. In order to use Level3, free DNS servers you can use the below-mentioned DNS addresses in the settings.

Preferred DNS Server: 209.244.0.3
Alternate DNS server: 208.244.0.4

level3

See also: How to Fix “The proxy server is refusing connections” Error in Firefox

(6) DNS Advantage

DNS Advantage is the fastest DNS servers which will provide you the best routing information of the website you are opening. Not only you will be able to open all the websites with fastest DNS servers but it also helps you in getting protection from malicious websites and attacks. The details of best DNS servers are shared below:

  • Preferred DNS Server: 156.154.70.1
  • Alternate DNS server: 156.154.71.1

dns advantage

(7) OpenNIC

OpenNIC is the best alternative to the best domain registrars as this is the fastest DNS servers in the world. Using OpenNIC, you will be able to protect all your details from the government and also maintain your privacy. You can add the below-mentioned details in order to use OpenNIC.

  • Preferred DNS Server: 46.151.208.154
  • Alternate DNS server: 128.199.248.105

opennic

(8) Dyn

The next best free public DNS server is Dyn. One of the reasons why Dyn makes to our list of free public DNS servers is the amazing web experience offered by the DNS servers. All your information will be safe with the Dyn best DNS servers.

  • Preferred DNS Server: 216.146.35.35
  • Alternate DNS server: 216.146.36.36

dyn

(9) SafeDNS

The next name which makes our list of best DNS servers to use is SafeDNS. SafeDNS is another cloud-based service which will help you in getting a better browsing experience. SafeDNS provides a reliable network to share your and access your data.

  • Preferred DNS Server: 195.46.39.39
  • Alternate DNS server: 195.46.39.40

safedns

(10) DNS.Watch

The last service which makes our list of best DNS services is DNS.Watch. The fastest DNS service in the world will provide you uncensored, fast and reliable browsing experience for free of cost.

  • Preferred DNS Server: 84.200.69.80
  • Alternate DNS server: 84.200.70.40

dns.watch

Conclusion

If you are not able to surf the internet properly then you need to change the DNS servers. Using the above-shared list of fastest DNS servers in the world, you will get the best browsing experience and these DNS servers will also protect you from any possible attacks.

Please, feel free to share with us through comment section if you are using any highly secure DNS server or fastest DNS servers for speeding up your browsing experience, improving your internet security, and receiving the results you expect with absolutely no redirection!

解决wordpress链接含有more-link的方法

在wordpress文章中可以使用more标签来实现摘要的功能。但是在点击“继续阅读”(在这里我将“继续阅读”重新汉化成“阅读全文”,个人喜好)后,发现链接后面跟了一个“#more-数字”。不利于SEO和搜索引擎收录,因此需要去除之。

打开主题的functions.php,添加代码如下:

function remove_more_jump_link($link) {
	return preg_replace('/#more-/d+/i','',$link);
}
add_filter("the_content_more_link", "remove_more_jump_link");

这段代码的功能就是添加一条过滤规则,将$link中的“#more-数字”替换为空。这样就实现了去除more-link的功能了。

解决wordpress时区不对的方法

在汉化Google Drive for WordPress插件时发现,一键备份产生的文件名末尾是以时间戳结束,如1361761851这样的一串数字,时间久了备份文件变多,不利于记忆和区分。

因此,重新修改了代码,将时间戳转换成日期格式,比如现在是2013年2月26日10时30分18秒,转换之后的格式就是20130226_103018,修改后的插件已重新打包上传。《Google Drive for WordPress插件汉化》一文中的下载链接已更新,欢迎下载使用。

可是我在测试时发现,生成的文件名最后的时间不对。原来Wordpress默认的是UTC时区,跟中国差了8小时时差。于是找到了一些解决方法如下:

1、如果是VPS建站,你拥有控制权的话,可以修改php.ini文件。

date.timezone = "Asia/Shanghai"

2、在/wp-includes/functions.php中加入:

date_default_timezone_set('Asia/Shanghai');

3、在 wp-config.php中加入:

date_default_timezone_set('Asia/Shanghai');

本文采用了第三种方法,将来Wordpress升级亦不受影响。

Google Drive for WordPress插件汉化

Google Drive for WordPress插件汉化

安装完WordPress就肯定免不了要折腾,折腾就免不了会出错,出错免不了会头疼。怎么办?做改动之前,你只需要一键备份下网站数据和数据库,那么即使折腾出错了,也能及时恢复如初。

Google Drive for WordPress插件的安装,请参考网上已有的教程,戳这里。我主要是在这篇教程的基础上,部分汉化了该插件的界面,便于国人安装和使用。

下载汉化版的插件:http://pan.baidu.com/share/link?shareid=274990&uk=50623901

下载wp-google-drive.zip文件,在后台安装插件界面,上传该zip文件,安装完毕后启用。如图所示:

Google Drive for WordPress插件汉化

LAMP安装脚本

本脚本适用环境:

  • 系统支持:CentOS-5 (32bit/64bit)或CentOS-6 (32bit/64bit)
  • 内存要求:≥512M
  • 日期:2013年02月22日

将会安装:

  • 1、Apache 2.4.3
  • 2、MySQL 5.5.30
  • 3、PHP 5.3.22 + ZendGuardLoader(Zend出品的加速器)
  • 4、phpMyAdmin 3.5.7
  • 5、OCI8 + oracle-instantclient  (可选安装,支持PHP连接Oracle数据库)
  • 6、xcache 2.0.1 (可选安装)
  • 7、xcache 3.0.1 (推荐安装)
  • 8、pure-ftpd-1.0.36(可选安装)

注意:6、7二者只能选其一安装。

如何安装:
第一步,终端中输入以下命令:

cd /root
wget http://teddysun.googlecode.com/files/lamp1.2.1.tar.gz
tar -zxvf lamp1.2.1.tar.gz
cd /root/lamp1.2.1
chmod +x *.sh

第二步,禁止SELINUX
终端中输入以下命令:

cd /root/lamp1.2.1
./disable.sh

第三步,安装LAMP
终端中输入以下命令:

cd /root/lamp1.2.1
./lamp.sh | tee lamp.log

安装其它:

  • 1、(可选安装)执行脚本xcache_2.0.1.sh安装xcache 2.0.1。(命令:./xcache_2.0.1.sh)
  •      (推荐安装)执行脚本xcache_3.0.1.sh安装xcache 3.0.1。(命令:./xcache_3.0.1.sh)
  • 2、执行脚本php5.3_oci8_oracle11g.sh安装OCI8扩展以及oracle-instantclient11.2(命令:./php5.3_oci8_oracle11g.sh)
  • 3、执行脚本php5.3_oci8_oracle10g.sh安装OCI8扩展以及oracle-instantclient10.2(命令:./php5.3_oci8_oracle10g.sh)
  • 4、(可选安装)执行脚本pureftpd.sh安装pure-ftpd-1.0.36。(命令:./pureftpd.sh)

备注:2、3两者选其一执行即可(可选)。该脚本是为了使PHP可以连接Oracle数据库。若连接的数据库版本为10.2,则执行3,否则执行2。

注意:
1、执行脚本时出现下面的错误提示时。

-bash: ./lamp.sh: /bin/bash^M: bad interpreter: No such file or directory

是因为Windows下和Linux下的文件编码不同所致。
解决办法是:
执行

vi lamp.sh

输入命令

:set ff=unix 

#注意,包括冒号
回车后,输入ZZ(注意为大写连续2个字母Z),保存退出vi命令。

2、Oracle数据库连接错误排查
一般连接外部oracle服务器那一步骤时,可能会出现ORA-24408:could not generate unique server group name这样的错误,解决办法是在hosts中将主机名添加即可:

vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 test
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 test

上面的代码中,test即为主机名。然后重启网络服务即可。service network restart

使用提示:
lamp add(del,list):创建(删除,列出)虚拟主机。
lamp ftp(add|del|list):创建(删除,列出)ftp用户。
lamp uninstall:一键删除lamp(删除之前注意备份好数据!)

程序目录:
mysql安装目录: /usr/local/mysql
mysql data目录:/usr/local/mysql/data(默认,安装时可更改路径)
php安装目录: /usr/local/php
apache安装目录: /usr/local/apache

命令一览:
mysql命令: /etc/init.d/mysqld(start|stop|restart|reload|status)
       或:service mysqld(start|stop|restart|reload|status)
apache命令: /etc/init.d/httpd(start|stop|restart|reload|status)
       或:service httpd(start|stop|restart|reload|status)      

网站根目录:
安装完后默认的web根目录: /data/www/default

更多信息请参考Google code项目主页

更新(2013年5月26日):LAMP一键安装脚本已更新到2.0版本。详情请参照页面

CentOS下用wget命令下载JDK

通常需要下载jdk时,直接用wget命令是不行的。那么,如何解决呢?
只需要在wget的时候加上一个特殊的cookie就可以搞定,下载最新版jdk-8u102的完整命令:

wget --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.rpm -O jdk-8u102-linux-x64.rpm

而如果出现Unable to establish SSL connection的话,在wget后面加上–no-check-certificate即可,命令如下:

wget --no-cookie --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.rpm -O jdk-8u102-linux-x64.rpm

安装jdk

rpm -ivh jdk-8u102-linux-x64.rpm

配置jdk,请参照《CentOS下JDK7和tomcat的安装配置》一文。

以上的方法不仅仅是在CentOS下,其他的Linux发行版也可以。

有的时候,原来的系统里已经安装了旧版本的jdk,如何卸载呢?
先查看系统已安装的jdk

rpm -qa | grep jdk

返回jdk1.8.0_102-1.8.0_102-fcs.x86_64(这里是举例说明)

卸载已安装的jdk

rpm -e --nodeps jdk1.8.0_102-1.8.0_102-fcs.x86_64

之后再输入java -version则会提示command not found。至此,卸载完成。开始安装新版本的jdk吧。

关闭WordPress日志修订功能的方法

WordPress自版本2.6之后有个功能叫做日志修订,个人觉得完全没用,大多数人用WordPress完全是用来写博客的,搞个日志修订功能,每次修订都会在posts表中插入一条记录。文章多的话,数据库查询会变慢那是肯定的。

如何关闭这个功能呢?

在 wp-setting.php 中新增了一个变量 WP_POST_REVISIONS,把它设置为 false 就可以屏蔽 WordPress 日志修订功能。在 wp-config.php 的require_once(ABSPATH . ‘wp-settings.php’);前添加代码如下:

/** 关闭WordPress日志修订功能*/
define('WP_POST_REVISIONS', false);

关于WP_POST_REVISIONS这个常量的详细设置为:
  true(默认)或者 -1:保存所有修订版本;
  false或者0:不保存任何版本(除了自动保存的版本);
  大于0的整数n:保存n个修订版本(+1只保存自动保存版本),旧的版本将被删除。

如何判断VPS的虚拟技术

如何判断VPS的虚拟技术

  我们知道VPS的虚拟技术有许多种,如Openvz、Xen、VMware vSphere、Hyper-V、KVM及Xen的HVM与PV等。在Xen中pv是半虚拟化,hvm是全虚拟化,pv只能用于linux内核的系统,hvm可以虚拟所有常见操作系统(Linux+windows),理论效率比pv略低,另外hvm需要cpu虚拟化指令支持,pv无此要求。而Openvz是一个类似于Linux-VServer的操作系级全虚拟化解决方案,目前基于Xen和Openvz的VPS服务商比较多。
  那么如何判断买到的是哪种虚拟技术的VPS呢?价格上,Openvz一般比Xen便宜得多,但稳定性和用途范围就不及Xen了。要了花了Xen的钱却买了Openvz的VPS岂不是很冤。

  1、通过系统目录判断
  执行命令:ls -al /proc
  一般Openvz的话,则会有vz目录,Xen的话则会有xen目录。

  2、通过网卡信息判断
  执行命令:ifconfig
  一般Openvz的话,则会有venet0或venet0:x网卡标识,Xen的话一般则是eth0。

  3、通过VPS控制面板判断
  流行的VPS面板包括SolusVM、vePortal等,会显示具体的虚拟技术。

  4、通过virt-what命令判断
  CentOS或RedHat系统的话,执行命令:yum install -y virt-what
  virt-what是一个判断当前环境所使用的虚拟技术的脚本,常见的虚拟技术基本上都能正常识别出来。
  安装好virt-what后,执行命令:virt-what
  根据返回的信息,即可判断出当前VPS所使用的虚拟技术。