分类目录归档:技术

从编译到二进制安装

从编译到二进制安装

很长一段时间以来,安装 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版本。详情请参照页面

wordpress更换主题报错解决方法

  这两天在折腾主题,有时候觉得这个好看有时候觉得那个好看,于是就换来换去的。这不就换出问题了。
  在一次换回原主题的过程中,浏览器界面卡住不动,再一刷新就出现了http500内部服务器错误。第一感觉就是当前切换的主题出问题了,进而导致整个网站前台和后台都进不去了。
  解决方法有2种,推荐第1种,比较简单:
  1、通过FTP软件(虚拟主机一般就只有FTP)进入网站的主题目录wp-content/themes,把切换的那个有问题的主题文件夹改名即可重新进入WordPress后台。进入后台会遇到提示,主题目录被破坏恢复到默认主题。
  2、通过修改数据库解决。登录phpMyadmin,找到安装wordpress的数据库,执行下面的SQL语句(wp_options中的wp是数据库前缀,改为当初安装时设定的;twentytwelve是举例的主题名称,改为切换时出问题的主题名称):

SELECT * FROM `wp_options` WHERE `option_value` = 'twentytwelve' LIMIT 0 , 30;

  一般出现3行结果,option_name分别是template、stylesheet、current_theme,修改为没出问题的主题名称即可。

  这时候网站已经恢复到默认主题(即一开始安装完wordpress后系统自带的三款主题之一),我开始找主题的原因。
  打开Apache的error_log文件,找到如下的错误信息:

[Sat Mar 16 21:26:27.637761 2013] [:error] [pid 1100] [client 180.108.184.166:56042] PHP Fatal error: Cannot redeclare remove_more_jump_link() (previously declared in /data/www/default/wp-content/themes/zbench/functions.php:43) in /data/www/default/wp-content/themes/zbench/functions.php on line 486, referer: http://www.emailtry.com/wp-admin/themes.php

  出现PHP致命错误是因为一个函数remove_more_jump_link的重申明出现错误。原来,是我当初在主题的functions.php里加了一些自定义的代码来优化显示效果,比如去除wordpress的链接含有more-link,自定义后台登录界面等。我在默认主题twentytwelve中添加了这几个函数后,再切换到别的主题,wordpress会自动将这些自定义的函数添加到新主题的functions.php中。然后我又重新将这几个函数添加到新主题中,进而导致函数名重复,出现PHP致命错误。
  原因找到了就容易解决了。将自己添加的那些函数全部删除后,切换主题恢复正常。
  出现这次故障的问题虽然解决了,但还是有不少地方需要在将来注意的。
  1、主题一般是不能随意切换的,固定使用一款主题后,最好是在这款主题的基础上修修改改或者安装插件,因为插件不可能兼容于所有主题;
  2、写文章时,一定要统一风格,最好不要过多使用一些自定义的html标签;
  3、如果之前使用的主题自带SEO功能,那么更换主题后的主题最好也要有SEO功能,否则需要用插件来实现;
  4、更换主题之前,需要确认当前的全部插件是否与更换的主题兼容,有一些主题附带的功能会与某些插件存在冲突,更换前需要好好检查;
  5、重新加入统计跟踪代码。常见的统计跟踪工具(如Google Analytics、cnzz等)代码一般添加到footer.php中,切换主题时也要注意添加到新主题中。(建议最好用插件实现添加统计代码,如Google Analytics)

让Apache禁止IP直接访问的方法

让Apache禁止IP直接访问的方法

  今天看到这样的一个例子,VPS的IP被人恶意绑定,流量被劫持到别的域名,从而遭到广告联盟的封杀。原理是什么呢?简单解释就是,你的网站可以通过IP直接访问,本来这没什么问题,但是如果被人恶意用别的域名解析到你的IP的话,那么你的网站就能通过别人的域名来访问了。广告联盟肯定也是跟域名绑定的,被人这么一搞,时间一长肯定会被发现域名不符,于是就整个杯具了。
  如何发现IP被恶意绑定呢?利用站长工具,同IP网站查询:http://tool.chinaz.com/Same/
  如何解决这个问题?让人只能通过域名来访问网站,而不能通过IP来直接访问。

  方法一、修改Apache配置文件httpd.conf

  如果你的Apache开通了虚拟主机,则需要修改conf/extra/httpd-vhosts.conf文件。如何判断Apache是否开通了虚拟主机,在配置文件httpd.conf中搜索,若有类似如下的选项的,则开启了虚拟主机。#为注释。

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

  若是开通了虚拟主机,则需要在httpd-vhosts.conf中修改配置如下;若没有开通虚拟主机,则可以直接在httpd.conf文件最后面,加入以下代码:

NameVirtualHost XXX.XXX.XXX.XXX
<virtualhost XXX.XXX.XXX.XXX:80>
ServerName  XXX.XXX.XXX.XXX
<Directory />
Order Allow,Deny
Deny from all
</Directory>
</virtualhost>
<virtualhost XXX.XXX.XXX.XXX:80>
ServerName  yourdomain.com
DocumentRoot  /var/www/
</virtualhost>

  其中XXX.XXX.XXX.XXX为你的IP地址,第一处virtualhost配置为拒绝IP的任何访问请求,返回403错误。第二处的virtualhost配置为允许通过yourdomain.com这个域名访问,网站主目录为/var/www/(假设这是你的网站主目录)

  方法二、利用Apache的Rewrite和PHP实现400错误

  新建一个虚拟主机配置,将来自IP的访问Rewrite到一个自定义的PHP页面。

ServerName  XXX.XXX.XXX.XXX
DocumentRoot /var/www/error/
RewriteEngine On
RewriteRule  ^.*  /400.php

  其中XXX.XXX.XXX.XXX为你的IP地址,网站主目录为/var/www/error/

  编辑文件/var/www/error/400.php,内容如下:

<?php
header(“HTTP/1.1 400 Bad Request”);  
?>
<h1>Bad Request</h1>

  这样以来,即可实现直接用IP访问返回400错误了。

  修改完成之后,务必要重新加载Apache配置,命令如下:

service httpd reload

  参考链接:
  http://www.cnblogs.com/zhuangge/archive/2011/04/13/2014892.html
  http://zhangxugg-163-com.iteye.com/blog/1639001

Windows 7下替换记事本为Notepad2

众所周知,Windows下的记事本(notepad.exe)功能单一,缺点不言而喻。对于整天写代码的人来说,换一个支持代码高亮、编码转换、行号显示、多步Ctrl+Z等功能的软件就好了。这就是Notepad2,一款轻量级文本编辑器。本文介绍的是在Windows 7下如何将记事本替换为Notepad2。

步骤一,下载Notepad2
官方网站是http://www.flos-freeware.ch/notepad2.html,这里介绍的是汉化后的版本。下载链接如下:
http://pan.baidu.com/share/link?shareid=351455&uk=50623901

步骤二,取得管理员权限
由于Windows 7的UAC机制,所以需要先取得管理员权限才能进行替换操作。有很多种方法,这里提供一个简单的为右键菜单添加取得所有权的菜单。下载链接中提供的注册表文件,双击导入注册表即可(系统会有提示,不用理会)。
 http://pan.baidu.com/share/link?shareid=351483&uk=50623901 

步骤三,用Notepad2替换系统自带的记事本
搜索C:/Windows目录里的“notepad.exe”文件,应该会出来好几个目录都含有这个文件,在我的系统里为
C:/Windows/winsxs/x86_microsoft-windows-notepad_31bf3856ad364e35_6.1.7600.16385_none_6ef0e39ed15350e4
和C:/Windows/winsxs/x86_microsoft-windows-notepadwin_31bf3856ad364e35_6.1.7600.16385_none_42a023025c60a33a两个目录(每个机器和版本的Windows 7目录名不一样,但都类似这两个),除了这两个很长名字的目录外还有其它包含notepad.exe文件的目录不用管。这两个目录上点击右键,管理员取得所有权(步骤二就是导入一个右键菜单项的),然后将已下载汉化版notepad.exe覆盖这两个目录里对应的文件即可,覆盖完成后立刻生效,点击任一文本文件就可以发现已经使用Notepad2打开啦。