日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wordpress启动初始化过程

發布時間:2025/1/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wordpress启动初始化过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

???????wordpress是免費開源的用php開發的博客平臺,功能十分強大,中文友好,使用mysql數據庫,安裝非常方便。但是功能強大的同時也帶來笨重、繁瑣的感覺。

這里嘗試分析解讀下wordpress的源碼,也作為自己學習php的筆記。PS:php開發工具推薦zend studio。

wordpress安裝完畢后,在目錄文件如下圖:

訪問wordpress博客,默認定位到index.php文件,打開index.php,代碼非常簡單,就兩行:

define('WP_USE_THEMES', true); require('./wp-blog-header.php');

第一行定義WP_USR_THEMES常量的值為true,第二行包含并運行文件wp-blog-header.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()函數取得當前路徑。這里將剩下代碼入棧1->wp-blog-header.php。

???????進入wp-load.php文件,壓入棧方便記憶1.wp-load.php->2.wp-blog-header.php。這個文件主要用于設置絕對路徑常量,加載wp-config.php文件,進而加載wp-setting.php文件,來建立起wordpress的變量信息。如果wp-config.php沒有找到,會要求安裝者手動進行一些設置。看一下wp-load.php源碼:

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 ); if ( file_exists( ABSPATH . 'wp-config.php') ) {require_once( ABSPATH . 'wp-config.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 installerif ( 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' );// 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 &rsaquo; Error' ) ); }

???????設置常量ABSPATH,error_reporting()函數設置php的報錯級別。然后嘗試加載wp-config.php文件,由于wordpress已經成功安裝,該文件一般是存在的。

???????進入wp-config.php文件,壓棧1.wp-config.php-->2.wp-load.php-->3.wp-blog-header.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文件。壓棧1.wp-setting.php--> 2.wp-load.php->3.wp-blog-header.php。

???????wp-setting.php主要來設置wordpress運行的一些變量和庫文件。

require( ABSPATH . WPINC . '/load.php' ); //加載load.php require( ABSPATH . WPINC . '/default-constants.php' ); require( ABSPATH . WPINC . '/version.php' );

???????wp-setting.php又加載上面三個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-admin,$_SERVER['PHP_SELF']用來取得當前運行腳本的路徑和文件名,strpos()函數取得指定字符串的位置。總之這幾行代碼的作用就是要加載wp-admin/setup-config.php文件,來重新生成wp-config.php文件。setup-config.php文件就是展現安裝時讓你填寫數據庫信息的頁面:

???????對于安裝過程,不再多說。wp-load.php完畢,回到wp-blog-header.php文件,調用WP()函數,進而調用wp-class.php中的main函數。

$this->parse_request($query_args);

上面的函數就是個死循環函數,不斷地接受瀏覽器的請求,進行解析。

轉載于:https://my.oschina.net/u/147181/blog/164824

總結

以上是生活随笔為你收集整理的wordpress启动初始化过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。