分类目录归档:技术

从编译到二进制安装

从编译到二进制安装

很长一段时间以来,安装 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搭建的网站在过去几天里遭到了大规模的暴力破解攻击,攻击者首先扫描互联网上的Wordpress网站,然后利用Web服务器组建的僵尸网络不断尝试用户名和密码试图登录管理界面。
  我想这不是危言耸听,而是真的行动,这几日的确有人不断的在尝试登录我的后台,并逐渐智能地判断出我的登录用户名。
  一开始的扫描是从默认的admin开始的。

网站遭遇大规模暴力破解攻击

  经过不断的试错,或者说,被有心之人盯上了,从而找到了正确的用户名。IP来自于不同的国家,有巴西,捷克,印度等。目前可以知道的是,攻击者是利用肉鸡连续不断的尝试登录后台,企图暴力破解。我的后台显示User Agent是Mozilla/3.0 (compatible; Indy Library)。由于Wordpress的默认后台地址就是wp-admin,所以全部的登录后Redirect都指向后台。
网站遭遇大规模暴力破解攻击

  如何保护自己的小站呢?毕竟是我辛辛苦苦建设的网站,可不想就这么被搞。(由此可见,破坏永远远比建设容易)
  1、常规备份
  我用的是wp-google-drive插件,经过我自己的汉化,同时优化了备份的文件名。常规备份是每天一次。

  2、跟进官网更新
  不管是Wordpress程序还是其插件,需要在第一时间跟进到最新版本。因为WordPress每次升级都包含一些安全措施的修补。如果你没有及时更新,你的网站就存在漏洞,这样的网站就处于危险之中。同理,插件也是。

  3、立即更改密码
  如果你的网站被人暴力破解了,那肯定是因为你设置的密码太弱了。要知道现在一个8位的字母加数字组合,用不了半天就会被破。为此,你需要设置更长更强壮的密码,尽最大可能地用到大小写字母、数字、特殊符号,并且至少要达到15位。真正的密码应该是随机的、毫无意义的字母、数字和特殊符号的组合。

  4、保护/wp-admin/文件夹
  由于WordPress默认的管理后台就是/wp-admin/文件夹,所以我们应该尽可能的避免别人访问这个文件夹里面的文件。在/wp-admin/文件夹里面新建个.htaccess文件,用来限制IP登录吧。

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName “Example Access Control”
AuthType Basic
<LIMIT GET>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
allow from xxx.xxx.xxx.xxx
</LIMIT>

  将xxx.xxx.xxx.xxx换成你当前的IP地址,如果你用的是固定IP则更好,如果不是的话(ADSL常常IP不固定),那只好麻烦一点,每次登录后台前获取一下你的IP地址,然后修改此文件,将当前IP加入该.htaccess文件中。

  网站安全靠个人,为了你的成果,你必须像个斗士一样去保护它。做一些措施,行动起来吧。

CentOS下JDK7和tomcat的安装配置

1、下载地址
http://www.oracle.com/technetwork/java/javase/downloads/index.html
若安装的是32位系统则下载jdk-7u21-linux-i586.rpm;
若安装的是64位系统则下载jdk-7u21-linux-x64.rpm;

2、安装JDK
用root登录,执行

rpm -ivh jdk-7u21-linux-i586.rpm

64位系统则是:

rpm -ivh jdk-7u21-linux-x64.rpm 

操作完成后,默认安装路径应该是/usr/java/jdk1.7.0_21

3、配置JDK

vi /etc/profile

在profile文件下面追加写入下面信息:

export JAVA_HOME=/usr/java/jdk1.7.0_21
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

保存退出,执行:

source /etc/profile

更新 alternatives,选择JDK版本
执行:

update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_21/bin/java 60

然后配置JDK,执行:

update-alternatives --config java

There are 2 programs which provide ‘java’.

  Selection    Command
———————————————–
*  1           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
 + 2           /usr/java/jdk1.7.0_21/bin/java

Enter to keep the current selection[+], or type selection number:

选择我们最新安装的/usr/java/jdk1.7.0_21/bin/java,然后回车。

接下来,输入:java -version 就会看到:
java version “1.7.0_21”
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) Client VM (build 23.7-b11, mixed mode, sharing)

4、下载tomcat
http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.34/bin/apache-tomcat-7.0.34.tar.gz
解压文件,执行:

tar -zxvf apache-tomcat-7.0.34.tar.gz

文件夹重命名,执行:

mv apache-tomcat-7.0.34 tomcat

移动解压后的文件夹。我这里是移动到/data/www目录。

5、配置tomcat

vi /etc/profile

在profile文件下面追加写入下面信息:

export TOMCAT_HOME=/data/www/tomcat/

保存退出,执行:

 source /etc/profile

6、启动tomcat

cd /data/www/tomcat/bin/
chmod +x *.sh
./ catalina.sh start

7、配置防火墙规则,开启8080端口

vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT #允许8080端口通过防火墙

注意:该规则应添加到默认的22端口这条规则的下面。

/etc/init.d/iptables restart #最后重启防火墙使配置生效

最后,在浏览器输入服务器的ip:8080,如下:http://192.168.1.36:8080, 就可以打开tomcat的默认页面了。

关于LAMP安装脚本的一些说明

关于LAMP安装脚本的一些说明

  折腾这个脚本的缘由参照《新站开张》一文。实际上,这个脚本从一开始是参照Linux服务器运维日志的脚本改编而来,改成符合我所做的项目需求,在这里感谢原作者。随着改得越来越多,于是干脆就作为一个项目发布出来,记录自己的折腾的过程,同时如果能给一些需要的人用到,与有荣焉。
  截至今天(2013年4月13日),已经更新到版本1.3.1了。从1.0算起这已经是第6个版本了。前前后后改了这么多,实际上是要根据自己的需求而用,并非版本越新越好。按照从新到旧的顺序,下面是一些说明。
  1、版本1.3.1,只是在1.3的基础上升级了PHP的版本到5.4.14。没办法,我刚测试完版本1.3,PHP官网就更新了,于是也只能及时跟进,幸而编译参数什么的都没变,只是更新了安装包,在脚本里将版本变更一下。本次更新无亮点。
  2、版本1.3,这算是一个重大更新了。将PHP从5.3.x系列更新到5.4.x系列,MySQL从5.5.x系列更新到5.6.x系列。至于最新的是不是最好的,是各有各的说法,有些程序反而和新版本的环境不兼容,所以,要根据实际情况来安装。
  3、版本1.2.1,停留在PHP的5.3.x系列和MySQL的5.5.x系列。官网已经更新PHP到5.3.24了,本版本中的PHP还是5.3.22,打算过段时间再跟进到最新版。
  4、版本1.2,亮点是增加了Xcache的脚本,分别给了两种版本的安装脚本,Xcache3.0.1和Xcache2.0.1。
  5、再往下的版本就不多说了,changelog中有具体说明。需要补充的一点是,我之前没在256MB内存的机器上测试过,今天测试过后发现,在256MB内存的VPS安装最新版1.3.1完全无压力,整个编译安装的过程随着机器配置不同大概在30至40分钟左右。当然,如果你的机器是SSD硬盘,那编译安装时间肯定会大大减少。
  6、随着官网软件的更新,本脚本也会持续跟进。之后还会增加一些新的脚本,比如流行的LNMP,当然,这要看我有没有时间折腾了。

  后记:
  我在折腾这个脚本的时候,参照了大量网上的教程,有时候在编译出错的时候也会抓狂,但只要耐下性子逐一排查,运用google大法都能一一解决。当然,我也在此过程中学到了不少关于Linux、Shell、编译参数等各种知识。
  与此同时,我也折腾上了VPS,蛋疼的买了不少VPS,有的拿来建站有的拿来搭梯子。几个月下来最大的感悟还是那句老话,一分钱一分货。VPS越便宜越容易出问题,老外也不例外。比如上次我买的SwiftVM的VPS,用了不到两天就给我暂停了并给出理由是hacking。然后我发邮件用我那并不熟练的英文要求他们给一说法,前前后后拉锯战一样。在2天的14封邮件后没有给我任何证据又恢复开通了。但是被人怀疑搞非法活动还是相当不爽的。比如这么一句:Have you maybe used it to log in to illegal services, or used it to hide your IP so you could do an illegal activity? 我的英文水平没能好好反驳一下,真是感到非常遗憾。在此也建议玩VPS的人,不要贪便宜,便宜真的没好货。
  貌似有点扯远了。那就这样吧。