目录

thinkphp框架使用sae开发微信应用

目录

thinkphp框架使用sae开发微信应用

hinkPHP的云引擎扩展是为云平台服务的ThinkPHP扩展。通常所说的云平台是指PaaS类型的云计算平台(服务),他们的名称一般叫App Engine 。如新浪的有SAE(Sina App Engine) , 有 BAE(Baidu App Engine),等等。

可以看到当今云计算已经十分流行,但是云计算有两个缺点。

学习成本高: 我们要学习云计算提供的服务怎么使用,每使用一个云平台都需要学习一次。

平台不兼容: 因为我们使用了这个云平台的服务,其他云平台没有和它相同的服务,导致我们的程序对此云平台有依赖, 不能移植到其他云平台,也不能移植到普通环境。

ThinkPHP的引擎扩展出现的目的就是为了解决云计算的两大缺点。降低用户学习成本,让用户只要会使用ThinkPHP就能用所有的云平台,我们还是按照传统使用ThinkPHP的方式,但你已经不知不觉使用了云计算的服务。解决平台兼容性问题,同样的代码既能在普通环境运行,也能在各种云平台上运行。

ThinkPHP原来的SAE引擎,只适合在SAE平台下使用,不能在其他云平台下使用,所以只是一种支持云平台的探索,而Cluster引擎扩展适合所有云平台以及分布式集群环境。

Cluster引擎采用IO分离的机制,实现了一个引擎扩展,通用所有云平台,所有分布式环境,普通环境下也可以运行,真正的打破了云平台不兼容的缺点。开发人员用ThinkPHP的Cluster引擎写出的程序将彻底摆脱对云平台的依赖,从而实现一次编码,多处(云平台)部署。

我们首先需要下载Cluster引擎扩展,选择下载其中任意一个:

如果是下载的引擎扩展,下载后解压缩放入系统的Extend/Engine/目录。

云引擎版本则集成了最新github版本的3.1.2核心包和最新的Cluster引擎扩展,以及常用的驱动和类库扩展。

入口文件定义

新版的引擎扩展无需在入口文件中载入引擎入口文件,和使用标准模式一样载入框架入口文件即可,然后在入口文件定义常量ENGINE_NAME为引擎扩展的名称即可,如定义为:

然后在本地运行你的代码,生成项目目录。

注意:项目目录一定要在本地生成,不可在云平台下生成, 因为云平台往往是不可写的环境。

  1. define

    (

    ‘APP_NAME’

    ,

    ‘App’

    );

  2. define

    (

    ‘APP_PATH’

    ,

    ‘./App/’

    );

  3. define

    (

    ‘THINK_PATH’

    ,

    ‘./ThinkPHP/’

    );

  4. define

    (

    ‘ENGINE_NAME’

    ,

    ‘cluster’

    );

  5. require

    THINK_PATH

    .

    ‘ThinkPHP.php’

    ;

上传代码到云平台

然后将你生成的项目目录和文件以及ThinkPHP的核心文件上传到云平台。因为ThinkPHP Cluster引擎在云平台下不会生成任何文件,因此你无需上传项目的Runtime目录。

下面以SAE和BAE为例,说明如何上传代码到云平台。

上传代码到SAE

将代码上传到SAE可以参考SAE文档:

上传代码后,还需要开启一些服务。

开启Memcahce服务

进入SAE的应用列表:

选择你刚才上传代码的应用。 然后在网站左侧的服务管理处 点击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文件,这个文件已经被修改适合所有云平台。

  1. import

    (

    “@.ORG.UploadFile”

    );

  2. $config

    =

    array

    (

  3. ‘allowExts’

    =>

    array

    (

    ‘jpg’

    ,

    ‘gif’

    ,

    ‘png’

    ),

  4. ‘savePath’

    =>

    ‘./Public/upload/’

    ,

  5. ‘saveRule’

    =>

    ’time'

    ,

  6. );

  7. $upload =

    new

    UploadFile

    (

    $config

    );

  8. if

    (!

    $upload

    ->

    upload

    ()){

  9. $this

    ->

    error

    (

    $upload

    ->

    getErrorMsg

    ());

  10. }

将代码上传到BAE

一样的代码,不仅能上传到SAE,上传到BAE也可以运行,上传到所有其他云平台也可以运行。但BAE目前还在内测,使用需要先获得邀请码, 如果你无法使用BAE,可以测试一下我们已经部署在BAE上的应用:

BAE和SAE一样也可以使用SVN部署代码,在创建应用后会获得一个SVN地址。

上传完代码后,需要开启一些服务。

开启cache服务

进入你的管理中心 进入你刚才上传的应用,在左侧的服务管理处点击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 文件,配置

  1. ‘BUCKET_PREFIX’

    =>

    ’think-'