① 如何基于ThinkPHP框架开发APP的即时通讯功能
phpcms,rpal,dedecms,这些严格来讲,都不是框架,可以说是cmd建站系统。这些有经验的站长就可以使用。 thinkphp,Yii,cakePhp,这些属于php的框架,是开发人员,进行敏捷开发所使用的 至于写一个框架
② thinkphp开发app要结合什么软件CSS JS希望放在app本地~数据库用服务器!
你说的是移动网站还是手机APP应用?如果是手机APP应用,THINKPHP只能来写接口,然后JSON返回到手机去输出,这种形式根本不需要你来做CSS和JS,那些都是手机前端去搞的,如果是网站的话,CSS,JS这些你难道还想生成COOKE?放在客户端不安全,虽然只是一些样式和特效。
③ thinkphp里的__APP__意思
您好,这样的:
这是定义目录的一个常量
你可以看看 thinkphp 的开发文档
http://document.thinkphp.cn/manual_3_2.html#entrance_file
比如。你写了个方法,这个方法输出一个url
这个url的格式是域名/模块名/xxxxx/项目名/xxxx
里面的项目名是调用这个方法的项目名
可能每次调用的项目不一样
那你直接写APP_NAME
就不用每次拿这个项目名,再拼到url里去了。
④ 如何基于ThinkPHP框架开发APP的即时通讯功能
一种是开发API,另外一种是实现移动端访问自动切换移动主题模板,从而实现伪app访问
⑤ 用thinkphp写一个app登录的接口 麻烦哪位大神给个事例
1、可以使用 REST模式 来开发 App 接口,首先建立一个公共控制器,再建其他控制器继承它即可。
2、确定好返回的数据内容格式及信息码;
<?php
// App接口公共控制器 AppController
namespace Api\Controller;
use Think\Controller\RestController;
class AppController extends RestController {
// 自动加载的东西
function _initialize() { }
// 验证 客户端 token
protected function checkAppToken($apptoken){
// 引入 function.php 中定义的检测 apptoken 的函数
if(checkingAppToken($apptoken)){
return true;
}else{
$data['code'] = '404';
$data['msg'] = 'apptoken无效';
$data['data'] = null;
$this -> response($data, 'json');
exit();
}
}
// 验证 用户 token
protected function checkUserToken($usertoken){
}
// 各种验证 ……
}
?>
复制代码
其他接口控制器继承 AppController
<?php
// 内容控制器 ContentsController
namespace Api\Controller;
class ContentsController extends AppController {
// 自动加载验证
function _initialize() {
parent::_initialize();
// 验证 客户端 token
$apptoken = I('post.apptoken');
parent::checkAppToken($apptoken);
// 验证 用户 token
$usertoken = I('post.usertoken');
parent::checkUserToken($usertoken);
// 各种需要验证的验证 ……
}
// 各种业务方法
public function index(){
// 返回数据
$this -> response($data, 'json');
exit();
}
}
?>
⑥ 请问ThinkPHP里面的常量__APP__是在哪里定义的 - PHP框架开发
是在App.class.php里面定义的 在执行$app->run();的时候就执行了
⑦ thinkphp!是不是开发app用的
thinkphp主要是用于网站开发的,也能用来开发APP,
⑧ 如何利用Thinkphp框架开发移动端接口详解
方案一:给原生APP提供api接口
使用TP框架时 放在common文件夹下文件名就叫function.php
<?php
/**
*Createdbyzhangkx
*Email:[email protected]
*Date:2015/8/1
*Time:23:15
*/
/******api开发辅助函数*******/
/**
*@paramnull$msg返回正确的提示信息
*@paramflagsuccessCURD操作成功
*@paramarray$data具体返回信息
*Functiondescript:返回带参数,标志信息,提示信息的json数组
*
*/
functionreturnApiSuccess($msg=null,$data=array()){
$result=array(
'flag'=>'Success',
'msg'=>$msg,
'data'=>$data
);
printjson_encode($result);
}
/**
*@paramnull$msg返回具体错误的提示信息
*@paramflagsuccessCURD操作失败
*Functiondescript:返回标志信息‘Error',和提示信息的json数组
*/
functionreturnApiError($msg=null){
$result=array(
'flag'=>'Error',
'msg'=>$msg,
);
printjson_encode($result);
}
/**
*@paramnull$msg返回具体错误的提示信息
*@paramflagsuccessCURD操作失败
*Functiondescript:返回标志信息‘Error',和提示信息,当前系统繁忙,请稍后重试;
*/
functionreturnApiErrorExample(){
$result=array(
'flag'=>'Error',
'msg'=>'当前系统繁忙,请稍后重试!',
);
printjson_encode($result);
}
/**
*@paramnull$data
*@returnarray|mixed|null
*Functiondescript:过滤post提交的参数;
*
*/
functioncheckDataPost($data=null){
if(!empty($data)){
$data=explode(',',$data);
foreach($dataas$k=>$v){
if((!isset($_POST[$k]))||(empty($_POST[$k]))){
if($_POST[$k]!==0&&$_POST[$k]!=='0'){
returnApiError($k.'值为空!');
}
}
}
unset($data);
$data=I('post.');
unset($data['_URL_'],$data['token']);
return$data;
}
}
/**
*@paramnull$data
*@returnarray|mixed|null
*Functiondescript:过滤get提交的参数;
*
*/
functioncheckDataGet($data=null){
if(!empty($data)){
$data=explode(',',$data);
foreach($dataas$k=>$v){
if((!isset($_GET[$k]))||(empty($_GET[$k]))){
if($_GET[$k]!==0&&$_GET[$k]!=='0'){
returnApiError($k.'值为空!');
}
}
}
unset($data);
$data=I('get.');
unset($data['_URL_'],$data['token']);
return$data;
}
}
查询单个果品详细信息
/**
*发布模块
*
*获取信息单个果品详细信息
*
*/
(){
//检查是否通过post方法得到数据
checkdataPost('id');
$where['id']=$_POST['id'];
$field[]='id,fruit_name,high_price,low_price,address,size,weight,fruit_pic,remark';
$releaseInfo=$this->release_obj->findRelease($where,$field);
$releaseInfo['remark']=mb_substr($releaseInfo['remark'],0,49,'utf-8').'...';
//多张图地址按逗号截取字符串,截取后如果存在空数组则需要过滤掉
$releaseInfo['fruit_pic']=array_filter(explode(',',$releaseInfo['fruit_pic']));
$fruit_pic=$releaseInfo['fruit_pic'];unset($releaseInfo['fruit_pic']);
//为图片添加存储路径
foreach($fruit_picas$k=>$v){
$releaseInfo['fruit_pic'][]='http://'.$_SERVER['HTTP_HOST'].'/Uploads/Release/'.$v;
}
if($releaseInfo){
returnApiSuccess('',$releaseInfo);
}else{
returnApiError('什么也没查到(+_+)!');
}
}
findRelease()方法的model
/**
*查询一条数据
*/
publicfunctionfindRelease($where,$field){
if($where['status']==''||empty($where['status'])){
$where['status']=array('neq','9');
}
$result=$this->where($where)->field($field)->find();
return$result;
}
app端接收到的数据(解码json之后)
{
"flag":"success",
"message":"",
"responseList":{
"id":"2",
"fruit_name":"苹果",
"high_price":"8.0",
"low_price":"5.0",
"address":"天津小白楼水果市场",
"size":"2.0",
"weight":"2.0",
"remark":"急需...",
"fruit_pic":[
"http://fruit.txunda.com/Uploads/Release/201508/55599e7514815.png",
"http://fruit.txunda.com/Uploads/Release/201508/554f2dc45b526.jpg"
]
}
}
app端接收到的数据(原生json串)
代码如下:
{"flag":"success","message":"","responseList":{"id":"2","fruit_name":"u82f9u679c","high_price":"8.0","low_price":"5.0","address":"","size":"2.0","weight":"2.0","remark":"u6025u9700...","fruit_pic":["http://fruit.txunda.com/Uploads/Release/201508/55599e7514815.png","http://fruit.txunda.com/Uploads/Release/201508/554f2dc45b526.jpg"]}}
方案二:另外我们还可以通过ThinkPHP实现移动端访问自动切换主题模板,这样也可以做到移动端访问
ThinkPHP的模板主题机制,如果只是在PC,只要需修改 DEFAULT_THEME (新版模板主题默认是空,表示不启用模板主题功能)配置项就可以方便的实现多模板主题切换。
但对于移动端与PC端,也许你会设计完全不同的主题风格,且针对不同的来路提供不同的渲染方式,其中一种比较流行的方法是“响应式设计”,但就本人经历而言,要实现完全的“响应式设计”并不是那么容易,且解决兼容问题也是个难题,假设是大型站点,比如:淘宝、网络、拍拍这些,响应式设计肯定是满足不了需求的,而是需要针对手机访问用户提供单独的手机网站。
ThinkPHP 完全能够实现,而且非常的简单。与TPM的智能模版切换引擎相同,只要对来路进行判断处理就行了。
一、将 ismobile() 加入到{项目/Common/common.php}
functionismobile(){
//如果有HTTP_X_WAP_PROFILE则一定是移动设备
if(isset($_SERVER['HTTP_X_WAP_PROFILE']))
returntrue;
//此条摘自TPM智能切换模板引擎,适合TPM开发
if(isset($_SERVER['HTTP_CLIENT'])&&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
returntrue;
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if(isset($_SERVER['HTTP_VIA']))
//找不到为flase,否则为true
returnstristr($_SERVER['HTTP_VIA'],'wap')?true:false;
//判断手机发送的客户端标志,兼容性有待提高
if(isset($_SERVER['HTTP_USER_AGENT'])){
$clientkeywords=array(
'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile'
);
//从HTTP_USER_AGENT中查找手机浏览器的关键字
if(preg_match("/(".implode('|',$clientkeywords).")/i",strtolower($_SERVER['HTTP_USER_AGENT']))){
returntrue;
}
}
//协议法,因为有可能不准确,放到最后判断
if(isset($_SERVER['HTTP_ACCEPT'])){
//如果只支持wml并且不支持html那一定是移动设备
//如果支持wml和html但是wml在html之前则是移动设备
if((strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml')!==false)&&(strpos($_SERVER['HTTP_ACCEPT'],'text/html')===false||(strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml')<strpos($_SERVER['HTTP_ACCEPT'],'text/html')))){
returntrue;
}
}
returnfalse;
}
二、在{项目/Lib/}创建一个 CommonAction.php,假设你的项目已公共控制器,则无需创建,直接加在里面就行了。
{
Publicfunction_initialize(){
//移动设备浏览,则切换模板
if(ismobile()){
//设置默认默认主题为Mobile
C('DEFAULT_THEME','Mobile');
}
//............你的更多代码.......
}
}
⑨ thinkphp可不可以作为app的后台
不可以将php打包进app,php程序只能在服务器端运行,前端可以向服务器请求数据,后端由php处理。前端开发只能由html,css,js组成
⑩ thinkphp完全免费吗用它开发商业软件,用不用交费
授权协议
ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
版权所有Copyright © 2006-2012 by ThinkPHP (http://thinkphp.cn) All rights reserved。
ThinkPHP® 商标和着作权所有者为上海顶想信息科技有限公司。
Apache Licence是着名的非盈利开源组织Apache采用的协议。该协议和BSD类似,鼓励代码共享和尊重原作者的着作权,允许代码修改,再作为开源或商业软件发布。需要满足的条件:
1. 需要给用户一份Apache Licence ;
2. 如果你修改了代码,需要在被修改的文件中说明;
3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明;
4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有本协议内容。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。