ThinkPHP">正式发布了云引擎版本,本篇就简单说明下如何使用云引擎扩展。
概述
ThinkPHP的云引擎扩展是为云平台服务的ThinkPHP扩展。通常所说的云平台是指PaaS类型的云计算平台(服务),他们的名称一般叫App Engine 。如新浪的有SAE(Sina App Engine) ,百度有 BAE(Baidu App Engine),等等。
可以看到当今云计算已经十分流行,但是云计算有两个缺点。
学习成本高: 我们要学习云计算提供的服务怎么使用,每使用一个云平台都需要学习一次。
平台不兼容: 因为我们使用了这个云平台的服务,其他云平台没有和它相同的服务,导致我们的程序对此云平台有依赖, 不能移植到其他云平台,也不能移植到普通环境。
ThinkPHP的引擎扩展出现的目的就是为了解决云计算的两大缺点。降低用户学习成本,让用户只要会使用ThinkPHP就能用所有的云平台,我们还是按照传统使用ThinkPHP的方式,但你已经不知不觉使用了云计算的服务。解决平台兼容性问题,同样的代码既能在普通环境运行,也能在各种云平台上运行。
ThinkPHP原来的SAE引擎,只适合在SAE平台下使用,不能在其他云平台下使用,所以只是一种支持云平台的探索,而Cluster引擎扩展适合所有云平台以及分布式集群环境。
Cluster引擎采用IO分离的机制,实现了一个引擎扩展,通用所有云平台,所有分布式环境,普通环境下也可以运行,真正的打破了云平台不兼容的缺点。开发人员用ThinkPHP的Cluster引擎写出的程序将彻底摆脱对云平台的依赖,从而实现一次编码,多处(云平台)部署。
下载
我们首先需要下载Cluster引擎扩展,选择下载其中任意一个:
云引擎扩展单独下载
ThinkPHP云引擎版本下载
如果是下载的引擎扩展,下载后解压缩放入系统的Extend/Engine/目录。
云引擎版本则集成了最新github版本的3.1.2核心包和最新的Cluster引擎扩展,以及常用的驱动和类库扩展。
入口文件定义
新版的引擎扩展无需在入口文件中载入引擎入口文件,和使用标准模式一样载入框架入口文件即可,然后在入口文件定义常量ENGINE_NAME为引擎扩展的名称即可,如定义为: 然后在本地运行你的代码,生成项目目录。
注意:项目目录一定要在本地生成,不可在云平台下生成, 因为云平台往往是不可写的环境。
<?php define('APP_NAME','App'); define('APP_PATH','./App/'); define('THINK_PATH','./ThinkPHP/'); define('ENGINE_NAME','cluster'); require THINK_PATH.'ThinkPHP.php';
上传代码到云平台
然后将你生成的项目目录和文件以及ThinkPHP的核心文件上传到云平台。因为ThinkPHP Cluster引擎在云平台下不会生成任何文件,因此你无需上传项目的Runtime目录。
下面以SAE和BAE为例,说明如何上传代码到云平台。
上传代码到SAE
将代码上传到SAE可以参考SAE文档: http://sae.sina.com.cn/?m=devcenter&catId=212
上传代码后,还需要开启一些服务。
开启Memcahce服务
进入SAE的应用列表: http://sae.sina.com.cn/?m=myapp
选择你刚才上传代码的应用。 然后在网站左侧的服务管理处 点击Memcache,然后开启Memcahe服务即可。
ThinkPHP Cluster在SAE平台使用Memcache存储核心编译缓存,模板缓存以及S缓存。你不用学习SAE的Memcache服务怎么使用, 如果你需要使用Memcache,使用ThinkPHP的S函数即可。
开启KVDB服务
开启KVDB服务和开启Memcahce服务一样,也需要在服务管理处进行开启。
ThinkPHP Cluster将静态缓存,F缓存存入了KVDB,你不用学习SAE的KVDB怎么使用,如果需要使用KVDB,使用ThinkPHP的F函数即可。
创建Storage
ThinkPHP上传文件使用UploadFile.class.php。 在SAE上一样是使用UploadFile类上传文件,用法不变。只是SAE是不可写的环境,文件不会被上传到代码空间而是上传到了Storage 。 我们需要在SAE服务管理处创建storage , storage的domain名称和你的上传路径相关,是你上传路径中的第一个文件夹名称。 比如我们的上传代码如下: 因为上传路径为'./Public/upload/' 第一个文件夹名词为Public, 所以我们需要在SAE创建storage的domain名词为public,然后这段上传代码在本地也能运行,在SAE上也能运行,在SAE上文件被上传到了storage中。
注:1,SAE平台storage的domain不区分大小写,统一小写, 所以domain名称Public 可以不用首字母大写。
2,使用的UploadFile类,请使用首次运行代码生成项目目录中的Lib/ORG/UploadFile.class.php文件,这个文件已经被修改适合所有云平台。
import("@.ORG.UploadFile"); $config=array( 'allowExts'=>array('jpg','gif','png'), 'savePath'=>'./Public/upload/', 'saveRule'=>'time', ); $upload = new UploadFile($config); if(!$upload->upload()){ $this->error($upload->getErrorMsg()); }
将代码上传到BAE
一样的代码,不仅能上传到SAE,上传到BAE也可以运行,上传到所有其他云平台也可以运行。但BAE目前还在内测,使用需要先获得邀请码, 如果你无法使用BAE,可以测试一下我们已经部署在BAE上的应用: http://tpcluster.duapp.com/
BAE和SAE一样也可以使用SVN部署代码,在创建应用后会获得一个SVN地址。
上传完代码后,需要开启一些服务。
开启cache服务
进入你的管理中心 http://developer.baidu.com/dev 进入你刚才上传的应用,在左侧的服务管理处点击cache服务。
然后初始化服务即可。BAE的cache服务实际也是Memcache实现的。
ThinkPHP在BAE上将核心缓存,模板缓存,S缓存存入了Memcache, BAE并没有像SAE的KVDB那样的nosql服务,所以F函数,静态缓存也都存入了Memcache(过期时间是0,永不过期)。
注意: BAE虽然并没有像SAE那样强制环境为不可写的环境。但是我们不要在BAE上写入文件,因为云平台都是分布式环境,写入的文件很容易读取不到。
开启云存储服务
和SAE一样,ThinkPHP在BAE上传文件一样使用UplaodFile类,用法不变。但在BAE文件是被存在云存储中。
在管理中心的左侧点击“我的云服务” , 在新打开的页面的左侧菜单中点击“云存储”,在这里需要创建bucket, 这里的bucket 就相当于是SAE storage的domain。 Bucket的名称和你的上传路径相关,是你路径中的第一个文件夹名称。 如果上传路径是 ./Public/upload/ 按理说 我们要建立一个名为public的bucket,但是BAE的存储的bucket要求是全局唯一的, 别人创建了一个名为public的bucket,你就不能再创建了。 所以我们要加上前缀。 假设我们的前缀为“think-” , 创建的bucket名词为 “think-public” (和SAE一样,名词全部小写) 。 而这个think- 的前缀需要在 BAE配置文件中配置。编辑你项目目录下 Conf/config_bae.php 文件,配置
'BUCKET_PREFIX'=>'think-'