APP 接口开发及读取静态缓存
<?php
/**
* Description: App 接口
* Create date:2015-10-19 13:36
* Author: zhaoyingnan
**/
class Response
{
/**
* 综合方式
* @author zhaoyingnan 2015-10-19 11:24
* @param int $iCode 状态码
* @param string $sMsg 提示信息
* @param mix $mixData data
* @param string $sType 接口返回类型
* @return string
**/
static function show($iCode, $sMsg = '', $mixData = '', $sType = 'json')
{
if(!is_numeric($iCode))
return '';
$arData = array(
'code' => $iCode,
'message' => $sMsg,
'data' => $mixData
);
switch($sType)
{
case 'array':
echo '<pre>';
print_r($arData);
echo '</pre>';
break;
case 'xml':
self::xml($arData);
break;
default:
self::json($arData);
}
} /**
* json
* @author zhaoyingnan 2015-10-19 10:21
* @param array $arData
* @return string
**/
private function json($arData= array())
{
exit(json_encode($arData));
} /**
* xml
* @author zhaoyingnan 2015-10-19 10:21
* @param array $arData
* @return string
**/
private function xml($arData = array())
{
header('Content-Type:text/xml');
$sXml = '';
$sXml .= "<?xml version='1.0' encoding='UTF-8'?>\n";
$sXml .= "<root>\n";
$sXml .= self::xmlEncode($arData);
$sXml .= "</root>\n";
exit($sXml);
} /**
* xml encode
* @author zhaoyingnan 2015-10-19 11:10
* @param array $arData
* @return string
**/
private function xmlEncode($arData = array())
{
if(!$arData)
return '';
$sXml = $sAttr= '';
foreach($arData as $mKey => $mVal)
{
if(is_numeric($mKey))
{
$sAttr = " id='{$mKey}'";
$mKey = 'item';
}
$sXml .= is_array($mVal) ? self::xmlEncode($mVal) : "<{$mKey}{$sAttr}>{$mVal}</{$mKey}>";
}
return $sXml;
}
}
?>
<?php
/**
* Description: 静态缓存
* Create date:2015-10-19 13:36
* Author: zhaoyingnan
**/
class file
{
private $sExt = '.txt'; /**
* 生成/删除/获取 缓存
* @author zhaoyingnan 2015-10-19 11:33
* @param string $sKey 文件名
* @param mix $mixValue 被缓存的数据(为''时表示获取缓存,为NUll时为删除缓存文件,否则为生成缓存)
* @param string $sPath 文件保存的路径
* @param int $iCacheTime 缓存时间(秒),0为永不过期
* @return boolean
**/
public function cacheData($sKey, $mixValue = '', $sPath = '/alidata/www/lianxi/file/', $iCacheTime = 0)
{
$sPath = rtrim($sPath, '/').'/';
$sFileName = $sPath.$sKey.$this->sExt;
//生成缓存文件
if($mixValue)
{
if(!is_dir($sPath))
mkdir($sPath, 0777);
$iCacheTime = sprintf('%011d', $iCacheTime);
return file_put_contents($sFileName, $iCacheTime.json_encode($mixValue));
} if(is_file($sFileName) && !$mixValue)
{
if(is_null($mixValue))
{
//删除缓存
return unlink($sFileName);
} //获取缓存
$sContent = file_get_contents($sFileName);
$iTime = intval(substr($sContent, 0, 11));
$sContent = substr($sContent, 11);
if($iTime != 0 && $iTime + filemtime($sFileName) < time())
{
//过期了,删除
unlink($sFileName);
return FALSE;
}
return $sContent;
}
else
{
return FALSE;
}
}
}
?>
<?php
include 'response.php';
include 'file.php';
$_GET['format'] = isset($_GET['format']) && in_array($_GET['format'], array('xml', 'json', 'array')) ? $_GET['format'] : 'json';
$file = new File();
//删除缓存
//exit(var_dump($file->cacheData('index_cache', null))); if(!$sContent = $file->cacheData('index_cache'))
{
//echo "获取缓存失败\n";
//echo "获取数据\n";
$arData = array(
'id' => 1,
'name' => 'TeddyNan',
'sex' => 23,
array(
'nani'=>array(
'g'=>'gg',
2,
4
)
)
);
//echo "生成缓存\n"; $file->cacheData('index_cache', $arData, '/alidata/www/lianxi/file/', 0);
Response::show(0, 'success', $arData, $_GET['format']);
}
else
{
Response::show(0, 'success', json_decode($sContent, TRUE), $_GET['format']);
}
?>
APP 接口开发及读取静态缓存的更多相关文章
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [3] 首页 APP 接口开发方案 ② 读取缓存方式
以静态缓存为例. 修改 file.php line:11 去掉 path 参数(方便),加上缓存时间参数: public function cacheData($k,$v = '',$cacheTim ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式
方案一:读取数据库方式 从数据库读取信息→封装→生成接口数据 应用场景: 数据时效性比较高的系统 方案二:读取缓存方式 从数据库获取信息(第一次设置缓存或缓存失效时)→封装(第一次设置缓存或缓存失效时 ...
- Dcloud课程4 如何进行APP接口开发
Dcloud课程4 如何进行APP接口开发 一.总结 一句话总结:通过json或者xml. 1.APP如何进行通信? 通过在地址上接参数指明传递的数据的类型.而数据传递的类型一般是XML和json. ...
- app接口开发(php)
1.JSON方式封装通信接口: 封装: response.php <?php // JSON方式封装通信接口 // 定义 response类 class Response { // 定义一个静态 ...
- app接口开发
最近一段时间一直在做APP接口,总结一下APP接口开发过程中的注意事项: 1.效率:接口访问速度 APP有别于WEB服务,对服务器端要求是比较严格的,在移动端有限的带宽条件下,要求接口响应速度要快,所 ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [4] 首页 APP 接口开发方案 ③ 定时读取缓存方式
用于 linux 执行 crontab 命令生成缓存的文件 crop.php <?php //让crontab 定时执行的脚本程序 require_once 'db.php'; require_ ...
- php做APP接口开发,接口的安全性
1.当用户登录APP时,使用https协议调用后台相关接口,服务器端根据用户名和密码时生成一个access_key,并将access_key保存在session(或者保存在redis)中,将生成的ac ...
- 【APP接口开发】php输出json格式数据
请一定配合使用null转空字符的方法一起使用:(_unsetNull() 和 _json() 配合使用) 在一些接口的调用中,直接查询数据库出来的字段可能为null字段,但是为了简便前端的判断,需要把 ...
- 【APP接口开发】php获取body数据
PHP获取接口数据: $postStr = file_get_contents("php://input");//因为很多都设置了register_globals禁止,不能用$GL ...
随机推荐
- Unity多语言本地化改进版
简介 之前捣鼓过一个通过csv配置游戏多语言支持的小工具,但是发现使用过程中,通过notepad++去进行转码很不方便,并且直接将配置的csv不加密的放在游戏中心里感觉不是很踏实 于是乎~~ 新的方案 ...
- onclick事件与onserverclick事件
1.这里仅对web控件而言,onclick事件执行的是客户端中的代码, <%@ Page Language="C#" AutoEventWireup="true&q ...
- 备份和还原SQL Server及压缩Access数据库
功能说明:备份和恢复SQL Server数据库 * 作者: 刘功勋; * 版本:V0.1(C#2.0);时间:2007-1-1 * 当使用SQL Server时,请引用 COM组件中的,SQLDMO. ...
- Titanium开发环境搭建第三个坑
Nodejs版本的问题 首先,如下引用:http://docs.appcelerator.com/titanium/latest/#!/guide/Installing_Node To run all ...
- mfc110.dll丢失,解决方法
mfc110.dll下载_附文件使用方法 mfc110.dll是存放在windows系统中的一个重要dll文件,缺少它可能会造成部分软件或游戏无法正常运行.当系统提示“没有找到mfc110.dll”或 ...
- 机器学习实战 - 读书笔记(05) - Logistic回归
解释 Logistic回归用于寻找最优化算法. 最优化算法可以解决最XX问题,比如如何在最短时间内从A点到达B点?如何投入最少工作量却获得最大的效益?如何设计发动机使得油耗最少而功率最大? 我们可以看 ...
- [js开源组件开发]js手机联动选择日期 开源git
js手机联动选择日期 这里在前面的<js手机联动选择地区>的基础上,改造数据源之后形成的一个日期的选择器,当然你可以使用之前的PC上模式的<日期控件>,它同时也支持手机端,ht ...
- [js开源组件开发]js文本框计数组件
js文本框计数组件 先上效果图: 样式可以自行调整 ,它的功能提供文本框的实时计数,并作出对应的操作,比如现在超出了,点击下面的按钮后,文本框会闪动两下,阻止提交.具体例子可以点击demo:http: ...
- 一个H5的3D滑动组件实现(兼容2D模式)
起由 原始需求来源于一个项目的某个功能,要求实现3D图片轮播效果,而已有的组件大多是普通的2D图片轮播,于是重新造了一个轮子,实现了一个既支持2D,又支持3D的滑动.轮播组件. 实现思路 刚一开始肯定 ...
- SharePoint 2013 隐藏部分Ribbon菜单
SharePoint的使用中,因为用户经常不愿意看到那些不经常使用的操作,我们经常需要定制Ribbon菜单, 更多时候不是隐藏所有,而是隐藏掉我们不需要的那些:下面,我们一列表为例,简单介绍下如何部分 ...