处理请求

class TestController extends Controller
{ public function init()
{
if(!YII_ENV_DEV){
throw new ExitException(201,'can not access not in dev mode');
}
} /**
*
*/
public function actionClientip()
{
if(YII_ENV_DEV){
$request = Yii::$app->getRequest();
$keyStr = 'key_123';
$timestamp = $request->get('timestamp');
$sign = $request->get('sign');
if(md5($timestamp.$keyStr) == $sign){
$databaseIp = $request->getUserIP();
// $databaseIp = '127.0.0.1';
$conainer = new ContainerSaveForDynamicData();
$dbComponetConfig = [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host='.$databaseIp.';port=3306;dbname=database1',
'username' => 'username1',
'password' => 'password1',
'charset' => 'utf8',
'tablePrefix'=>'prefix_'
];
$conainer->setDataByKey(ContainerSaveForDynamicData::DB_COMPONENT_CONFIG,$dbComponetConfig);
return 'success';
}
return 'fail';
}
else{
return 'fail,not in dev mode';
}
} } 非标准路径缓存管理 use yii\helpers\FileHelper;
// $conainer = new \common\components\ContainerSaveForDynamicData();
// $conainer->getDataByKey('db4Dynamic');
// $conainer->setDataByKey('db4Dynamic','127.0.0.1');
class ContainerSaveForDynamicData
{ const DB_COMPONENT_CONFIG = 'dbComponetConfig';
public $cacheFileSuffix = '.bin';
public $cachePath = './dynamic-data-cache';
public $dirMode = 0775;
public $keyPrefix = '';
public $fileMode; public function __construct()
{
$this->cachePath = __DIR__.'/../../dynamic-data-cache';
if (!is_dir($this->cachePath)) {
FileHelper::createDirectory($this->cachePath, $this->dirMode, true);
}
} /**
* 指定键的值
* @param unknown $key
* @return boolean|unknown
*/
public function getDataByKey($key)
{
$key = $this->buildKey($key);
$cacheFile = $this->getCacheFile($key);
if(!file_exists($cacheFile)){
return false;
} if (@filemtime($cacheFile) > time()) {
$fp = @fopen($cacheFile, 'r');
if ($fp !== false) {
@flock($fp, LOCK_SH);
$cacheValue = @stream_get_contents($fp);
@flock($fp, LOCK_UN);
@fclose($fp); $cacheValue = unserialize($cacheValue); return $cacheValue;
}
} return false;
} /**
* 设置值
*/
public function setDataByKey($key,$value,$duration=0)
{
$key = $this->buildKey($key);
$cacheFile = $this->getCacheFile($key); $value = serialize($value); if (@file_put_contents($cacheFile, $value, LOCK_EX) !== false) {
if ($this->fileMode !== null) {
@chmod($cacheFile, $this->fileMode);
}
if ($duration <= 0) {
$duration = 31536000; // 1 year
}
return @touch($cacheFile, $duration + time());
} else {
$error = error_get_last();
return false;
}
} protected function buildKey($key)
{
$key = md5(json_encode($key));
return $this->keyPrefix . $key;
} /**
* 缓存文件名称
* @param unknown $key
* @return string
*/
protected function getCacheFile($key)
{
return $this->cachePath . DIRECTORY_SEPARATOR . $key . $this->cacheFileSuffix;
}
} 从缓存中读取数据库配置 <?php if(YII_ENV_DEV){
$conainer = new ContainerSaveForDynamicData();
if(($data = $conainer->getDataByKey(ContainerSaveForDynamicData::DB_COMPONENT_CONFIG)) != false){
return $data;
}
else{
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;port=3306;dbname=database1',
'username' => 'username1',
'password' => 'password1',
'charset' => 'utf8',
'tablePrefix'=>'prefix_'
];
} }
else if(YII_ENV_TEST){
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;port=3306;dbname=database1',
'username' => 'username1',
'password' => 'password1',
'charset' => 'utf8',
'tablePrefix'=>'prefix_'
];
}
else if(YII_ENV_PROD){ } 定时请求 #!/bin/sh
export LANG=en_US.UTF-8
timestamp=`date "+%s"` keystr="key_123"
pre_str=$timestamp$keystr
sign_str=$(echo -n $pre_str|md5sum|awk -F ' ' '{print $1}')
req_url_str="http://www.xxx.com/index.php?r=test/clientip&sign="$sign_str"×tamp="$timestamp
result_str=`curl -s --url $req_url_str` echo $result_str >> /a/b/c/www.xxx.com/mytasks/logs/log_update_ip.log

shell 带签名请求,yii 处理带签名的请求的更多相关文章

  1. 在基于vue的webpack脚手架开发中使用了代理转发,结果浏览器发出的请求中不带cookie导致登录时总是session失效怎么办?

    环境:            有2个业务接口需要转发到82的服务器上:     ../user/getCode.do     ../user/doLogin.do 现象:          使用上述的 ...

  2. 【转】shell脚本中echo显示内容带颜色

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e.格式如下:   echo -e "\033[41;36m something here \033[0m&qu ...

  3. shell脚本中echo显示内容带颜色

    转自:http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要 ...

  4. 支付宝ios支付请求Java服务端签名报的一个错(ALI40247) 原创

    今天做app的支付宝支付,遇到些问题,以前做支付宝支付签名都是直接在客户端App进行,今天下了最新版本ios的支付宝支付demo,运行demo时底部有红色的显眼字体,告知用户签名必须在服务端进行... ...

  5. Yii 自带的分页实例

    yii自带的分页很好用,简单的几行代码就能把分页搞出来,唯一恼火的是只能写在controller中,所以有时候controller中的方法有点臃肿.废话少说,上代码上图. 一.代码实例: 1.控制器中 ...

  6. shell脚本中使用echo显示带颜色的内容

    shell脚本中使用echo显示带颜色的内容,需要使用参数-e 格式如下: echo -e "\033[字背景颜色;文字颜色m字符串\033[0m" 例如: echo -e &qu ...

  7. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  8. Java后端 带File文件及其它参数的Post请求

    http://www.roak.com Java 带File文件及其它参数的Post请求 对于文件上传,客户端通常就是页面,在前端web页面里实现上传文件不是什么难事,写个form,加上enctype ...

  9. 【转】shell脚本中echo显示内容带颜色的实现方法

    shell脚本中echo显示内容带颜色的实现方法 shell脚本里使用echo输出颜色  

  10. 自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名【转】

    自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信   如果你的规划需要创建多个证书,那么使用私有 ...

随机推荐

  1. Oracle学习之路-- 案例分析实现行列转换的几种方式

    注:本文使用的数据库表为oracle自带scott用户下的emp,dept等表结构. 通过一个例子来说明行列转换: 需求:查询每个部门中各个职位的总工资 按我们最原始的思路可能会这么写:       ...

  2. TFS 2015 敏捷开发实践 – 看板的使用

    看板在现代应用开发过程中使用非常广泛,不管是使用传统的瀑布式开发还是敏捷开发,都可以使用看板管理.因为看板拥有简单的管理方法,直观的显示方式,所以很多软件开发团队选择使用看板进行软件开发管理.本文不在 ...

  3. EQueue 2.3.2版本发布(支持高可用)

    前言 前段时间针对EQueue的完善终于告一段落了,实在值得庆祝,自己的付出和坚持总算有了成果.这次新版本主要为EQueue实现了集群功能,基本实现了Broker的高可用.另外还增加了很多实用的功能, ...

  4. TODO:这是一个我的自媒体

    TODO:这是一个我的自媒体 自媒体(外文名:We Media)又称"公民媒体"或"个人媒体",是指私人化.平民化.普泛化.自主化的传播者,以现代化.电子化的手 ...

  5. linux笔记

    1 动态查看日志 tail -f filename tail -1000f filename 2 解压当前目录内容为xxx.zip  zip -r xxx.zip ./* 3 查看内存使用情况 fre ...

  6. Spring的前期配置

    1创建一个java项目,鼠标单击项目右键新建一个名为lib的文件夹 2在lib文件夹中考入Spring需要的配置文件(俗称jar包) 3 按Shift选中这些jar右键添加至构建路径 4选中src目录 ...

  7. Android-启动另一个app

    直接上代码: // 通过包名获取要跳转的app,创建intent对象 Intent intent = getPackageManager().getLaunchIntentForPackage(&qu ...

  8. MVC中的AOP

    一. AOP是什么? AOP(Aspect-Oriented Programming),面向切面编程,看着是跟OOP(面向对象编程)挺相近的,但实际上又有什么区别呢?OOP具有封装,继承,多态等东西来 ...

  9. ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API

    在前一篇博文中,我们使用OAuth的Client Credential Grant授权方式,在服务端通过CNBlogsAuthorizationServerProvider(Authorization ...

  10. 如何直接在 PC 端获取其它端设备的 UserAgent 信息呢?

    如何直接在 PC 端获取其它端设备的 UserAgent 信息呢 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5909615.html 序 希望收 ...