1. 使用php開發app的介面,什麼框架比較好
框架使用並不是必要的app通訊 一般是xml json格式的數據可能用到的函數fsockopen curl simplexml json_encode json_decode等等
2. php移動端介面 如何控製版本號
既然是介面,那就說明你給用戶的介面中設置的有版本號,當客戶連接時,那就需要你這邊去做判斷,然後給用戶友好提示升級。。
3. 如何利用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');
}
//............你的更多代碼.......
}
}
4. php怎麼判斷訪問端是移動端還是pc端
2002年到2010年這之間php異軍突起的主要原因,是因為互聯網尤其是pc端的崛起,那時快速迭代開發,是所有中小企業最大的需求,管你什麼介面速度,運行效率,單線程還是多線程庫多還是庫少,只要能在短時間內把網站搞起來就行。
直到2010年以後移動端的出現app的使用大幅度超過pc端,前後端開始逐步分離,php本身可以嵌入html代碼就不再是特別大的優勢了,尤其php對進程線程協程的支持不夠使得一些app性能需求無法滿足,因此php更多開始和其他語言混用,甚至被其他像go,python這樣的語言壓制並搶占份額。
雖然說總體上我對php的發展還是樂觀的,畢竟社區,體量,易用性擺在那裡,尤其是php8即將誕生。但是隨著移動互聯網逐漸走向尾聲,app開發對性能要求的更高php在某些方面的劣勢也越來越明顯。因此對於php的培訓減少並不奇怪。
5. php開發app介面需要注意什麼
1.制定規范
開發前一定要定好一個規范,比如要定好數據返回的通用參數和格式。關於數據格式,用的比較多的有xml和json,我建議用json,因為json比xml的好處更多。
2.精簡的返回數據
介面數據因符合需要什麼返回什麼的原則,比如要查詢某個用戶的余額和注冊時間,網頁裡面的做法可能是select * from user where uid=1,但是介面一定要select balance,regtime from user where uid=1。因為介面返回數據是要有開銷的,要流量的,能少返回數據就盡量少返回,這樣可以大大的提高性能。
3.數據類型要嚴格
要注意數據的類型,整數類型的數據一定要轉為int,因為app客戶端開發的java、object-c語言對數據類型比較嚴格,類型不對會照成app閃退。
4.要寫介面文檔
一定要寫好介面文檔,並按照模塊寫,而且還要書寫規范,最好的格式是:
介面請求地址;請求參數(包括參數名、類型、是否必填);測試參數舉例;返回參數(參數名,並註明每個參數的含義)。
這樣哪怕以後項目很大,以不會照成維護困難的問題。
5.保證代碼正確性
要驗證保證代碼正確無誤,而且生成環境中要屏蔽掉錯誤,避免頭部有額外的輸出,照成返回的json等數據解析失敗而導致app閃退等。
6.要優化代碼的性能
app要求響應迅速,這樣才能給用戶比較好的體驗感。所以移動介面端在處理業務邏輯的時候,要避免不要執行太復雜的sql語句,或者含有大量的循環,能做成緩存的盡量做緩存,比如將首頁的熱點模塊信息可以存到redis緩存中。在不考慮網速的情況下,比較理想的介面響應時間應該是200毫秒以內。
7.不要隨意更改舊介面
app不像網頁,app一旦發布,有人使用之後,介面就不要亂修改了。以後升級也是,修改要在保證介面原有結構之上進行額外的擴展,否則會導致調用舊版介面的app出現bug。
8. 注意介面的安全
安全高於一切,必須要保證介面的安全。電話號碼等敏感信息在傳輸的過程中一定要加密,否則可能會被別人抓包到。拿取用戶信息的介面一定要驗證許可權,以防止介面被惡意調用,泄密用戶信息,甚至篡改信息。
6. 求教php 做APP介面 整個通信流程
我寫過幾個APP,可以分享經驗給你~
1、你可以把app的請求當成get或者post請求,PHP直接可以用$_GET、$_POST接收,你也可以理解成ajax,當然$_FILES肯定是不能用的
2、上傳圖片要使用二進制流,PHP端這一屆file_put_contents 寫成一個圖片文件
3、不要用$_SESSION。因為app的每次請求都會重新刷新session_id,就相當於一個新的訪客
4、因為不能用session所以會員中心這塊要設計成token。邏輯就是APP端調用php的登錄介面(介面返回一個唯一的字元串,這個串就是token)並且登錄成功後把token保存起來,每次登錄都刷新這個token。有涉及到會員的介面調用時都要傳這個token,PHP根據token來查找是哪個用戶。
7. 用PHP寫手機端APP數據介面和PC端數據介面有什麼不一樣
都一樣的 只是由於app不是瀏覽器不能正常使用cookie所以不支持session認證 在做app介面的時候一般都會使用自己定義的token來認證 其他的都是一致的
8. PHP開發APP介面需要注意哪些問題
PHP開發APP介面需要注意下面問題:
1.制定規范
開發前一定要定好一個規范,比如要定好數據返回的通用參數和格式。關於數據格式,用的比較多的有xml和json,我建議用json,因為json比xml的好處更多。
2.精簡的返回數據
介面數據因符合需要什麼返回什麼的原則,比如要查詢某個用戶的余額和注冊時間,網頁裡面的做法可能是select * from user where
uid=1,但是介面一定要select balance,regtime from user where
uid=1。因為介面返回數據是要有開銷的,要流量的,能少返回數據就盡量少返回,這樣可以大大的提高性能。
3.數據類型要嚴格
要注意數據的類型,整數類型的數據一定要轉為int,因為app客戶端開發的java、object-c語言對數據類型比較嚴格,類型不對會照成app閃退。
4.要寫介面文檔
一定要寫好介面文檔,並按照模塊寫,而且還要書寫規范,最好的格式是:
介面請求地址;請求參數(包括參數名、類型、是否必填);測試參數舉例;返回參數(參數名,並註明每個參數的含義)。
這樣哪怕以後項目很大,以不會照成維護困難的問題。
5.保證代碼正確性
要驗證保證代碼正確無誤,而且生成環境中要屏蔽掉錯誤,避免頭部有額外的輸出,照成返回的json等數據解析失敗而導致app閃退等。
6.要優化代碼的性能
app要求響應迅速,這樣才能給用戶比較好的體驗感。所以移動介面端在處理業務邏輯的時候,要避免不要執行太復雜的sql語句,或者含有大量的循環,能做成緩存的盡量做緩存,比如將首頁的熱點模塊信息可以存到redis緩存中。在不考慮網速的情況下,比較理想的介面響應時間應該是200毫秒以內。
7.不要隨意更改舊介面
app不像網頁,app一旦發布,有人使用之後,介面就不要亂修改了。以後升級也是,修改要在保證介面原有結構之上進行額外的擴展,否則會導致調用舊版介面的app出現bug。
8. 注意介面的安全
安全高於一切,必須要保證介面的安全。電話號碼等敏感信息在傳輸的過程中一定要加密,否則可能會被別人抓包到。拿取用戶信息的介面一定要驗證許可權,以防止介面被惡意調用,泄密用戶信息,甚至篡改信息。
9. php中的介面是指什麼
介面interface是一個規定,給人繼承用的東西,有點像抽象類。
介面定義了實現某種服務的一般規范,聲明了所需的函數和常量,但不指定如何實現。之所以不給出實現的細節,是因為不同的實體可能需要用不同的方式來實現公共的方法定義。關鍵是要建立必須實現的一組一般原則,只有滿足了這些原則才能說實現了這個介面。
(9)php移動端介面擴展閱讀
PHP介面(interface)的特點 :
1、介面的方法必須是公開的。
2、介面的方法默認是抽象的,所以不在方法名前面加abstract。
3、介面可以定義常量,但不能定義成員屬性,常量的定義和用法和類中常量一樣。
4、類可以實現多個介面(相當於把多個功能集於一身,如手機實現了小靈通、MP3、MP4的功能)
5、介面也可以繼承介面。
PHP同大多數的面向對象語言一樣,並不支持多重繼承。如果需要實現多重繼承功能,在PHP中,可以通過介面,它是PHP解決多重繼承問題的方法,在php5.4版本之後有個類的新特性trait,有興趣的可以網路下。
10. php如何調用api介面,主要是php調用聯通,移動api進行簡訊的發送
他會提供相應介面給你的,具體調用方法就相當於講求某個鏈接。
如:
http://localhost/operate.php?act=get_user_list&type=json
在這里operate.php相當於一個介面,其中get_user_list 是一個API(獲取用戶列表),講求返回的數據類型為JSON格式。
你只需要在你PHP代碼中執行這條鏈接他就會返回。
GET方式的直接使用
$file_contents = file_get_content('http://localhost/operate.php?act=get_user_list&type=json')
POST方式得用下面的(需要開啟PHP curl支持)。
$url = 'http://localhost/operate.php?act=get_user_list&type=json';
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
curl_setopt ( $ch, CURLOPT_POST, 1 ); //啟用POST提交
$file_contents = curl_exec ( $ch );
curl_close ( $ch );