我在本地新建的一個WordPress,已經進行過配置,肯定能夠訪問,整個目錄結構是這樣的php
訪問一個wordpress 最早應該進入到index.phpmysql
define('WP_USE_THEMES', true); require('./wp-blog-header.php');
第一行定義WP_USR_THEMES常量的值爲trueweb
第二行包含並運行文件wp-blog-header.phpsql
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__取得當前文件的路徑和文件名wordpress
dirname()函數取得當前路徑函數
wp-load.php是設置 ABSPATH 常量和加載 wp-config.php 文件的引導文件post
wp-config.php 會加載 wp-settings.php 文件。ui
wp-settings.php 文件 會創建 WordPress 運行環境。
若是 wp-config.php 文件沒有找到,會提示一個錯誤,並讓用戶去創建一個 wp-config.php 文件。
這個文件也會在 WordPress 目錄下搜索 wp-config.php 文件,讓 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一些身份密鑰,再也不解釋。設置數據庫表前綴和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文件中聲明的主函數:
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函數。
$this->parse_request($query_args);
上面的函數就是個死循環函數,不斷地接受瀏覽器的請求,進行解析。