WordPress,当初之因此研究这个,目的是在于开发一个多租户系统应用。总的来讲,WordPress给了我很多启发和影响。为此,我决定这个研究心得分享出去。php
总的来讲,这篇文章参考了不少朋友们的博客,同时也包括官方网站。css
围绕以下五个大主题进行讨论,其中有些重复了,好比WordPress的安装、插件和主题下载等等,有这方面经验的同窗,能够没必要细看,直接忽略便可,这篇文章你们能够根据本身感兴趣的来看。html
1、WordPress研究..................................................................................................................................... 1前端
1.wordpress介绍java
2.wordpress研究目的mysql
3.wordpress安装git
2、WordPress主题..................................................................................................................................... 1web
1.主题架构图spring
2.主题zip包sql
3.主题上传和下载
4.主题对于Java开发的启示
3、WordPress 插件.................................................................................................................................... 1
1.如何下载和安装插件
2.如何使用插件
3.插件开发带来的好处和弊端
4.wordpress插件开发对于Java开发效率的启示
4、WordPress数据库分析....................................................................................................................... 1
5、WordPress运行原理............................................................................................................................ 1
1、 WordPress研究说明
1.WordPress介绍
WordPress是使用PHP语言开发的博客平台,用户能够在支持PHP和MySQL数据库的服务器上架设属于本身的网站。也能够把 WordPress看成一个内容管理系统(CMS)来使用。
WordPress是一款我的博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP语言和MySQL数据库开发的。用户能够在支持 PHP 和 MySQL数据库的服务器上使用本身的博客。
WordPress有许多第三方开发的免费模板,安装方式简单易用。不过要作一个本身的模板,则须要你有必定的专业知识。好比你至少要懂的标准通用标记语言下的一个应用HTML代码、CSS、PHP等相关知识。
WordPress官方支持中文版,同时有爱好者开发的第三方中文语言包,如wopus中文语言包。WordPress拥有成千上万个各式插件和不可胜数的主题模板样式。
2.研究的目的
学习和研究WordPress的运行机制,致力于提升开发效率,节约开发成本和时间,构建一个高效稳定灵活适应变化的web系统。
3.wordpress的安装
要想使用,必先安装,wordpress的安装很是简单,5分钟安装教程。
环境:Linux+Apache+MySQL+PHP(lamp环境)
说明:演示环境为ubuntu16.04,centos7及其以上与此大同小异
安装步骤:
(1) 安装apache
安装命令:apt-get install apache2
(2) 安装MySQL
安装命令:apt-get install mysql-server mysql-client
(3) 安装PHP
a.安装命令:
apt-get install php7.0
apt-get install libapache2-mod-php7.0
apt-get install php7.0-mysql
b.编辑文件
vim /var/www/html/phpinfo.php
内容为: <?php echo phpinfo();?>
b.重启服务并在浏览器输入对应的地址
service apache2 restart
service mysql restart
浏览器输入:http:// IP地址/phpinfo.php,出现PHP版本界面
这样就表示apache+php是没有问题的
(4) 安装PHPMyAdmin
a.安装命令
sudo apt-get install phpmyadmin
安装时:空格选择apache2,enter肯定,下一步配置数据库,输入密码。
b.软连接关联
sudo ln -s /usr/share/phpmyadmin /var/www/html
c.启用Apache mod_rewrite模块,后面修改wordpress连接会用到
sudo a2enmod rewrite
d.重启服务
service php7.0-fpm restart
e.配置vim /etc/apache2/apache2.conf
配置文件尾部添加以下内容:
AddType application/x-httpd-php .php .htm .html
AddDefaultCharset UTF-8
说明:这里安装phpmyadmin的目的是便于经过web界面添加对应的数据库和增长用户赋予权限
不安装phpmyadmin也是能够的。不安装经过以下步骤也能够完成这个目的。
步骤以下:
# 登陆数据库
mysql -u root -p
# 建立数据库
CREATE DATABASE wordpress;
# 建立数据库用户和密码
CREATE USER wordpressuser@localhost IDENTIFIED BY '123456';
# 设置wordpressuser访问wordpress数据库权限
GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost IDENTIFIED BY '123456';
# 刷新数据库设置
FLUSH PRIVILEGES;
# 退出数据库
exit
(1) 安装WordPress
Wordpress中文版路径为: https://cn.wordpress.org/wordpress-4.8-zh_CN.zip
英文版路径: http://wordpress.org/latest.tar.gz
a.下载
wget +url便可
例如:wget https://cn.wordpress.org/wordpress-4.8-zh_CN.zip
b.解压
unzip latest.tar.gz或unzip wordpress-4.8-zh_CN.zip
c.远程批量传输
sudo rsync -avP /home/test/wordpress /var/www/html/wordpress/
d.修改配置
cd /var/www/html/wordpress
cp wp-config-sample.php wp-config.php
vim wp-config.php
修改内容以下:将其修改成经过phpmyadmin添加的数据库名和用户名及其密码或者是经过命令行添加的数据库名和用户名及其密码。
说明:这里的数据库wordpress,将到时生成对应的11张表。
连接可参考: https://jingyan.baidu.com/article/215817f7b865121edb142365.html
2、 WordPress主题
1.主题架构图
上述架构图是许多模板主题共同的地方
2.主题模板zip包
一般主题模板是以zip包的形式存在,解压后以下所示:
从文件名字咱们也能够推断出其大体做用,就这个主题而言,从上至下,它们的做用分别是:
文件执行顺序:
以主页为例,下面有2个文件 home.php 和 index.php,WordPress 程序会从你的主题文件夹中依次查找这两个文件(后台设置首页显示为”最新文章”的前提下):
3.主题上传或者下载
主题官方下载地址: https://wordpress.org/themes/
主题上传和下载,下载能够就近原则,经过点击后台主菜单外观,进入主题界面,点击添加主题,可经过搜索最近热门或者最新的模板。点击下载便可。不过有一个前提须要经过ftp服务器,遵照文件上传协议,固然也能够经过修改配置文件的方式解决下载主题和插件须要ftp服务器问题。要么ftp,要么服务器配置,主要是指对wp-config.php文件进行修改,否则没法完成下载安装到wp-content下的themes目录下。
4.主题对于Java开发的启示
经过架构图和zip包,简单的概述,与freemarke或者volocity等模板引擎有不谋而合之理,freemarke和volocity是经过事先定义ftl或vm的模板,而后经过前台的配置进行代码生成和页面生成。包括wordpress新增页面或者发布文章等也是同样,能够经过自定义页面进行页面生成和套用主题文章展现模板。
主题就比如模板,面向模板机制开发或套用模板开发。
3、WordPress插件
1.如何下载和安装插件
下载和安装插件很是简单以下图所示:
和上传主题及其下载主题是同样的,都是经过这种安装或者上传zip包的形式。
插件下载官方地址为: https://wordpress.org/plugins/
Wordpress的插件成千上万,近年来,wordpress不仅是在博客领域有不少成就,并且在新闻、电商方面也有不少应用,若是没有插件的话,wordpress功能只是单一的,有了插件就意味着有了无限应用可能。
2.如何使用插件
使用插件前,首先必先安装,即拥有该插件,而后点击插件菜单,进入插件列表,可根据本身的需求,决定启动哪一个插件。
不一样的插件,有不一样的使用方法和应用场景,以WordPress导入工具为例:
经过这种方式,你能够将只要在任何博客系统上的导出对应的xml文件进行导入,你即可以获取该博客对应的全部文章内容相关的信息。一般状况下,适用于wordpress相关的。由于数据库方面设计,即使能够将其余博客系统上的文件导入进来,可是表相关的数据可能会丢失或者在导入的时候会失败。
3.插件开发带来的好处和弊端
插件开发带来的实现不少东西的可能性,同时也伴随着许多弊端, 好比性能上,一个wordpress运行插件过多,会致使性能损失,性能损失最大的体现是网站运行过慢,过慢带来的就是用户点击进入这个网站须要加载很长时间,加载过长影响用户体验,对于以网上写做为生或者是其余传播媒介,会形成很是很差的影响,致使用户丢失。固然了,插件还有一个很大的隐患就是病毒潜伏。Wordpress对于xss攻击或者其余web攻击都具备很是良好的防护性,让对方没有可趁之机,可是插件是近年来出现问题最多的地方。利与弊同时兼之。
4.插件开发对于Java开发有何启示
插件于Java而言就比如maven库的jar包,插件有千千万万,jar包一样如此,每一个插件具备不一样或者类似的功能,jar包也是如此。不一样的jar包具备不一样的功能,好比以hutool为例,hutool这个jar包主要包含java开发所经常使用的工具类,这样对于开发者而言,一般经常使用的加密、日期格式、类型转换、计算、json、I/O等不用本身开发,只需一个依赖便可。而wordpress要想好比第三方微信登陆或者支付相关的等,须要安装对应的插件,wordpress又号称插件式开发。wordpress的插件比如maven的依赖,插件能够由专业人员开发,想使用者可进行支付相关费用,而maven有个叫nexus,又叫maven私服。私服,顾名思义,私人仓库,一般做为公司maven仓库。对外提供相关私服路径,须要引用,除了引用私服的路径以外,再加上依赖名称。以下图所示:
私服方面,能够经过配置本身的仓库赋予对应的角色,可达到保护源代码不被查看的效果。Jeesite就是采用这种策略保护本身的核心代码。
Jeecg的开发思路与wordpress有一个共同之处就是插件式开发
Jeecg的插件:
而该插件实质就是maven依赖,就是各类jar包的集合体。
这种思路能够做为借鉴的地方,仍是以jeecg为例:
首先jeecg的码云地址为: https://gitee.com/jeecg
上述截图为其开源项目,每一个开源项目都是以maven依赖形式存在。
若是要使用,仍是跟平时开发使用spring系列那样,引用对应的依赖名称和版本号便可。若是是私服须要引用私服地址,若是是公共仓库,只需以下所示便可:
<dependency> <groupId>org.jeewx</groupId> <artifactId>jeewx-api</artifactId> <version>1.2.0</version> </dependency>
4、 WordPress数据库
数据库架构图
参考为官方文档地址: https://codex.wordpress.org/File:WP4.4.2-ERD.png
一共为11个表:
wp_commentmeta:存储评论的元数据
wp_comments:存储评论
wp_links:存储友情连接(Blogroll)
wp_options:存储WordPress系统选项和插件、主题配置
wp_postmeta:存储文章(包括页面、上传文件、修订)的元数据
wp_posts:存储文章(包括页面、上传文件、修订)
wp_terms:存储每一个目录、标签
wp_term_relationships:存储每一个文章、连接和对应分类的关系
wp_term_taxonomy:存储每一个目录、标签所对应的分类
wp_usermeta:存储用户的元数据
wp_users:存储用户
表的做用以下:
简要概述:表与平时咱们本身设计的其实差异不是特别大,表的设计关系到数据库的I/O及其CPU使用状况,I/O和CPU使用率太高会致使数据库处理数据缓慢,严重甚至卡死。而wordpress表结构设计也称不上很是合理。
5、WordPress工做原理
原理示意图:
根据原理示意图分析结果以下:
第一步:加载index.php
该文件有效源码以下:
define('WP_USE_THEMES', true);
# 定义是否加载主题文件,true为加载;
require('./wp-blog-header.php');
# 加载wp-blog-header.php文件,该文件用于启动WordPress环境及模板;
第二步:加载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' );
}
解析1:对$wp_did_header进行赋值,这样若是代码块已经执行过,判断就会失败,代码块就不会再执行。这种作法能够确保wp-blog-header.php文件只执行一次(重复执行的话会出现函数名冲突、变量重置等,WordPress会精神分裂的!);
解析2:加载WP根目录下wp-load.php文件,执行初始化工做,如初始化常量、环境、加载类库和核心代码等完成WordPress环境启动工做,如加载wp-includes目录下functions.php(函数库)、class-wp.php(类库)、plugin.php(插件)、pomo目录(语言包)、query.php(数据请求)、theme.php(加载主题文件)、post-template.php(文章模板)、comment.php(评论模板)、rewrite.php(URL重写)等等。
解析3:执行wp()函数,执行内容处理工做,如根据用户的请求调用相关函数获取和处理数据,为前端展现准备数据;
解析4:加载根目录绝对路径下wp-includes目录中template-loader.php文件,执行主题应用工做,如根据用户的请求加载主题模板。
WordPress之因此能将用户请求的页面生成出来,都是最后这三行核心代码起的做用。wp-load.php会完成页面生成所须要的全部环境、变量、API等,至关于作了好准备工做;wp()函数根据用户请求的URL从数据库中取出相应的数据内容备用;template-loader.php把已经准备好的内容用主题所设定的样式展示方式给拼接出来。这三项工做完成,就能够将用户请求的页面展示出来了。咱们姑且将这三项工做也认定为三个大步骤,如下将重点分析。
第三步:加载wp-load.php文件(初始化)
该文件初始化常量(如:定义绝对路径、设定功能文件及内容文件路径等)并加载wp-config.php文件,
加载wp-config.php文件:该文件主要用于配置MySQL数据库通讯信息、设定数据库表名前缀、设定密钥、设置语言及文件绝对路径等,部分核心代码以下(为省事就直接在代码后加#而后解释含义了)
wp-config中还加载了一个重要的文件:wp-settings.php。
wp-settings.php:主要用于建立和定义常见变量、函数和类的库来为WordPress运行作准备,也就是说WordPress运行过程当中使用的大多数变量、函数和类等核心代码都是在这个文件中定义的。这个文件至关于一个总控制器,不少常量定义、函数定义等都是在其余文件中完成,而该文件的做用就是执行那些文件或执行在那些文件中已经定义好的函数。
第四步: 执行wp()函数(内容处理)
在这一阶段,调用wp()函数对数据库内容进行查询,并将查询的内容赋值给一些全局变量,方便在模板中使用模板标签获取相应的数据并展现在前端。
第五步:加载template-loader.php文件(主题应用)
示意图以下:
小结:
虽然如今的博客系统搭建方式有不少种,同时也不得不认可一点,后进者的确比前行者要强,可是有一点不可忽略,那就是站在巨人的肩上,正如当初的牛顿建立了力学三大定律,绝非他一个的功劳而是他善于利用先辈们积累的知识。