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 ...
随机推荐
- .NET生成缩略图并下载
缩略图:比喻一张图片宽度为1000px,大小为800K,经过缩略后变成一张宽度100px,大小10K的图片. 先给出界面: 总体的流程分5步如下图: 1.添加一个html:GetminPic.html ...
- Json的序列化和反序列化
1.利用js进行序列化成字符串和反序列化 var personObj = {name:"Tom",age:16}; // 利用JS序列化成字符串 var personStr = J ...
- 【循序渐进学Python】9.异常处理
1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种 ...
- asp.net.web如何简单生成和保存二维码图片的例子
首先,要有生成二维码图片,需要二维码生成的类库,到官网下载thoughtWorks.QRCode.dll 例子的步骤: 1.创建项目QRCodeTest1,选择asp.net.web窗体应用程序
- 自定义饼图(PieChart)各个PieSlice的外观
C1Chart提供了Theme和Palette接口,其中内置了很多配色方案,调整外观. <c1chart:C1Chart Margin="0,0,8,8" MinHeight ...
- python flask应用部署
失败版本:flask+uwsgi ini配置文件 [uwsgi] callable = app ;//程序内启用的application变量名 home = /home/jcuan/code/pyth ...
- NTFS碎片
在Windows操作系统中查看各分区的文件系统: fsutil fsinfo ntfsinfo c: (查看C:盘的文件系统) fsutil fsinfo ntfsinfo d: (查看D:盘的文件系 ...
- 高效构建Web应用 教你玩转Play框架 http://www.anool.net/?p=577
Play 框架是一个完整的Web应用开发框架,覆盖了Web应用开发的各个方面.Play 框架在设计的时候借鉴了流行的 Ruby on Rails 和 Grails 等框架,又有自己独有的优势.使用 P ...
- 解决SharePoint 2013 designer workflow 在发布的报错“负载平衡没有设置”The workflow files were saved but cannot be run.
原因是app management service没有设置好,在管理中心把他删掉,重新建一个就可以了 Provision App Management Service In SharePoint 20 ...
- 基本完成了一个SEGY扫描程序
利用Seismic.NET编写了一个SEG-Y文件的扫描程序,可以自动判断道头字中主测线号.横测线号.X坐标和Y坐标的位置,自动快速扫描地震数据体中的拐点坐标.10GB多的数据体几十秒全部扫描完成! ...