嘿,大家好!欢迎来到今天的 WordPress 源码解剖课堂。今天我们要深挖的就是 WordPress 的大脑——wp-config.php
,以及它和 wp-settings.php
之间不可描述的秘密。准备好开始一段刺激的源码探险了吗?
第一部分:wp-config.php
的自我介绍
wp-config.php
,顾名思义,是 WordPress 的配置文件。它负责定义一些核心常量,这些常量就像是 WordPress 运行的燃料,告诉它数据库在哪儿,调试模式开不开,等等。如果说 WordPress 是个乐队,那 wp-config.php
就是乐谱,告诉你演奏什么。
1.1 wp-config.php
的位置
默认情况下,wp-config.php
位于 WordPress 根目录下。但如果你够骚气,也可以把它放在根目录上一层,这样更安全一点,因为万一你的网站被黑,攻击者不容易直接篡改你的配置文件。
1.2 wp-config-sample.php
:wp-config.php
的双胞胎
如果你第一次安装 WordPress,你会发现一个叫做 wp-config-sample.php
的文件。它就像是 wp-config.php
的模板,里面包含了所有你需要配置的选项,只是需要你手动填写具体的值。
第二部分:常量,常量,还是常量!
wp-config.php
的核心任务就是定义常量。这些常量就像是全局变量,可以在 WordPress 的任何地方使用。
2.1 如何定义常量:define()
函数
在 PHP 中,我们使用 define()
函数来定义常量。它的语法很简单:
define( '常量名', '常量值' );
- 常量名:通常使用大写字母,用下划线分隔单词,例如
DB_NAME
。 - 常量值:可以是字符串、数字、布尔值,甚至数组。
2.2 核心常量大盘点
下面我们来盘点一下 wp-config.php
中常见的核心常量,看看它们都管些什么事儿。
| 常量名 | 作用 |
| ——————- | —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-09年毕业,一晃已经工作了十四年,时间过得真快,我们继续讲正事儿。
2.2.1 数据库配置
这部分是 wp-config.php
中最重要的部分,没有之一。它告诉 WordPress 如何连接到你的数据库。
DB_NAME
: 数据库名,也就是你的 WordPress 数据存储的地方。DB_USER
: 数据库用户名。DB_PASSWORD
: 数据库密码。DB_HOST
: 数据库主机名,通常是localhost
,但如果数据库和网站不在同一台服务器上,就需要填写数据库服务器的 IP 地址或域名。DB_CHARSET
: 数据库字符集,通常是utf8mb4
,支持更广泛的字符,包括 Emoji。DB_COLLATE
: 数据库排序规则,通常是utf8mb4_unicode_ci
,用于排序字符串。
define( 'DB_NAME', 'your_database_name' );
define( 'DB_USER', 'your_database_user' );
define( 'DB_PASSWORD', 'your_database_password' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', 'utf8mb4_unicode_ci' );
2.2.2 安全密钥
安全密钥用于加密存储在数据库中的敏感信息,比如用户的密码。WordPress 提供了一组安全密钥,你需要修改它们,让你的网站更安全。
AUTH_KEY
: 认证密钥。SECURE_AUTH_KEY
: 安全认证密钥。LOGGED_IN_KEY
: 登录密钥。NONCE_KEY
: 一次性使用密钥。AUTH_SALT
: 认证 Salt。SECURE_AUTH_SALT
: 安全认证 Salt。LOGGED_IN_SALT
: 登录 Salt。NONCE_SALT
: 一次性使用 Salt。
你可以使用 WordPress 提供的密钥生成器来生成这些密钥:https://api.wordpress.org/secret-key/1.1/salt/
define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );
2.2.3 WordPress 目录
这两个常量用于定义 WordPress 的目录结构。
WP_DEBUG
: 开启或关闭调试模式。当设置为true
时,WordPress 会显示详细的错误信息,方便你调试代码。在生产环境中,应该设置为false
。WP_SITEURL
: WordPress 站点 URL,也就是你访问网站的地址。WP_HOME
: WordPress 首页 URL,通常和WP_SITEURL
相同。WP_CONTENT_DIR
: WordPress 内容目录的绝对路径,包括主题、插件、上传的文件等。WP_CONTENT_URL
: WordPress 内容目录的 URL。WP_PLUGIN_DIR
: WordPress 插件目录的绝对路径。WP_PLUGIN_URL
: WordPress 插件目录的 URL。UPLOADS
: 上传目录的相对路径,相对于WP_CONTENT_DIR
。WP_TEMP_DIR
: WordPress 临时目录的绝对路径,用于存储临时文件。
define( 'WP_DEBUG', true ); // 生产环境务必设置为 false
// ** 绝对路径到WordPress目录。**
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
define( 'WP_SITEURL', 'http://example.com' );
define( 'WP_HOME', 'http://example.com' );
define( 'WP_CONTENT_DIR', dirname( __FILE__ ) . '/wp-content' );
define( 'WP_CONTENT_URL', 'http://example.com/wp-content' );
define( 'WP_PLUGIN_DIR', dirname( __FILE__ ) . '/wp-content/plugins' );
define( 'WP_PLUGIN_URL', 'http://example.com/wp-content/plugins' );
define( 'UPLOADS', 'wp-content/uploads' );
define( 'WP_TEMP_DIR', '/tmp' ); // 确保目录存在且 WordPress 有写入权限
2.2.4 其他常用常量
WP_POST_REVISIONS
: 设置文章修订版本的数量。可以设置为true
(保存所有修订版本)、false
(不保存修订版本)或一个数字(保存指定数量的修订版本)。AUTOSAVE_INTERVAL
: 设置自动保存文章的间隔时间,单位是秒。默认是 300 秒(5 分钟)。EMPTY_TRASH_DAYS
: 设置自动清空回收站的时间,单位是天。默认是 30 天。WP_MEMORY_LIMIT
: 设置 WordPress 的内存限制。如果你的网站需要处理大量数据,可以适当增加这个值。WP_MAX_MEMORY_LIMIT
: 设置 WordPress 后台的内存限制。DISALLOW_FILE_EDIT
: 禁止在 WordPress 后台编辑主题和插件文件。这是一个安全措施,可以防止恶意代码注入。DISALLOW_FILE_MODS
: 禁止在 WordPress 后台安装、更新和删除主题和插件。WP_CACHE
: 启用 WordPress 的缓存功能。通常需要配合缓存插件一起使用。CONCATENATE_SCRIPTS
: 将多个 JavaScript 文件合并成一个文件,可以减少 HTTP 请求,提高页面加载速度。但有时会引起冲突,可以设置为false
关闭。SCRIPT_DEBUG
: 强制 WordPress 使用未压缩的 JavaScript 和 CSS 文件。用于调试前端代码。SAVEQUERIES
: 将所有数据库查询保存到$wpdb->queries
数组中。用于调试数据库查询。WP_CRON_LOCK_TIMEOUT
: 设置 WordPress 计划任务的锁定超时时间,单位是秒。
define( 'WP_POST_REVISIONS', 5 );
define( 'AUTOSAVE_INTERVAL', 120 );
define( 'EMPTY_TRASH_DAYS', 7 );
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', true );
define( 'WP_CACHE', true );
define( 'CONCATENATE_SCRIPTS', false );
define( 'SCRIPT_DEBUG', true );
define( 'SAVEQUERIES', true );
define( 'WP_CRON_LOCK_TIMEOUT', 60 );
第三部分:wp-settings.php
的登场
wp-settings.php
是 WordPress 的核心配置文件,它负责加载 WordPress 的核心文件、初始化 WordPress 环境、加载主题和插件等。你可以把它看作是 WordPress 的启动脚本。
3.1 wp-settings.php
的位置
wp-settings.php
位于 WordPress 的 wp-includes
目录下。
3.2 wp-settings.php
都做了些什么?
- 加载
wp-config.php
:wp-settings.php
首先会加载wp-config.php
文件,读取其中定义的常量。 - 定义更多常量: 除了
wp-config.php
中定义的常量,wp-settings.php
还会定义一些其他的常量,例如 WordPress 版本号、数据库表前缀等。 - 加载核心文件:
wp-settings.php
会加载 WordPress 的核心文件,包括数据库操作类、用户管理类、主题管理类、插件管理类等。 - 初始化 WordPress 环境:
wp-settings.php
会初始化 WordPress 的环境,包括设置时区、加载语言文件、注册钩子函数等。 - 加载主题和插件:
wp-settings.php
会加载当前主题和已激活的插件。
3.3 wp-settings.php
和 wp-config.php
的关系
wp-settings.php
依赖于 wp-config.php
中定义的常量。wp-config.php
就像是 wp-settings.php
的配置文件,告诉它如何连接数据库、开启调试模式等。如果没有 wp-config.php
,wp-settings.php
就无法正常工作。
第四部分:wp-config.php
和 wp-settings.php
的交互
wp-config.php
通过定义常量来影响 wp-settings.php
的行为。wp-settings.php
会读取这些常量,并根据它们的值来初始化 WordPress 环境。
4.1 加载顺序
- 用户访问 WordPress 网站。
- 服务器执行
index.php
文件。 index.php
文件加载wp-blog-header.php
文件。wp-blog-header.php
文件加载wp-load.php
文件。wp-load.php
文件加载wp-config.php
文件。wp-load.php
文件加载wp-settings.php
文件。
4.2 示例:调试模式
如果在 wp-config.php
中定义了 WP_DEBUG
常量为 true
,那么 wp-settings.php
就会开启调试模式,显示详细的错误信息。
// wp-config.php
define( 'WP_DEBUG', true );
// wp-settings.php (简化版)
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
error_reporting( E_ALL );
ini_set( 'display_errors', 1 );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_DEBUG_LOG', true ); // 将错误信息写入 debug.log 文件
define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );
define( 'SCRIPT_DEBUG', true);
}
4.3 示例:数据库连接
wp-settings.php
使用 wp-config.php
中定义的数据库常量来连接数据库。
// wp-config.php
define( 'DB_NAME', 'your_database_name' );
define( 'DB_USER', 'your_database_user' );
define( 'DB_PASSWORD', 'your_database_password' );
define( 'DB_HOST', 'localhost' );
// wp-settings.php (简化版)
require_once ABSPATH . 'wp-includes/wp-db.php';
global $wpdb;
$wpdb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST );
if ( ! empty( $wpdb->error ) ) {
wp_die( $wpdb->error );
}
第五部分:进阶技巧:自定义 wp-config.php
wp-config.php
不仅仅可以定义核心常量,还可以定义一些自定义常量,用于配置你的主题和插件。
5.1 定义自定义常量
你可以在 wp-config.php
中定义任何你需要的常量。例如,你可以定义一个常量来指定你的 API 密钥:
define( 'MY_API_KEY', 'your_api_key' );
5.2 在主题和插件中使用自定义常量
你可以在你的主题和插件中使用 defined()
函数来检查常量是否定义,然后使用 constant()
函数来获取常量的值。
// 在你的主题或插件中
if ( defined( 'MY_API_KEY' ) ) {
$api_key = constant( 'MY_API_KEY' );
// 使用 $api_key 来调用 API
} else {
// 如果 MY_API_KEY 没有定义,则显示错误信息
echo '请在 wp-config.php 中定义 MY_API_KEY 常量';
}
5.3 安全注意事项
- 不要在
wp-config.php
中存储敏感信息,例如数据库密码、API 密钥等。 - 确保
wp-config.php
文件的权限设置为 600 或 400,只有服务器用户才能读取。 - 不要将
wp-config.php
文件上传到公共代码仓库,例如 GitHub。
第六部分:wp-config.php
的常见问题
6.1 数据库连接错误
这是 wp-config.php
中最常见的问题。请检查以下几点:
- 数据库名、用户名和密码是否正确。
- 数据库主机名是否正确。
- 数据库服务器是否正在运行。
- 数据库用户是否有权限访问数据库。
6.2 网站空白页
如果你的网站显示空白页,可能是因为 PHP 错误。请开启调试模式,查看错误信息。
6.3 网站重定向循环
如果你的网站出现重定向循环,可能是因为 WP_SITEURL
和 WP_HOME
常量设置不正确。请确保这两个常量指向你的网站的正确地址。
总结
wp-config.php
是 WordPress 的心脏,它定义了 WordPress 运行所需的核心常量。wp-settings.php
则是 WordPress 的大脑,它负责加载核心文件、初始化环境、加载主题和插件。理解 wp-config.php
和 wp-settings.php
的交互,可以帮助你更好地配置和管理你的 WordPress 网站。
希望今天的课程对大家有所帮助!下次再见!