<?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 接口开发及读取静态缓存的更多相关文章

  1. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [3] 首页 APP 接口开发方案 ② 读取缓存方式

    以静态缓存为例. 修改 file.php line:11 去掉 path 参数(方便),加上缓存时间参数: public function cacheData($k,$v = '',$cacheTim ...

  2. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式

    方案一:读取数据库方式 从数据库读取信息→封装→生成接口数据 应用场景: 数据时效性比较高的系统 方案二:读取缓存方式 从数据库获取信息(第一次设置缓存或缓存失效时)→封装(第一次设置缓存或缓存失效时 ...

  3. Dcloud课程4 如何进行APP接口开发

    Dcloud课程4 如何进行APP接口开发 一.总结 一句话总结:通过json或者xml. 1.APP如何进行通信? 通过在地址上接参数指明传递的数据的类型.而数据传递的类型一般是XML和json. ...

  4. app接口开发(php)

    1.JSON方式封装通信接口: 封装: response.php <?php // JSON方式封装通信接口 // 定义 response类 class Response { // 定义一个静态 ...

  5. app接口开发

    最近一段时间一直在做APP接口,总结一下APP接口开发过程中的注意事项: 1.效率:接口访问速度 APP有别于WEB服务,对服务器端要求是比较严格的,在移动端有限的带宽条件下,要求接口响应速度要快,所 ...

  6. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [4] 首页 APP 接口开发方案 ③ 定时读取缓存方式

    用于 linux 执行 crontab 命令生成缓存的文件 crop.php <?php //让crontab 定时执行的脚本程序 require_once 'db.php'; require_ ...

  7. php做APP接口开发,接口的安全性

    1.当用户登录APP时,使用https协议调用后台相关接口,服务器端根据用户名和密码时生成一个access_key,并将access_key保存在session(或者保存在redis)中,将生成的ac ...

  8. 【APP接口开发】php输出json格式数据

    请一定配合使用null转空字符的方法一起使用:(_unsetNull() 和 _json() 配合使用) 在一些接口的调用中,直接查询数据库出来的字段可能为null字段,但是为了简便前端的判断,需要把 ...

  9. 【APP接口开发】php获取body数据

    PHP获取接口数据: $postStr = file_get_contents("php://input");//因为很多都设置了register_globals禁止,不能用$GL ...

随机推荐

  1. 轻松解决MYSQL数据库连接过多的错误

    1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大是16384. 2.数据库当前的连接线程数threads_connected.这是动 ...

  2. 怎样用C#代码屏蔽任务管理器?

    这是我在网上找的并多加了一些我自己需要的代码,经过我的测试,可以屏蔽任务管理器,但还有一些瑕疵. 首先,我在vs2012中新建一个项目,选择window下的window窗体应用程序,把窗体form1拉 ...

  3. Linux下建立Nexus私服

    Linux下建立Nexus私服 要安装3个东西,然后配置私服: 1.JDK 2.Maven 3.Nexus 然后配置 1.JDK的安装 下载JDK安装包,格式为RPM格式,安装即可 安装程序 #rpm ...

  4. virtualenv and virtualenvwrapper on Ubuntu 14.04

    In this post I’ll go over my attempt to setup virtual environments for Python development. Most Pyth ...

  5. swift学习笔记之-枚举

    //枚举定义 import UIKit //枚举定义 (枚举.结构体.类的名字首字母必须大写,表示为定义了新的类型) /*枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来 ...

  6. ASP.NET MVC:窗体身份验证及角色权限管理示例

    ASP.NET MVC 建立 ASP.NET 基础之上,很多 ASP.NET 的特性(如窗体身份验证.成员资格)在 MVC 中可以直接使用.本文旨在提供可参考的代码,不会涉及这方面太多理论的知识. 本 ...

  7. VS2015发布Webservice

    第一步:开启IIs:在控制面板程序——>程序功能——>打开或关闭windows功能,把“Internet信息服务”下面的“FTP服务器”.“Web管理工具”.“万维网服务”全部勾上,然后点 ...

  8. 带缓存的输入输出-bufferedinputstream类与bufferedoutputstream类

    package hengzhe.cn.o1; import java.io.*; /* * 带缓存的输入输出-bufferedinputstream类与bufferedoutputstream类 * ...

  9. Android studio打包APK混淆配置

    要在打包APK时加入混淆需要在Module中的buid.gradle中加入如下信息 buildTypes { release { minifyEnabled true shrinkResources ...

  10. C语言指针传递详解

    传递指针可以让多个函数访问指针所引用的对象,而不用把对象声明为全局可访问,要在某个函数中修改数据,需要用指针传递数据,当数据是需要修改的指针的时候,就要传递指针的指针,传递参数(包括指针)的时候,传递 ...