[Pi] Pi系统简介及安装
标签:
pi安装pi特征基本运行机制 |
分类: Pi-Engine |
1. 引言
Pi Engine是一个Web与移动应用快速开发平台。它的原名为Xoops Engine,从它原来的名字就可以看出,这个应用是在XOOPS的基础上发展起来的,也被称作为下一代的XOOPS。
因此,我们有必要先认识下什么是XOOPS?XOOPS是对eXtensible, Object, Oriented, Portal, System这几个单词的简写,这些单词的直译就是面向对象的可扩展门户系统,也就是一个强大的基于web的内容管理平台。XOOPS是一个开放源代码的工具程序,用于实现从小型到大型的动态交互社区,公司门户,企业内部网,网络日志等。安装到服务器主机后,网站管理员可以登陆到管理区,通过浏览器来管理内容信息。后台管理手段直观易用,不需要任何编程,而且XOOPS还提供了方便的安装程序。XOOPS是一个软件包,是一个网站群和一个遍布世界、非常友善的支持社区。而将这三者紧密联系在一起的是WEB-互联网的图形界面。
XOOPS项目组成立于2001年,到2003年升级到2.0版本后,中间经过近七年的时间升级到了XOOPS2.5。在Pi Engine之前XOOPS也发布了XOOPS3.0版本。由于中间停滞造成的开发人员的流失让XOOPS不得不面临两大问题:系统更新缓慢,并处于过期状态;很难赶上当前互联网的发展速度。正因为此,Pi Engine也应运而生。
2. Pi Engine的特点
之前已经介绍过Pi Engine是从XOOPS发展而来,因此它也继承了XOOPS基本特点:面向对象、可扩展、直观易用。当然Pi Engine的出现也是为了弥补XOOPS的不足,因此Pi Engine给自己定义了新的特点:
l
l
l
l
l
l
l
l
l
3. 对于开发者和用户,Pi能做什么
对于开发者,Pi Engine力争实现一个通用的开发平台,它希望大部分开发者通过对代码的扩展,可以实现自己的需要,根据现Pi Engine的功能,这里对Pi Engine完成基本互联网开发外,所提供的可扩展功能做了如下的概括:
l
l
l
l
l
通过上面的基本介绍,大家应该对Pi Engine的概念有一个直观的了解,在后面的章节里,本教程将会以开发者的角度更详细、更系统地介绍Pi Engine,让开发者能够更快地学会使用Pi Engine。
4. 安装Pi Engine
4.1 环境配置
Pi Engine的安装需要一些必要的软件以及环境配置,下面列出了一些基本的软件及其版本:
l
l
l
这里的‘+’表示所写版本及以上的意思。如果环境是要Win下运行,建议安装集成软件包WAMP,即Win+Apache+MySQL+PHP。下面也主要以WAMP为例,下载地址为:
选择5.3或者5.4版本,之后我们会用到apc扩展,由于目前没有支持64位的apc扩展,因此WAMP需要选择32位版。
Pi安装时要求开启APC(php_apc.dll)扩展以及rewrite_module选项,因此在安装完WAMP后,需要添加相应的扩展,php_apc.dll的下载地址为:
http://downloads.php.net/pierre/
所选择的版本应该与WAMP里的Compiler, Thread Safety以及PHP版本均一致的扩展包,例如,查看phpinfo的第一项内容,看到Compiler为MSVC9,PHP版本为5.3.13,因些需要下载php_apc-3.1.10-5.3-vc9-x86.zip文件,而Thread Safety项为enable,因此将解压后的ts文件夹下的apc文件拷到wamp安装目录下的bin\php\php5.3.13\ext文件夹下,之后需要退出wampServer,重新启动wampServer后在PHP extension里就可以看到apc项,最后在wampServer里将apc扩展打勾即可(WAMP会自动重启)。
http://s8/mw690/46d39f48tdd8d1051d357&690Pi系统简介及安装" TITLE="[Pi]
图1-1 APC配置
如果当前的操作系统为WinXP,则需要相应的APC扩展,下载地址为:
http://belsky.info/uploads/my/bugz/61984/php_apc-3.1.10-5.3-vc9-x86-xp.zip
之后还需要勾选rewrite_module选项。
http://s13/mw690/46d39f48tdd8d104c1cac&690Pi系统简介及安装" TITLE="[Pi]
图1-2 配置rewrite_module
这样,Pi Engine在Windows上所需要的基本环境就搭建完成了。
4.2 源码获取
Pi Engine的源码可以通过svn获取,也可以从github上下载,先介绍下svn获取方式。
使用SVN获取源码需要先安装SVN相关软件,这里我们使用Subversion软件,下载地址为:
http://subversion.apache.org/download/#supported-releases
安装完Subversion软件后,点击右键就可以看到SVN的相关操作选项,现在就可以从SVN上下载Pi Engine源码了。
进入WAMP的安装目录后,进入www文件夹下,点击右键,在出现的菜单项里选择“Check out...”选项,在弹出的对话框里的Repository url表单里填入以下地址:
http://svn.xoopsengine.org/branches/Pi/
点击确定后,会要求输入用户名和密码,用户名和密码分别是:
之后就是等待源码下载了。
而github上下载源码则更简单了,登陆https://github.com/pi-engine/pi/,然后点击页面的zip按钮,下载完后将文件解压,然后放在WAMP的安装目录的www文件夹下即可。
至此,运行环境和源码都已经准备好了,接下来就是安装Pi Engine了。
4.3 安装Pi
到现在就应该可能安装Pi了,不过先别着急,我们还需要先配置好数据库,以便系统将默认数据表及数据写入数据库。
在MySQL里创建一个数据库,名字可任意,但别忘了将数据库的字符编码集设为UTF8。同时还需要设置数据库的权限。
现在就可以开始体验Pi Engine为用户准备的类似Wordpress的五分钟快速安装。假设目前您用的是本地环境,也没有设置虚拟主机,即访问服务器的根目录只需在浏览器的地址栏键入localhost。您就可以通过访问下面的url开始安装:localhost/{Pi Engine package name}/www/setup。整个安装过程只需要配置四个地方:
http://s1/mw690/46d39f48tdd8d10541900&690Pi系统简介及安装" TITLE="[Pi]
图1-3 安装语言环境
第一步为基本配置,Language Selection主要配置系统的语言,之后访问页面时,系统会自动将英文转换成您所选择的语言。而Server setting detection列出环境配置是否正确,确认后面有一个绿色的对勾,就可以进入下一项了。
http://s6/mw690/46d39f48tdd8d105df665&690Pi系统简介及安装" TITLE="[Pi]
图1-4 配置路径
第二步为配置系统会用到的一些路径以及想要为系统使用的缓存机制。
http://s3/mw690/46d39f48tdd8d10683dc2&690Pi系统简介及安装" TITLE="[Pi]
图1-5 采用配置静态目录的二级域名
在Advanced settings列表中,asset, upload和static目录可以用二级域名的形式,如果这样指定,将需要将Pi Engine的www目录下相应的文件夹放到二级域的根目录下。
而Persistent data container里可以根据自己的情况选择相应的缓存机制。
http://s10/mw690/46d39f48tdd8d107d9b49&690Pi系统简介及安装" TITLE="[Pi]
图1-6 配置数据库
第三步也就是数据库配置,正确配置数据库信息后,系统将会把默认的数据都写进这个数据库里。其中Database name就是我们在安装之前所创建的数据库名称,而Table prefix可以选择生成的随机数,也可以手动填写。加表前缀主要是出于安全因素。
http://s1/mw690/46d39f48tdd8d107de900&690Pi系统简介及安装" TITLE="[Pi]
图1-7 配置帐号
第四步,也就是最后一步,主要配置Pi Engine的超级管理员帐号,这个帐号将具有所有权限。点击Next后,如果安装成功将会出现以下页面:
http://s10/mw690/46d39f48tdd8d107d5559&690Pi系统简介及安装" TITLE="[Pi]
图1-8 安装成功
安装成功之后,就可能开始访问Pi Engine系统了,访问localhost/{Pi Engine package name}/www,就可以登陆前台页面,在首页登陆后,就可以看到导航栏里多了一个Admin Area菜单,这就是后台的入口。
5. Pi Engine的目录结构
l
l
l
l
这4个文件夹分别有不同的作用。下面我将会逐一介绍这几个文件夹及文件夹下文件的作用。
lib文件夹存放的是Pi的所有库文件,这也是和框架开发者相关的一个文件夹。这里面主要由四部分组成,Pi库,Zend库,vendor和Pi.php文件。
其中Pi.php定义了一个Pi类,是整个框架最核心的部分。在PHP框架的概念里,它相当于前端控制器,所有外部的请求都需要通过它作相应的处理。也就是这个类负责将外部请求所需要的所有资源集中起来,并作统一处理,最终解析成浏览器能识别的标标签并呈现给用户。这里需要介绍一个概念:单例模式,即在整个程序运行的过程中只有一个实例,采用单例模式可以这样理解,一个请求其实需要的是一份数据,这一份数据不应该由多个总控制器来操作,否则对于同一份资源,在不同的实例中的结果就不一样。Pi这个类就很好地采用了单例模式。打开Pi.php可以看到,它里面所有的变量和方法都定义成了static:
lib/Pi.php
...
protected static $engine = null;
...
Public static function init()
{
}
...
静态的意思就是这些变量和方法只与类相关,而跟实例化后的对象无关。即不论你将类实例化多少次,分别在里面调用这些变量或方法的话,它们在内存都指向同一地址。关于Pi类内部的方法,在后面的章节里会详细介绍。
Zend库就是Zend framework 2.0库,之前已经介绍过,Pi Engine是对Zend Framework的扩展。也就是整个框架的主体逻辑及流程都是来自Zend。
Pi库就是对Zend库部分功能的继承和扩展,使用其符合Pi系统,同时这里面也定义Pi Engine运行时所需要的其他类库。如Pi/Application/Host.php里就提供了获取系统主要目录的URL的方法,Pi/Application/Config.php提供了获取系统配置的方法等。这些类库在Zend里没有定义,需要自己扩展。也就是这里的类库实现了Pi Engine自己的逻辑。
vendor文件夹定义为include path,可以在Pi.php的init()方法里看到:
lib/Pi.php
...
public static init()
{
}
这样include(), require()等函数就可以在这里面查找文件了。这个文件夹主要存放第三方代码包,用于对系统的扩展。
usr文件夹是与模块开发者(包括前端开发和后端开发)紧密相关的一个文件夹。这个文件夹里主要由三部分组成:locale, module和theme。
locale存放的是本地化文件,也就是系统语言至本地语言的翻译文件,这是一个全局的本地化,因为对于模块或主题都分别有自己的本地化文件。对于系统的一些语言的本地化就可以放在这个目录下。
module文件夹存放的就是所有模块代码,从Zend 2.0开始就支持模块化,这也实现了不同功能块之间的解耦,方便代码维护。而每一个模块也是一个独立的功能块,可以根据情况添加或删除,而不影响其他功能块。比如我们在网上写文章的时候会看到有添加文章标签的选项,这样就可以把文章和标签分别作为一个模块:article和tag。文章添加标签时,只需要调用tag模块的相关对外接口,而标签的管理都在tag模块进行。这样如果有一天要去掉标签功能,只需要注释掉article模块里调用tag模块的接口就可以了。而标签模块化后,它也可以为其他的模块提供服务,而不仅仅是文章的一部分。
theme文件夹存放着系统或者模块所需要的主题,这目录主要由前端开发者负责开发的。一个主题也是一个文件夹的形式存在,主题也是支持安装和卸载的,用户可以根据自己的情况开发主题并更换。
模块开发这部分的具体内容在下面的章节里都会详细介绍。
5.3 var
var文件夹主要与运维人员相关,里面存放了系统的配置文件,缓存文件和日志文件等。这个文件夹在安装之后可以放置到其他地方进行管理,但在安装时需要设置这个文件夹更改后的url和路径,或者安装后去var/config/host.php里更改。即
http://s6/mw690/46d39f48tdd8d215ec675&690Pi系统简介及安装" TITLE="[Pi]
图1-9 var目录路径配置
http://s4/mw690/46d39f48tdd8d2301ec83&690Pi系统简介及安装" TITLE="[Pi]
图1-10 var/config/host.php文件里的var路径
这个目录下主要有三个文件夹:cache, config和log。
cache目录主要是存放缓存数据,如果安装时选择了缓存方式为File system,缓存的数据将会保存在这个目录里,其他缓存方式则不会。这个目录不需要人工干预。
config目录系统运行时的配置信息,如application.front.php会保存用户访问前台(简单理解,前台就是给用户浏览的,后台用于管理员管理的)页面时需要加载的资源,服务等,配置信息在一个请求的时候将会被写入变量里。
需要说明的是:engine.php, host.php和service.database.php这三个文件在安装完之后会被更改,因为这三个文件分别存放缓存机制、主要目录的路径和URL、数据库配置信息,这些数据是安装时用户填选的。
5.4 www
www目录相当于服务器的根目录,这里面的文件都可以被任意用户读取,因些这里面存放的是请求的入口文件、css, js等静态文件以及用户上传的文件。这个目录的主要文件有:
l
l
l
l
l
l
l
l
l
l
l
.htaccess为Apache服务器中的一个配置文件,它负责相关目录下的网页配置。在这里通过它的Rewrite规则来判断是将所访问的url分配到哪个入口。比如:www.eefocus.com/admin分配置到admin.php,www.eefocus.com/feed分配到feed.php等。
admin.php为后台的入口,它也告诉程序这个url是要访问后台(admin)。
feed.php为feed的入口,feed和前台(front)、后台(admin)同样,都是一个(区)section。这个区目前实现的功能有RSS订阅。
app.php是当之前的admin、feed以及index.php都没匹配到,所使用的入口,这个入口也默认为前台(front)入口。
boot.php文件是一个中间入口,文件的内容决定了是要跳转到安装页面还是继续访问用户请求的页面,这个文件在安装之后将会被更改。同时这个文件开始调用前端控制器(Pi),执行用户请求。
asset目录存放的是模块的静态文件如js/css/image等,这些静态文件在模块安装后会自动发布到这个目录下,当然用户也可以到后台手动将模块的静态文件发布过来。
http://s15/mw690/46d39f48tdd8d2639f7be&690Pi系统简介及安装" TITLE="[Pi]
图1-11 Pi后台重新发布静态文件界面
script目录和static目录都可以放系统的静态文件,目前存放规则没有要求,因为这些文件的调用都需要用户自己用代码实现。
setup目录存放了系统安装的所有库文件,若用户没安装Pi,则会跳到这个目录里的index.php执行安装。
upload目录存放用户上传的文件。
这些目录里,upload和static文件夹可以部署到其他路径下,同样也需要在安装的时候更改其路径和url。或者安装后去var/config/host.php里更改。
http://s7/mw690/46d39f48tdd8d29f57d86&690Pi系统简介及安装" TITLE="[Pi]
图1-12 静态文件目录配置
6. 总体流程概要
Pi的核心思想继承自Zend,因此其运行机制也与Zend相似,当然Pi作为一个平台式开发系统,还需要对Zend进行扩展。下面是一次请求的总体流程图,我们将会结合这个图先大概了解下基本的运行机制。
http://s6/mw690/46d39f48tdd8d2b796fd5&690Pi系统简介及安装" TITLE="[Pi]
图1-13 Pi Engine框架的程序框图
这个图描述了系统运行的大致流程,当一个请求过来时,在htaccess文件里确定请求的入口文件,也就在入口文件里定义了请求的区(section),之后就将执行权交给前端控制器(Pi类)。
前端控制器先从配置里获取主要文件的路径和URL并保存到静态变量里,之后会定义文件自动加载机制以及其他配置文件,完成这些后,第一步数据初始化也就完成了。
接下来,前端控制器会定义一个engine的句柄(也就是一个实例,这里套用C++的概念),然后将控制权交给这个句柄,这个句柄将会完成接下来的数据初始化和系统运行。也就是这个句柄将会成为调用系统初始化数据的入口。在下面的操作中,该句柄将会加载系统需要的服务、资源以及将系统后面要执行的函数作为事件写入事件驱动机制。
完成所有的初始化后,engine句柄将会调用event对象并接优先及触发所有事件,执行之前加载的函数,并最终将数据输出。
从这个流程可以看出,整个Pi系统的执行可分为两大步,数据初始化和系统运行。

加载中…