欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

php數(shù)據(jù)接口方案 php接口技術(shù)

如何利用Thinkphp框架開發(fā)移動(dòng)端接口詳解

方案一:給原生APP提供api接口

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了景縣免費(fèi)建站歡迎大家使用!

使用TP框架時(shí) 放在common文件夾下文件名就叫function.php

?php

/**

*?Created?by?zhangkx

*?Email:?zkx520tnhb@163.com

*?Date:?2015/8/1

*?Time:?23:15

*/

/******?api開發(fā)輔助函數(shù)?*******/

/**

*?@param?null?$msg?返回正確的提示信息

*?@param?flag?success?CURD?操作成功

*?@param?array?$data?具體返回信息

*?Function?descript:?返回帶參數(shù),標(biāo)志信息,提示信息的json?數(shù)組

*

*/

function?returnApiSuccess($msg?=?null,$data?=?array()){

$result?=?array(

'flag'?=?'Success',

'msg'?=?$msg,

'data'?=$data

);

print?json_encode($result);

}

/**

*?@param?null?$msg?返回具體錯(cuò)誤的提示信息

*?@param?flag?success?CURD?操作失敗

*?Function?descript:返回標(biāo)志信息?‘Error',和提示信息的json?數(shù)組

*/

function?returnApiError($msg?=?null){

$result?=?array(

'flag'?=?'Error',

'msg'?=?$msg,

);

print?json_encode($result);

}

/**

*?@param?null?$msg?返回具體錯(cuò)誤的提示信息

*?@param?flag?success?CURD?操作失敗

*?Function?descript:返回標(biāo)志信息?‘Error',和提示信息,當(dāng)前系統(tǒng)繁忙,請(qǐng)稍后重試;

*/

function?returnApiErrorExample(){

$result?=?array(

'flag'?=?'Error',

'msg'?=?'當(dāng)前系統(tǒng)繁忙,請(qǐng)稍后重試!',

);

print?json_encode($result);

}

/**

*?@param?null?$data

*?@return?array|mixed|null

*?Function?descript:?過(guò)濾post提交的參數(shù);

*

*/

function?checkDataPost($data?=?null){

if(!empty($data)){

$data?=?explode(',',$data);

foreach($data?as?$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;

}

}

/**

*?@param?null?$data

*?@return?array|mixed|null

*?Function?descript:?過(guò)濾get提交的參數(shù);

*

*/

function?checkDataGet($data?=?null){

if(!empty($data)){

$data?=?explode(',',$data);

foreach($data?as?$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;

}

}

查詢單個(gè)果品詳細(xì)信息

/**

*?發(fā)布模塊

*

*?獲取信息單個(gè)果品詳細(xì)信息

*

*/

public?function?getMyReleaseInfo(){

//檢查是否通過(guò)post方法得到數(shù)據(jù)

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').'...';

//多張圖地址按逗號(hào)截取字符串,截取后如果存在空數(shù)組則需要過(guò)濾掉

$releaseInfo['fruit_pic']?=?array_filter(explode(',',?$releaseInfo['fruit_pic']));

$fruit_pic?=?$releaseInfo['fruit_pic'];unset($releaseInfo['fruit_pic']);

//為圖片添加存儲(chǔ)路徑

foreach($fruit_pic?as?$k=$v?){

$releaseInfo['fruit_pic'][]?=?'http://'.$_SERVER['HTTP_HOST'].'/Uploads/Release/'.$v;

}

if($releaseInfo){

returnApiSuccess('',$releaseInfo);

}else{

returnApiError(?'什么也沒(méi)查到(+_+)!');

}

}

findRelease()?方法的model

/**

*?查詢一條數(shù)據(jù)

*/

public?function?findRelease($where,$field){

if($where['status']?==?''?||?empty($where['status'])){

$where['status']?=?array('neq','9');

}

$result?=?$this-where($where)-field($field)-find();

return?$result;

}

app端接收到的數(shù)據(jù)(解碼json之后)

{

"flag":?"success",

"message":?"",

"responseList":?{

"id":?"2",

"fruit_name":?"蘋果",

"high_price":?"8.0",

"low_price":?"5.0",

"address":?"天津小白樓水果市場(chǎng)",

"size":?"2.0",

"weight":?"2.0",

"remark":?"急需...",

"fruit_pic":?[

"",

""

]

}

}

app端接收到的數(shù)據(jù)(原生json串)

代碼如下:

{"flag":"success","message":"","responseList":{"id":"2","fruit_name":"\u82f9\u679c","high_price":"8.0","low_price":"5.0","address":"\u5929\u6d25\u5c0f\u767d\u697c\u6c34\u679c\u5e02\u573a","size":"2.0","weight":"2.0","remark":"\u6025\u9700...","fruit_pic":["http:\/\/fruit.txunda.com\/Uploads\/Release\/201508\/55599e7514815.png","http:\/\/fruit.txunda.com\/Uploads\/Release\/201508\/554f2dc45b526.jpg"]}}

方案二:另外我們還可以通過(guò)ThinkPHP實(shí)現(xiàn)移動(dòng)端訪問(wèn)自動(dòng)切換主題模板,這樣也可以做到移動(dòng)端訪問(wèn)

ThinkPHP的模板主題機(jī)制,如果只是在PC,只要需修改 DEFAULT_THEME (新版模板主題默認(rèn)是空,表示不啟用模板主題功能)配置項(xiàng)就可以方便的實(shí)現(xiàn)多模板主題切換。

但對(duì)于移動(dòng)端與PC端,也許你會(huì)設(shè)計(jì)完全不同的主題風(fēng)格,且針對(duì)不同的來(lái)路提供不同的渲染方式,其中一種比較流行的方法是“響應(yīng)式設(shè)計(jì)”,但就本人經(jīng)歷而言,要實(shí)現(xiàn)完全的“響應(yīng)式設(shè)計(jì)”并不是那么容易,且解決兼容問(wèn)題也是個(gè)難題,假設(shè)是大型站點(diǎn),比如:淘寶、百度、拍拍這些,響應(yīng)式設(shè)計(jì)肯定是滿足不了需求的,而是需要針對(duì)手機(jī)訪問(wèn)用戶提供單獨(dú)的手機(jī)網(wǎng)站。

ThinkPHP 完全能夠?qū)崿F(xiàn),而且非常的簡(jiǎn)單。與TPM的智能模版切換引擎相同,只要對(duì)來(lái)路進(jìn)行判斷處理就行了。

一、將 ismobile() 加入到{項(xiàng)目/Common/common.php}

function?ismobile()?{

//?如果有HTTP_X_WAP_PROFILE則一定是移動(dòng)設(shè)備

if?(isset?($_SERVER['HTTP_X_WAP_PROFILE']))

return?true;

//此條摘自TPM智能切換模板引擎,適合TPM開發(fā)

if(isset?($_SERVER['HTTP_CLIENT'])?'PhoneClient'==$_SERVER['HTTP_CLIENT'])

return?true;

//如果via信息含有wap則一定是移動(dòng)設(shè)備,部分服務(wù)商會(huì)屏蔽該信息

if?(isset?($_SERVER['HTTP_VIA']))

//找不到為flase,否則為true

return?stristr($_SERVER['HTTP_VIA'],?'wap')???true?:?false;

//判斷手機(jī)發(fā)送的客戶端標(biāo)志,兼容性有待提高

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中查找手機(jī)瀏覽器的關(guān)鍵字

if?(preg_match("/("?.?implode('|',?$clientkeywords)?.?")/i",?strtolower($_SERVER['HTTP_USER_AGENT'])))?{

return?true;

}

}

//協(xié)議法,因?yàn)橛锌赡懿粶?zhǔn)確,放到最后判斷

if?(isset?($_SERVER['HTTP_ACCEPT']))?{

//?如果只支持wml并且不支持html那一定是移動(dòng)設(shè)備

//?如果支持wml和html但是wml在html之前則是移動(dòng)設(shè)備

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'))))?{

return?true;

}

}

return?false;

}

二、在{項(xiàng)目/Lib/}創(chuàng)建一個(gè) CommonAction.php,假設(shè)你的項(xiàng)目已公共控制器,則無(wú)需創(chuàng)建,直接加在里面就行了。

Class?CommonAction?extends?Action{

Public?function?_initialize(){

//移動(dòng)設(shè)備瀏覽,則切換模板

if?(ismobile())?{

//設(shè)置默認(rèn)默認(rèn)主題為?Mobile

C('DEFAULT_THEME','Mobile');

}

//............你的更多代碼.......

}

}

PHP開發(fā)Paypal支付,支付流程和接口實(shí)現(xiàn)方案

近期由于要開發(fā)公司外貿(mào)商城,需要對(duì)接Paypal支付。在開發(fā)過(guò)程中發(fā)現(xiàn)有好多坑。文檔都是英文文檔(主要還是自己英文水平不過(guò)關(guān))、網(wǎng)上找的那些翻譯過(guò)的文檔老舊、沙箱環(huán)境網(wǎng)站卡的要讓人崩潰。整個(gè)過(guò)程真是讓人頭大,經(jīng)過(guò)各種翻天覆地的百度、google、論壇終于功夫不負(fù)有心人跑通了。下面就結(jié)合網(wǎng)上的文檔給大家說(shuō)說(shuō)如何開發(fā)Paypal支付(一個(gè)Demo),避免大家在踩坑。

3.開啟PDT設(shè)置同步回調(diào)地址(這步拿到at_token return回調(diào)使用)

3.項(xiàng)目根目錄下創(chuàng)建return.php文件

4.項(xiàng)目根目錄下創(chuàng)建cancel.php文件

目前網(wǎng)上的文檔感覺(jué)沒(méi)有一個(gè)整體流程詳細(xì)的介紹,而且有些比較老。本篇文章是匯總整理并加入了一些自己的改造和踩坑分享而已。文介紹了paypal支付的其中一種方式,還有一種SDK的方式,這兩種有點(diǎn)小區(qū)別但是整體的流程還是一樣是。等后續(xù)會(huì)和大家分享另一種方式。還請(qǐng)各位大佬多多指教。

PHP網(wǎng)站怎么連接到數(shù)據(jù)庫(kù)?

常規(guī)方式

常規(guī)方式就是按部就班的讀取文件了。其余的話和上述方案一致。

// 讀取配置文件內(nèi)容

$handle = fopen("filepath", "r"); ? ? ? ? ? ?$content = fread($handle, filesize("filepath"));123

PHP解析XML

上述兩種讀取文件,其實(shí)都是為了PHP解析XML來(lái)做準(zhǔn)備的。關(guān)于PHP解析XML的方式的博客有很多。方式也有很多,像simplexml,XMLReader,DOM啦等等。但是對(duì)于比較小型的xml配置文件,simplexml就足夠了。

配置文件

?xml version="1.0" encoding="UTF-8" ?mysql

!-- 為防止出現(xiàn)意外,請(qǐng)按照此標(biāo)準(zhǔn)順序書寫.其實(shí)也無(wú)所謂了 --

hostlocalhost/host

userroot/user

password123456/password

dbtest/db

port3306/port/mysql12345678910

解析

?php/**

* 作為解析XML配置文件必備工具

*/class XMLUtil {

public static $dbconfigpath = "./db.config.xml"; ? ?public static function getDBConfiguration() {

$dbconfig = array (); ? ? ? ?try { ? ? ? ? ? ?// 讀取配置文件內(nèi)容

$handle = fopen(self::$dbconfigpath, "r"); ? ? ? ? ? ?$content = fread($handle, filesize(self::$dbconfigpath)); ? ? ? ? ? ?// 獲取xml文檔根節(jié)點(diǎn),進(jìn)而獲取相關(guān)的數(shù)據(jù)庫(kù)信息

$mysql = simplexml_load_string($content); ? ? ? ? ? ?// 將獲取到的xml節(jié)點(diǎn)信息賦值給關(guān)聯(lián)數(shù)組,方便接下來(lái)的方法調(diào)用

$dbconfig['host'] = $mysql-host; ? ? ? ? ? ?$dbconfig['user'] = $mysql-user; ? ? ? ? ? ?$dbconfig['password'] = $mysql-password; ? ? ? ? ? ?$dbconfig['db'] = $mysql-db; ? ? ? ? ? ?$dbconfig['port'] = $mysql-port; ? ? ? ? ? ?// 將配置信息以關(guān)聯(lián)數(shù)組的形式返回

return $dbconfig;

} catch ( Exception $e ) { ? ? ? ? ? ?throw new RuntimeException ( "mark讀取數(shù)據(jù)庫(kù)配置文件信息出錯(cuò)!/markbr /" );

} ? ? ? ?return $dbconfig;

}

}1234567891011121314151617181920212223242526272829

數(shù)據(jù)庫(kù)連接池

對(duì)于PHP程序而言,優(yōu)化永無(wú)止境。而數(shù)據(jù)庫(kù)連接池就在一定程度上起到了優(yōu)化的作用。其使得對(duì)用戶的每一個(gè)請(qǐng)求而言,無(wú)需每次都像數(shù)據(jù)庫(kù)申請(qǐng)鏈接資源。而是通過(guò)已存在的數(shù)據(jù)庫(kù)連接池中的鏈接來(lái)返回,從時(shí)間上,效率上,都是一個(gè)大大的提升。

于是,這里簡(jiǎn)單的模擬了一下數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn)。核心在于維護(hù)一個(gè)“池”。

從池子中取,用畢,歸還給池子。

?php/**x

* ?PHP中的數(shù)據(jù)庫(kù) 工具類設(shè)計(jì)

* ?郭璞

* ?2016年12月23日

*

**/class DbHelper { ? ?private $dbconfig; ? ?private $dbpool; ? ?public $poolsize; ? ?public function __construct($poolsize = 20) { ? ? ? ?if (! file_exists ( "./utils.php" )) { ? ? ? ? ? ?throw new RuntimeException ( "markutils.php文件丟失,無(wú)法進(jìn)行配置文件的初始化操作!/markbr /" );

}else {

require './utils.php';

} ? ? ? ?// 初始化 配置文件信息

$this-dbconfig = XMLUtil::getDBConfiguration (); ? ? ? ?// 準(zhǔn)備好數(shù)據(jù)庫(kù)連接池“偽隊(duì)列”

$this-poolsize = $poolsize;

$this-dbpool = array (); ? ? ? ?for($index = 1; $index = $this-poolsize; $index ++) {

$conn = mysqli_connect ( $this-dbconfig ['host'], $this-dbconfig ['user'], $this-dbconfig ['password'], $this-dbconfig ['db'] ) or die ( "mark連接數(shù)據(jù)庫(kù)失敗!/markbr /" );

array_push ( $this-dbpool, $conn );

}

} ? ?/**

* 從數(shù)據(jù)庫(kù)連接池中獲取一個(gè)數(shù)據(jù)庫(kù)鏈接資源

*

* @throws ErrorException

* @return mixed

*/

public function getConn() { ? ? ? ?if (count ( $this-dbpool ) = 0) { ? ? ? ? ? ?throw new ErrorException ( "mark數(shù)據(jù)庫(kù)連接池中已無(wú)鏈接資源,請(qǐng)稍后重試!/mark" );

} else { ? ? ? ? ? ?return array_pop ( $this-dbpool );

}

} ? ?/**

* 將用完的數(shù)據(jù)庫(kù)鏈接資源放回到數(shù)據(jù)庫(kù)連接池

*

* @param unknown $conn

* @throws ErrorException

*/

public function release($conn) { ? ? ? ?if (count ( $this-dbpool ) = $this-poolsize) { ? ? ? ? ? ?throw new ErrorException ( "mark數(shù)據(jù)庫(kù)連接池已滿/markbr /" );

} else {

array_push ( $this-dbpool, $conn );

}

}

}

PHP如何寫一個(gè)給外人上傳數(shù)據(jù)的接口?

接口的流程.

建立控制器(訪問(wèn)地址)-審核訪問(wèn)者身份(token)-驗(yàn)證提交數(shù)據(jù)是否符合類型(validate

)-處理接收數(shù)據(jù)(邏輯流程)-返回結(jié)果(json字符串).

其中要注意是否存在跨域,如果跨域要做跨域處理,例如返回jsonp.

本文名稱:php數(shù)據(jù)接口方案 php接口技術(shù)
路徑分享:http://chinadenli.net/article14/dogcege.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作網(wǎng)站內(nèi)鏈網(wǎng)站改版定制網(wǎng)站網(wǎng)站設(shè)計(jì)公司企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作