thinkphp 应用 迁移至 sae 记录

公司项目打算迁移至sina sae 特把迁移日志记录下,其中需要修改一些thinkphp的文件

代码部署之后

修改 memcache 实例化方法

$mem = memcache_init();

修改mysql配置

//'配置项'=>'配置值'        'APP_DEBUG' => true,        'APP_GROUP_LIST' => 'Api,Home,Admin,m',        'DEFAULT_GROUP'  => 'Home',        'DB_TYPE'   => 'mysqli',        'DB_HOST'   => SAE_MYSQL_HOST_M,        'DB_NAME'   => SAE_MYSQL_DB,        'DB_USER'   => SAE_MYSQL_USER,        'DB_PWD'    => SAE_MYSQL_PASS,        'DB_PORT'   => SAE_MYSQL_PORT,        'DB_PREFIX' => 'i_',

修改缓存功能

修改文件/ThinkPHP/Lib/Think/Template/ThinkTemplate.class.php

public function loadTemplate ($tmplTemplateFile='')
{
$s = new SaeStorage();
$s->_accessKey = '*';
$s->_secretKey = '***';

if(empty($tmplTemplateFile)) $tmplTemplateFile = $this->config['default_tmpl'];
if(!is_file($tmplTemplateFile)){
$tmplTemplateFile = dirname($this->config['default_tmpl']).'/'.$tmplTemplateFile.$this->config['template_suffix'];
if(!is_file($tmplTemplateFile))
throw_exception(L(
'_TEMPLATE_NOT_EXIST_'));
}
$this->templateFile = $tmplTemplateFile;

//根据模版文件名定位缓存文件
$tmplCacheFile = md5($tmplTemplateFile).$this->config['cache_suffix'];
$tmplContent = '';
// 检查Cache文件是否需要更新

if (!$this->checkCache($tmplTemplateFile)) {
// 需要更新模版 读出原模板内容
$tmplContent = file_get_contents($tmplTemplateFile);
//编译模板内容
$tmplContent = $this->compiler($tmplContent);
// 检测分组目录
//if(!is_dir($this->config['cache_path']))
// mk_dir($this->config['cache_path']);
//重写Cache文件


if( false === $s->write('cache',$tmplCacheFile,$tmplContent))
throw_exception(L(
'_CACHE_WRITE_ERROR_'));
}

return 'http://hxpai-cache.stor.sinaapp.com/'.$tmplCacheFile;
}



protected function checkCache($tmplTemplateFile)
{
$s = new SaeStorage();
$s->_accessKey = 'jn4wlon5xl';
$s->_secretKey = 'y45w55mwyx0m1k3w00xz20jymz3xikjlxw21xiy1';

if (!$this->config['tmpl_cache']) // 优先对配置检测
return false;

$tmplCacheFile = md5($tmplTemplateFile).$this->config['cache_suffix'];
$fileinfo = $s->getAttr('cache',$tmplCacheFile);

if(!$s->fileExists('cache',$tmplCacheFile)){
return false;
}
elseif (filemtime($tmplTemplateFile) > $fileinfo['datetime']) {
// 模板文件如果有更新则缓存需要更新
return false;
}
elseif ($this->config['cache_time'] != -1 && time() > $fileinfo['datetime']+$this->config['cache_time']) {
// 缓存是否在有效期
return false;
}
//缓存有效
return true;
}

修改 runtime 文件 主要是生成 runtime 文件

function build_runtime() {
$mem = memcache_init();
// 加载常量定义文件
require THINK_PATH.'/Common/defines.php';
// 加载路径定义文件
require defined('PATH_DEFINE_FILE')?PATH_DEFINE_FILE:THINK_PATH.'/Common/paths.php';
// 读取核心编译文件列表
if(is_file(CONFIG_PATH.'core.php')) {
// 加载项目自定义的核心编译文件列表
$list = include CONFIG_PATH.'core.php';
}
elseif(defined('THINK_MODE')) {
// 根据设置的运行模式加载不同的核心编译文件
$list = include THINK_PATH.'/Mode/'.strtolower(THINK_MODE).'.php';
}
else{
// 默认核心
$list = include THINK_PATH.'/Common/core.php';
}
// 加载兼容函数
if(version_compare(PHP_VERSION,'5.2.0','<') )
$list[] = THINK_PATH.'/Common/compat.php';
// 加载核心编译文件列表
foreach ($list as $key=>$file){
if(is_file($file)) require $file;
}
// 检查项目目录结构 如果不存在则自动创建
if(!is_dir(RUNTIME_PATH)) {
// 创建项目目录结构
build_app_dir();
}
else{
// 检查缓存目录
//check_runtime();

}
// 生成核心编译缓存 去掉文件空白以减少大小
if(!defined('NO_CACHE_RUNTIME')) {
$compile = defined('RUNTIME_ALLINONE');
$content = compile(THINK_PATH.'/Common/defines.php',$compile);
$content .= compile(defined('PATH_DEFINE_FILE')? PATH_DEFINE_FILE : THINK_PATH.'/Common/paths.php',$compile);
foreach ($list as $file){
$content .= compile($file,$compile);
}
$runtime = defined('THINK_MODE')?'~'.strtolower(THINK_MODE).'_runtime.php':'~runtime.php';
if(defined('STRIP_RUNTIME_SPACE') && STRIP_RUNTIME_SPACE == false ) {
$mem->set(RUNTIME_PATH.$runtime,'<?php'.$content);
}
else{
$mem->set(RUNTIME_PATH.$runtime,strip_whitespace('<?php'.$content));
}
unset($content);
}
}

修改  config.yaml 代替 .htaccess

name: hxpai

version: 1

handle:  - rewrite: if(!is_dir() && !is_file() && path~"^(.*)$") goto "index.php/$1"

一般应用 这样就可以了

接下来修改 上传类 用于需要上传图片的应用

修改 UploadFile.class.php

修改函数 save

  增加

      $s = new SaeStorage();       

  $s->_accessKey = '';       

  $s->_secretKey = '';

去掉同名验证 我同名验证用的其他方法 保证不会重名

首先 传图片的时候 增加

            $upload->fullstorage = 'avatarfull';           

    $upload->thumbstorage = 'avatarthumb';

参数

修改 UploadFile.class.php

添加    public $fullstorage;    

  public $thumbstorage;

修改 

private function save($file)
{
$s = new SaeStorage();
$s->_accessKey = 'jn4wlon5xl';
$s->_secretKey = 'y45w55mwyx0m1k3w00xz20jymz3xikjlxw21xiy1';
$filename = $file['savepath'].$file['savename'];

// 如果是图像文件 检测文件格式
if( in_array(strtolower($file['extension']),array('gif','jpg','jpeg','bmp','png','swf')) && false === getimagesize($file['tmp_name'])) {
$this->error = '非法图像文件';
return false;
}

//图片上传
$sinasavename = $s->upload($this->fullstorage,$file['savename'],$file['tmp_name']);

//缩略图生成
if($this->thumb) {
$img = new SaeImage();
$img->setData( file_get_contents($file['tmp_name'] ) );
$img->resize(160,160); // 等比缩放到200宽
$new_data = $img->exec(); // 执行处理并返回处理后的二进制数据
//echo file_get_contents($new_data);

$sinasavename = $s->write($this->thumbstorage,$file['savename'],$new_data);

unlink($file['tmp_name']);
}
if($this->zipImags) {
// TODO 对图片压缩包在线解压
}
return true;
}

接下来把图片同步至新浪微博,和qq微博的上传地址修改

最后把图片文件批量上传至storage

ok 大功告成啦 哈哈

posted on 2011-05-25 18:56  我叫王鹏飞  阅读(2040)  评论(1编辑  收藏  举报

导航