减价出售
WordPress运行原理分析之执行过程
了解WordPress的工作原理,它是如何将数据显示出来的,程序里的文件执行顺序是什么,通过Web服务器的rewrite规则(就是路由)实现的。然后通过index.php文件一步步引导WordPress环境启动,再分析请求URL返回相应数据所组成的前台页面。以下将一步步分析源码文件,以此来了解wordpress执行过程及工作原理。
- 第一步,先剖析根目录的index.php,wordpress主题所有的页面都要经过根目录下的index.php文件
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
第一行首先定义了一个常量WP_USR_THEMES,并将其值设置为true
第二行加载了wp-blog-header.php文件。
- 第二步、查看index.php中引入的wp-blog-header.php的内容
if ( !isset($wp_did_header) ) {
$wp_did_header = true;
require_once( dirname(__FILE__) . '/wp-load.php' );
wp();
require_once( ABSPATH . WPINC . '/template-loader.php' );
}
代码解释:检测 $wp_did_header是否设置,由于是首次执行,没有设置,进入if语句。定义$wp_did_header变量,然后包含并运行当前目录下的 wp-load.php 文件。
__FILE__取得当前文件的路径和文件名
dirname()函数取得当前路径
wp-load.php是设置 ABSPATH 常量和加载wp-config.php文件的引导文件
wp-config.php会加载wp-settings.php文件。
wp-settings.php文件会建立WordPress运行环境。
如果 wp-config.php 文件没有找到,会提示一个错误,并让用户去建立一个 wp-config.php 文件。
这个文件也会在 WordPress 目录下搜索 wp-config.php 文件,让 WordPress 的目录保持不变。
- 第三步、分析wordpress执行过程wp-load.php文件代码:
// dirname(__FILE__) 即当前路径,将'当前路径/' 定义为 ABSPATH
define( 'ABSPATH', dirname(__FILE__) . '/' );
error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
// 如果当前目录下 wp-config.php 存在的话
if ( file_exists( ABSPATH . 'wp-config.php') ) {
require_once( ABSPATH . 'wp-config.php' );
}
// 如果 wp-config.php 不存在,并且 wp-settings.php 存在
elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-settings.php' ) ) {
require_once( dirname(ABSPATH) . '/wp-config.php' );
} else {
// A config file doesn't exist
// Set a path for the link to the installer
if ( strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false ) $path = 'setup-config.php';
else
$path = 'wp-admin/setup-config.php';
define( 'WPINC', 'wp-includes' );
define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
// 将以下文件包含进来,建立 wordpress 安装环境
require_once( ABSPATH . WPINC . '/load.php' );
require_once( ABSPATH . WPINC . '/version.php' );
wp_check_php_mysql_versions();
wp_load_translations_early();
require_once( ABSPATH . WPINC . '/functions.php' );
// Die with an error message
$die = __( "There doesn't seem to be a <code>wp-config.php</code> file. I need this before we can get started." ) . '</p>';
$die .= '<p>' . __( "Need more help? <a href='http://codex.wordpress.org/Editing_wp-config.php'>We got it</a>." ) . '</p>';
$die .= '<p>' . __( "You can create a <code>wp-config.php</code> file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file." ) . '</p>';
$die .= '<p><a href="' . $path . '" class="button">' . __( "Create a Configuration File" ) . '</a>';
wp_die( $die, __( 'WordPress › Error' ) );
}
- 第四步、wp-config.php 是 wordpress的配置文件,包含数据库等一些信息
设置数据信息:
define('DB_NAME', 'wordpress');//数据库名
define('DB_USER', 'root');//数据库用户名
define('DB_PASSWORD', 'toor');//数据库密码
define('DB_HOST', 'localhost');//数据库主机
define('DB_CHARSET', 'utf8');//数据库字符编码格式
随后是define一些cookies设置,还有一个设置数据库表前缀和wordpress多语言设置等:
$table_prefix = 'wp_';
define('WPLANG', 'zh_CN');
后面还有一个确认开发者模式是否开启
wp-setting.php 主要来设置 wordpress 运行的一些变量和库文件。
require( ABSPATH . WPINC . '/load.php' ); //加载load.php
require( ABSPATH . WPINC . '/default-constants.php' );
require( ABSPATH . WPINC . '/version.php' );
load.php 声明了 wordpress 需要的很多函数,没有什么动作执行。
default-constants.php声明了一些可以被重写的函数。
version.php 定义了wordpress需要的组件的版本信息。
然后是调用 load.php,default-constants.php中的函数
wp_initial_constants( );//初始化wordpress的一些信息,如内存大小、调试模式和cache情况等
wp_check_php_mysql_versions();//检查本地的mysql是否符合要求
// Disable magic quotes at runtime. Magic quotes are added using wpdb later in wp-settings.php.禁用魔法引号
@ini_set( 'magic_quotes_runtime', 0 );
@ini_set( 'magic_quotes_sybase', 0 );
// Set default timezone in PHP 5.设置时区
if ( function_exists( 'date_default_timezone_set' ) )
date_default_timezone_set( 'UTC' );
// Turn register_globals off.
wp_unregister_GLOBALS();
// Ensure these global variables do not exist so they do not interfere with WordPress.
unset( $wp_filter, $cache_lastcommentmodified );
// Standardize $_SERVER variables across setups.
wp_fix_server_vars();
// Check if we have received a request due to missing favicon.ico
wp_favicon_request();
// Check if we're in maintenance mode.
wp_maintenance();
// Start loading timer.
timer_start();
// Check if we're in WP_DEBUG mode.
wp_debug_mode();
// 加载cache文件
if ( WP_CACHE )
WP_DEBUG ? include( WP_CONTENT_DIR . '/advanced-cache.php' ) : @include( WP_CONTENT_DIR . '/advanced-cache.php' );
// 设置语言文件路径
wp_set_lang_dir()
后面又加载了一些 php 文件:
require( ABSPATH . WPINC . '/compat.php' );//兼容之前的版本,声明一些可能不存在的函数
require( ABSPATH . WPINC . '/functions.php' );//声明了大量的函数,wordpress的函数几乎都在里面
require( ABSPATH . WPINC . '/class-wp.php' );//声明wordpress的类,main就是在这里声明的
require( ABSPATH . WPINC . '/class-wp-error.php' );//声明了错误处理的函数
require( ABSPATH . WPINC . '/plugin.php' );//获取插件信息
require( ABSPATH . WPINC . '/pomo/mo.php' );//mo语言库
- 第五步、了解class-wp.php文件,这个是wordpress的sql语句查询拼装类,并且包含了一些其他的查询函数,如下:
function main($query_args = '') {
$this->init();//初始化环境
$this->parse_request($query_args);//解析请求
$this->send_headers();
$this->query_posts();
$this->handle_404();
$this->register_globals();
do_action_ref_array('wp', array(&$this));
}
这些函数都是通过wp-blog-header.php中的wp()函数调用。后面 wp-setting.php 文件又初始化了一些全局变量,初始化了 WP 对象,并初始化。
$wp = new WP();
$wp->init();
回到 wp-load.php 文件。这是 wp-config.php 文件存在的情况。
如果 wordpress 安装不完全造成该文件不存在,就会进入 elseif 流程,elseif 中首先判断wp-config.php是否存在父目录中,如果父目录不是的另一个wordpress版本,就从父目录加载 wp-config.php。
最后进入else流程,没有找到 wp-config.php 文件,因为 wp-config.php 文件包含了数据库等必不可少的信息,所以程序无法进行下去,就要求用户重新设置 wp-config.php 文件。
if ( strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false )
$path = 'setup-config.php';
else
$path = 'wp-admin/setup-config.php';
define( 'WPINC', 'wp-includes' );
define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
require_once( ABSPATH . WPINC . '/load.php' );
require_once( ABSPATH . WPINC . '/version.php' );
wp_check_php_mysql_versions();
wp_load_translations_early();
require_once( ABSPATH . WPINC . '/functions.php' );
加载指定的文件来重新生成 wp-config.php 文件。
wp-load.php 完毕,回到 wp-blog-header.php 文件,调用 WP() 类,进而调用wp-class.php中的main主函数查询,以便在每个页面输出对应的数据信息。以上就是wordpress的整个运行机制,了解运行机制才能更加的了解wordpress核心源码,为我们在主题开发中更加顺利。
热销主题
查看更多减价出售
减价出售
减价出售