简明现代魔法 -> WordPress -> WP 代码分析:wp-config.php

WP 代码分析:wp-config.php

2010-03-14

wp-config.php 文件是WordPress数据库的关键。数据库名、用户名、密码、位置都是在此设置。

通过wp-config.php文件可以更改很多设置,提高WordPress站点的功能、性能、安全度。

<?php
/** 
 * WordPress基础配置文件。
 *
 * 本文件包含以下配置选项: MySQL设置, 数据库表名前缀,
 * 密匙, WordPress语言设定以及ABSPATH. 如需更多信息,请访问
 * {@link http://codex.wordpress.org/Editing_wp-config.php 编辑
 * wp-config.php}Codex. MySQL设置具体信息请咨询您的空间提供商。
 *
 * 这个文件用在于安装程序自动生成 wp-config.php 配置文件,
 * 你可以手动复制这个文件,并重命名为 wp-config.php,然后输入相关信息。
 *
 *
 * @package WordPress
 */

// ** MySQL设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称,替换掉 “putyourdbnamehere” */
define('DB_NAME', 'nowamagic');

/** MySQL数据库用户名,替换掉 “usernamehere” */
define('DB_USER', 'root');

/** MySQL数据库密码,替换掉 “yourpasswordhere” */
define('DB_PASSWORD', '');

/** MySQL主机名 */
define('DB_HOST', 'localhost');

/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');

/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');

/**#@+
 * 身份密匙设定。
 *
 * 您可以随意写一些字符
 * 或者直接访问 {@link https://api.wordpress.org/secret-key/1.1/ WordPress.org Secret-key页面将自动为您生成,任何修改都会导致cookies失效,所以用户必须重新登录}
 *
 * @since 2.6.0
 */
define('AUTH_KEY', '替换该字符串');
define('SECURE_AUTH_KEY', '替换该字符串');
define('LOGGED_IN_KEY', '替换该字符串');
define('NONCE_KEY', '替换该字符串');
/**#@-*/

/**
 * WordPress数据表前缀。
 *
 * 如果您有在同一数据库内安装多个 WordPress 的需求,请为每个 WordPress 设置不同的数据表前缀。
 * 前缀名只能为数字、字母加下划线。
 */
$table_prefix  = 'nowamagic_';

/**
 * WordPress语言设置。默认为英语。
 *
 * 本项设定能够让 WordPress 显示您需要的语言。wp-content/languages 内应放置同名的 .mo 语言文件。
 * 要使用 WordPress 简体中文界面,只需填入 zh_CN。
 */
define ('WPLANG', 'zh_CN');

/* 设定完毕,请保存该文件。 */

/** WordPress目录的绝对路径。 */
if ( !defined('ABSPATH') )
	define('ABSPATH', dirname(__FILE__) . '/');

/** 设置WordPress变量和包含文件。 */
require_once(ABSPATH . 'wp-settings.php');
?>

数据库信息

WordPress链接数据库需设定以下四个值:

在创建数据库前就需准备好数据库名称、用户名、密码,最后一个DB_HOST值可能比较难获得,最常见的是直接用“localhost”, 甚至你可以给数据库服务器指定一个备用端口。例如:

define('DB_HOST', 'localhost:1234');
define('DB_HOST', 'mysql.domain.tld:1234');

还有一种更好的方法就是自动检测数据库服务器值:

define('DB_HOST', $_ENV{DATABASE_SERVER});

数据库字符集和整理(collation)

截至WordPress 2.2版,你可以给MySQL数据库指定字符集。一般来说,不需要修改默认字符集UTF-8,因为它支持所有的语言。注意,如果wp-config.php文件里,这一字符集已经存在,你只能使用此字符集。下面是默认的设置,也是我推荐大家使用的设置:

define('DB_CHARSET', 'utf8');

WordPress 2.2 版本还可以指定collation(校勘/整理),对你的数据库字符集排序。Collation的设置通常由MySQL依据字符集自动处理的,在默认设置里的collation值保留空白就可以。默认的设置:

define('DB_COLLATE', '');

安全密匙

截至WordPress 2.7后有四个安全密匙来加密cookies。这些密匙只需让它默默无闻地工作就好,并尽可能随意和复杂(你无需记住)。生成这些密匙的最简单方法就是通过WordPress官方密匙服务来自动生成。只要点击这个服务,复制并粘贴生成的结果到wp-config.php 文件中即可。注意,这些密匙可随时更改,这样一来,用户之前的cookies会被清除需要重新登陆你的网站。

define('AUTH_KEY', ':dr+%/5V4sAUG-gg%aS*v;&xGhd%{YV)p:Qi?jXLq,<h\\`39');
define('SECURE_AUTH_KEY', '@*+S=8\"\'+\"}]<m#+}V)p:Qi?jXLq,<h\\`39m_(');
define('LOGGED_IN_KEY', 'S~AACm4h1;T^\"qW3_8Zv!Ji=y|)~5i63JI |Al[(<YS');
define('NONCE_KEY', 'k1+EOc-&w?hG8j84>6L9v\"6C89NH?ui{*3\\(t09mumL/fF');

数据库前缀

数据库前缀的设置对提高你的站点安全以及在同一数据库中安装多个WordPress站点都非常有用,通过改变默认值“wp_” 为随机独一的值,可减轻站点受攻击的可能性,总体上提高你的网站安全性。下面是默认值:

$table_prefix = 'wp_';

有很多攻击者就是对准这些默认前缀的数据库进行攻击。稍微修改为如: “x777_”之类的可避免此类攻击。

你还可以使用此设置实现在一个数据库中安装多个WordPress站点,只要给每一个WordPress指定一个单独的数据库前缀即可:

$table_prefix = 'wp1_'; // 第一个博客
$table_prefix = 'wp2_'; // 第二个博客
$table_prefix = 'wp3_'; // 第三个博客

语言设置

WordPress可指定一个语言翻译文件及其相关的目录。语言翻译文件属于 “.mo” 这一类别,其默认位置是 (如果没有明确指定的路径) wp-content/languages (第一)和wp-includes/languages (第二)。下面是默认设置:

define('WPLANG', '');
define('LANGDIR', '');

目录设置

技术上来说,你不太需要关注它。默认的wp-config.php 文件里有几行指定绝对路径并且包含设置文件。我这里提出来,只是为了使这篇文章更完整些:

/** WordPress absolute path to the Wordpress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

博客地址和网站地址

默认的p-config.php中不包含这两个定义,不过为了改善WordPress的性能,还是需要添加的。这两个设置是在2.2版本引进来的。在wp-config.php 中添加者两个定义可降低数据库查询数,提高网站的运行。这些设置需与你的WordPress Admin中的设置一致。下面是一个例子 (所有URL地址不以斜线结尾):

define('WP_HOME', 'http://digwp.com');
define('WP_SITEURL', 'http://digwp.com');

可以使用全局变量动态地设置这些值:

define('WP_HOME', 'http://'.$_SERVER['HTTP_HOST'].'/path/to/wordpress');
define('WP_SITEURL', 'http://'.$_SERVER['HTTP_HOST'].'/path/to/wordpress');

模板路径和样式表路径

设定好博客地址和网站地址后,你还可以通过剔除对模板路径和样式表路径的数据库查询,这样可提高站点的性能。下面是默认的值:

define('TEMPLATEPATH', get_template_directory());
define('STYLESHEETPATH', get_stylesheet_directory());

尽管数据库查询还存在,但我们可以减少多余的查询:

define('TEMPLATEPATH', '/absolute/path/to/wp-content/themes/active-theme');
define('STYLESHEETPATH', '/absolute/path/to/wp-content/themes/active-theme');

禁用缓存和缓存有效期

这两个都是针对旧版本的WordPress,还在使用默认的基于对象的缓存机制。第一个选项是启用或禁用缓存。第二个定义让你指定缓存的到期时间。 启用缓存:

define('WP_CACHE', true); // 启用缓存
define('ENABLE_CACHE', true); // 启用缓存
define('CACHE_EXPIRATION_TIME', 3600); // 单位秒

禁用缓存

define('WP_CACHE', false); //禁用缓存
define('DISABLE_CACHE', true); // 禁用缓存

指定cookies域

会由于很多原因你需要给站点指定cookies域。比较常见的就是阻止子域名上请求静态内容的cookies不必要的传输。这种情况下,你就可以使用此定义告知WordPress只向非静态域发送cookies,这将会大大提高网站的性能。下面是设置各种cookies路径和域的信息:

define('COOKIE_DOMAIN', '.digwp.com'); // 别漏了前面的'.'。
define('COOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('home').'/'));
define('SITECOOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('siteurl').'/'));
define('PLUGINS_COOKIE_PATH', preg_replace('|https?://[^/]+|i', '', WP_PLUGIN_URL));
define('ADMIN_COOKIE_PATH', SITECOOKIEPATH.'wp-admin');

覆盖文件权限

如果你的虚拟主机默认文件权限非常严格,在WordPress配置文件里添加这些定义就可以解决这个问题。注意,数值不需要用引号引起来。下面是例子:

define('FS_CHMOD_FILE', 0755);
define('FS_CHMOD_DIR', 0755);

需要查看所有已定义的常量吗?用下面的PHP函数就会得到一个所有当前一定义常数的数组:

print_r(@get_defined_constants());

自定义用户和usermeta 表

你也可以通过下面的定义自定义用户和usermeta表:

define('CUSTOM_USER_TABLE', $table_prefix.'my_users');
define('CUSTOM_USER_META_TABLE', $table_prefix.'my_usermeta');

FTP/SSH常量

这类定义是用于帮助用户定位和实现FTP/SSH连接。下面是例子:

define('FS_METHOD', 'ftpext'); // 文件系统的方式,包括: "direct"、"ssh"、"ftpext"和"ftpsockets"
define('FTP_BASE', '/path/to/wordpress/'); // 安装根目录的绝对路径
define('FTP_CONTENT_DIR', '/path/to/wordpress/wp-content/'); // 到"wp-content" 目录的绝对路径
define('FTP_PLUGIN_DIR ', '/path/to/wordpress/wp-content/plugins/'); // 到"wp-plugins" 目录的绝对路径
define('FTP_PUBKEY', '/home/username/.ssh/id_rsa.pub'); // 到SSH公匙的绝对路径
define('FTP_PRIVKEY', '/home/username/.ssh/id_rsa'); //到SSH密匙的绝对路径
define('FTP_USER', 'username'); // FTP 或SSH用户名
define('FTP_PASS', 'password'); // FTP用户密码
define('FTP_HOST', 'ftp.domain.tld:21'); //主机名:你的SSH/FTP服务器端口

移动 wp-content 目录

从2.6版本开始,你可以修改wp-content目录的位置。这么做有几个理由,包括可提高网站的安全性,以及便于FTP更新。下面是例子:

// 当前目录的完全本地路径(结尾不包括斜杠)
define('WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'].'/path/wp-content');

// 当前目录的完整URL(结尾不包括斜杠)
define('WP_CONTENT_URL', 'http://domain.tld/path/wp-content');

你也可以另外给wp-content 目录指定一个自定义路径。可以解决一些插件的兼容性问题:

//当前目录的完全本地路径(结尾不包括斜杠)
define('WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'].'/path/wp-content/plugins');

//当前目录的完整URL(结尾不包括斜杠)
define('WP_PLUGIN_URL', 'http://domain.tld/path/wp-content/plugins');

日志修订版的处理

Worepress最新版本提供了一个发布后修改系统,用户可保存不同的博客版本,甚至,如果有需要的话,还可以恢复到先前保存的博客版本。不管你喜欢还是不喜欢这个功能,下面的设置可能都对你有帮助。

限制保存博客版本的数量

define('WP_POST_REVISIONS', 3); // 任意整数,不过不要太夸张。

禁用修订版功能

define('WP_POST_REVISIONS', false);

指定自动保存间隔

跟发布版本功能类似,WordPress其实使用了自动保存功能。默认情况下,WordPress每一分钟自动保存你的作品,不过你完全可以根据需要改变这个数值。不过也注意不要太夸张,以免破坏了你的服务器。

define('AUTOSAVE_INTERVAL', 160); // 单位秒

调试WordPress

自从2.3.1版本以来,有一些错误和警告提示帮助用户调试网站。截止2.5版本, 报错等级提高到E_ALL并有激活对一些函数的警告功能。默认(即,没有在wp-config.php文件中指定任何定义),错误报告被禁用。

define('WP_DEBUG', true); // 启用调试模式
define('WP_DEBUG', false); // 禁用调试模式(默认)

错误日志配置

下面是启用WordPress站点错误日志的一种简单方法。创建一个名为“php_error.log”的文件,使其对服务器可写,并将其放置在你选择的目录下。接着在下面代码中第三行编辑路径,并加入wp-config.php 中:

@ini_set('log_errors','On');
@ini_set('display_errors','Off');
@ini_set('error_log','/home/path/domain/logs/php_error.log');

增加PHP内存

如果你收到错误提示“允许的内存xxx字节已用尽” ,这个设置就对你有帮助了。截至WordPress的2.5版,WP_MEMORY_LIMIT定义,你可以指定PHP使用的最大内存。默认情况下,最大PHP内存是32兆,因此只有要求大于32兆是菜需要更改此设置。注意,有些虚拟主机禁止你提高PHP 内存,所以你得请求他们帮忙。下面是例子:

define('WP_MEMORY_LIMIT', '64M');
define('WP_MEMORY_LIMIT', '96M');
define('WP_MEMORY_LIMIT', '128M');

保存并显示数据库查询以供分析

这个技术可实现保存并显示数据库查询的信息以备后面分析。这个过程保存了每一次查询、相关的函数以及总的执行时间。这些信息都保存为一个数组的形式,并可显示在任何模板页上。不过,首先得在你的wp-config.php 文件添加下面的指令:

define('SAVEQUERIES', true);

然后,在主题的footer上加上下面的代码:

// 只对admin显示查询数组
if (current_user_can('level_10')) {
global $wpdb;
echo "<pre>";
print_r($wpdb->queries);
echo "</pre>";
}

下面是此函数的单行版本:

<?php 
if (current_user_can('level_10')) 
{ 
	global $wpdb; echo "<pre>"; print_r($wpdb->queries); echo "</pre>"; 
} 
?>

限制代理访问

WordPress 2.8及以上版本,可用配置文件定义一些常量,包括封锁、允许、过滤从一个代理服务器访问特定主机。例如,如果你的WordPress站点是联网的, 你需要阻止访问任何外部主机,只允许本地主机访问,使用下面第一个定义。如果你允许特定主机访问,用逗号分隔主机名称即可,像下面第三个定义一样。 注意,请允许api.wordpress.org访问,确保一些核心文件和插件能起到恰当的作用。

define('WP_HTTP_BLOCK_EXTERNAL', true); // 阻止外部请求
define('WP_HTTP_BLOCK_EXTERNAL', false); // 允许外部请求
define('WP_ACCESSIBLE_HOSTS', 'api.wordpress.org'); // 白名单主机
随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们