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 大功告成啦 哈哈