具體什么報(bào)錯(cuò),有圖片嗎?
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、沙河ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的沙河網(wǎng)站制作公司
由于nginx默認(rèn)的fastcgi進(jìn)程響應(yīng)緩沖區(qū)太小造成,這種情況下導(dǎo)致fastcgi進(jìn)程被掛起,如果fastcgi服務(wù)隊(duì)這個(gè)掛起處理不是很好的話,就可能提示“504 Gateway Time-out”錯(cuò)誤。
PHP環(huán)境的配置問題,這里我們需要對(duì)php-fpm和nginx進(jìn)行配置修改。因?yàn)檫@種情況下,也會(huì)出現(xiàn)“504 Gateway Time-out”錯(cuò)誤提示。
第一步:在網(wǎng)站根文件夾建立“1.php”文件,寫入以下數(shù)據(jù):
?php
define('CHARSET', 'GBK'); //服務(wù)器端數(shù)據(jù)編碼
require './source/class/class_xml.php'; //XML格式的文檔和array的相互轉(zhuǎn)換的類
error_reporting(7);
$charset = $_GET['charset'] ? $_GET['charset'] : $_POST['charset']; //客戶端數(shù)據(jù)編碼
//數(shù)據(jù)轉(zhuǎn)碼
if(strtoupper($charset) != CHARSET) {
foreach($POST as $key = $value) {
$POST[$key] = iconv($charset, CHARSET, $value);
}
foreach($GET as $key = $value) {
$GET[$key] = iconv($charset, CHARSET, $value);
}
}
$data = array('html'='', 'data'=''); //初始化要返回?cái)?shù)據(jù)
$sign = $_GET['sign'] ? $_GET['sign'] : $_POST['sign']; //獲取客戶端請(qǐng)求數(shù)據(jù)的簽名
$clientid = $_GET['clientid'] ? $_GET['clientid'] : $_POST['clientid']; //客戶端ID
$client = get_client_by_clientid($clientid); //得到客戶端的相關(guān)信息
if(empty($client)) { //客戶端不存在
exit('CLIENT_NOT_EXISTS'); //直接返回失敗
}
$datasign = ''; //數(shù)據(jù)簽名
if(!empty($_POST)) {
unset($_POST['sign']); //刪除簽名參數(shù),此參數(shù)不參加簽名計(jì)算
$datasign = get_sign($_POST, $client['key']); //計(jì)算數(shù)據(jù)的簽名
} else {
unset($_GET['sign']); //刪除簽名參數(shù),此參數(shù)不參加簽名計(jì)算
$datasign = get_sign($_GET, $client['key']); //計(jì)算數(shù)據(jù)的簽名
}
if($datasign != $sign) { //簽名不正確
exit('SIGN_ERROR'); //輸入簽名錯(cuò)誤
}
if($_POST['op'] == 'getdata') { //判斷是否為請(qǐng)求數(shù)據(jù)列表
$datalist = $data = array();//數(shù)據(jù)列表
$wherearr = array(); //SQL 條件數(shù)組
//獲取客戶端POST參數(shù)
$start = intval($_POST['start']); //起始數(shù)據(jù)行數(shù)
$limit = intval($_POST['items']); //要顯示多少條數(shù)
$bannedids = addslashes($_POST['bannedids']); //客戶端屏蔽的IDS
$param1 = addslashes($_POST['param1']); //數(shù)據(jù)調(diào)用參數(shù)1,假設(shè)此值要求為string型
$param2 = intval($_POST['param2']); //數(shù)據(jù)調(diào)用參數(shù)2,假設(shè)此值要求為int型
//處理參數(shù)1
if(!empty($param1)){
$wherearr[] = "fieldsparam1='$param1'";
}
//處理參數(shù)2
if(!empty($param2)) {
$wherearr[] = "fieldsparam2='$param2'";
}
//處理客戶端屏蔽的IDS
if(!empty($bannedids)) {
$banids = explode(',', $bannedids);
$wherearr[] = "csid NOT IN (".implode("','", $banids)."')";
}
$where = !empty($wherearr) ? 'WHERE '.implode(' AND ', $wherearr) : ''; //構(gòu)造條件
/*數(shù)據(jù)庫(kù)相關(guān)處理
$query = DB::query('SELECT * FROM '.DB::table('tablename')." $where LIMIT $start, $limit"); //SQL查詢
while($value = DB::fetch($query)) {
//此處為數(shù)據(jù)處理邏輯代碼
$data[] = $value;
}
*/
//以下為臨時(shí)測(cè)試數(shù)據(jù),正式環(huán)境請(qǐng)根據(jù)自己的業(yè)務(wù)做相關(guān)調(diào)整
$url = '';
$data = range($start, $start + $limit);//構(gòu)造臨時(shí)的假數(shù)據(jù)
foreach($data as $value) {
//需要注意: 除 id, title, url, pic, picflag, summary 幾個(gè)字段外,其它字段需要放到 fields 數(shù)組里。
$datalist[] = array(
'id' = $value,
'title' = 'xml_block_title'.$value, //標(biāo)題
'url' = $url.'xml_server.php?csid='.$value, //鏈接地址
'pic' = $url.'/data/attachment/photo.gif', //圖片地址
'picflag' = '0', //0為url 1為本地 2 為ftp遠(yuǎn)程;如果圖片是DX系統(tǒng)中的圖片可以情況設(shè)置為1或2,其它情況為0
'summary' = '', //簡(jiǎn)介
'fields' = array( //配置規(guī)范中fields中指定的字段
'author' = 'xml_user'.$value,
'authorid' = $value,
'field1' = 'field1value'.$value,
'field2' = 'field2value'.$value
)
);
}
$data['data'] = $datalist;
//如果要返回HTML代碼,可直接使用以下代碼
//$data['html'] = 'HTML CODE';
$xml = array2xml($data); //轉(zhuǎn)換為XML文檔
} else if($_GET['op'] == 'getconfig') {
$xml = file_get_contents('block_xml_sample.xml');//block_xml_sample.xml文件中的內(nèi)容為 配置規(guī)范XML文檔示例 的內(nèi)容
} else {
$xml = 'NO_OPERATION';
}
ob_end_clean();
@header("Expires: -1");
@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
header("Content-type: text/xml");
echo $xml;
exit();
/**
* 獲得客戶端信息
* @param $clientid
* @return array 客戶端信息數(shù)組
*/
function get_client_by_clientid($clientid){
$client = array();
$clientid = intval($clientid);
if($clientid) {
/*數(shù)據(jù)庫(kù)相關(guān)處理
$client = DB::fetch_first('SELECT * FROM '.DB::table('clienttable')." clientid='$clientid'"); //SQL查詢
*/
//以下為臨時(shí)測(cè)試數(shù)據(jù),正式環(huán)境請(qǐng)根據(jù)自己的業(yè)務(wù)做相關(guān)調(diào)整
//模擬數(shù)據(jù)庫(kù)
$CLIENTSDB = array(
'100000' = array(
'clientid' = '100000',
'key' = '*654%#(asd94',
),
'200000' = array(
'clientid' = '200000',
'key' = '1#9!(@@34#94',
),
'300000' = array(
'clientid' = '300000',
'key' = '7$@^8^$7as89',
),
'400000' = array(
'clientid' = '400000',
'key' = '23@#86^%432',
),
);
$client = isset($CLIENTSDB[$clientid]) ? $CLIENTSDB[$clientid] : array();
}
return $client;
}
/**
* 生成簽名
* @param array $para 參數(shù)數(shù)組
* @param string $key 加密密鑰
* @return string 簽名
*/
function get_sign($para, $key = ''){
ksort($para);
$signarr = array();
foreach($para as $k = $v) {
$signarr[] = $k.'='.$v;
}
$sign = implode('', $signarr);
$sign = md5($sign.$key);
return $sign;
}
?
注意:不是網(wǎng)站記錄的URL來調(diào)試的時(shí)候,會(huì)出現(xiàn)“Access Denied”,那是網(wǎng)站防止文件外部打開的標(biāo)志,進(jìn)入“./source/class/class_xml.php”暫時(shí)關(guān)閉開頭的二行:
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
exit('Access Denied');}
特別注意:99行時(shí)候的“$xml = file_get_contents('block_xml_sample.xml');//block_xml_sample.xml文件中的內(nèi)容為 配置規(guī)范XML文檔示例 的內(nèi)容”;就是這個(gè)文件造成很多人安裝第三方插件不成功的。這個(gè)文件改名稱的同時(shí)記得要修改1.php的99行;
特別注意文件block_xml_sample.xml中的“item id="name"![CDATA[C/S 數(shù)據(jù)類]]/item”中間的“C/S 數(shù)據(jù)類”就是模塊名稱;有的時(shí)候如“item id="version"![CDATA[X1.5]]/item”版本號(hào)不對(duì)也會(huì)報(bào)錯(cuò);修改為網(wǎng)站的版本即可。
第二步:建立“block_xml_sample.xml”文件,寫入如下數(shù)據(jù):
?xml version="1.0" encoding="ISO-8859-1"?
root
item id="Title"![CDATA[Discuz! Block]]/item
item id="Data"
item id="version"![CDATA[X1.5]]/item
item id="name"![CDATA[C/S 數(shù)據(jù)類]]/item
item id="fields"
item id="url"
item id="name"![CDATA[鏈接地址]]/item
item id="formtype"![CDATA[text]]/item
item id="datatype"![CDATA[string]]/item
/item
item id="title"
item id="name"![CDATA[標(biāo)題]]/item
item id="formtype"![CDATA[title]]/item
item id="datatype"![CDATA[title]]/item
/item
item id="pic"
item id="name"![CDATA[圖片]]/item
item id="formtype"![CDATA[pic]]/item
item id="datatype"![CDATA[pic]]/item
/item
item id="summary"
item id="name"![CDATA[簡(jiǎn)介]]/item
item id="formtype"![CDATA[summary]]/item
item id="datatype"![CDATA[summary]]/item
/item
item id="author"
item id="name"![CDATA[作者]]/item
item id="formtype"![CDATA[text]]/item
item id="datatype"![CDATA[text]]/item
/item
item id="authorid"
item id="name"![CDATA[作者ID]]/item
item id="formtype"![CDATA[text]]/item
item id="datatype"![CDATA[int]]/item
/item
item id="field1"
item id="name"![CDATA[字段1]]/item
item id="formtype"![CDATA[text]]/item
item id="datatype"![CDATA[string]]/item
/item
item id="field2"
item id="name"![CDATA[字段2]]/item
item id="formtype"![CDATA[text]]/item
item id="datatype"![CDATA[string]]/item
/item
/item
item id="getsetting"
item id="param1"
item id="title"![CDATA[數(shù)據(jù)調(diào)用參數(shù)1]]/item
item id="type"![CDATA[text]]/item
item id="default"![CDATA[]]/item
/item
item id="param2"
item id="title"![CDATA[數(shù)據(jù)調(diào)用參數(shù)2]]/item
item id="type"![CDATA[mcheckbox]]/item
item id="value"
item id="0"
item id="0"![CDATA[1]]/item
item id="1"![CDATA[選項(xiàng)1]]/item
/item
item id="1"
item id="0"![CDATA[2]]/item
item id="1"![CDATA[選項(xiàng)2]]/item
/item
/item
item id="default"![CDATA[1]]/item
/item
item id="titlelength"
item id="title"![CDATA[標(biāo)題長(zhǎng)度]]/item
item id="type"![CDATA[text]]/item
item id="default"![CDATA[40]]/item
/item
item id="summarylength"
item id="title"![CDATA[簡(jiǎn)介長(zhǎng)度]]/item
item id="type"![CDATA[text]]/item
item id="default"![CDATA[80]]/item
/item
item id="start"
item id="title"![CDATA[起始數(shù)據(jù)行數(shù)]]/item
item id="type"![CDATA[text]]/item
item id="default"![CDATA[0]]/item
/item
/item
item id="style"
item id="0"
item id="name"![CDATA[模板名稱]]/item
item id="template"![CDATA[div class="module cl xl xl1"ul[loop]liema href="home.php?uid={authorid}"FONT COLOR="RED"{author}/FONT/a/ema href="{url}"{title}/a/li[/loop]/ul/div]]/item
/item
item id="1"
item id="name"![CDATA[模板名稱紅色]]/item
item id="template"![CDATA[div class="module cl xl xl1"ul[loop]liemfont color="red"a href="home.php?uid={authorid}"{author}/a/font/ema href="{url}"{title}/a/li[/loop]/ul/div]]/item
/item
/item
/item
/root
第三步:建立第三方模塊
管理平臺(tái) 》 門戶 》 第三方模塊 》 添加:
第三方地址:url/1.php
客戶短ID:200000 見1.php的133行
簽名加密方式:MD5簽名
通信密匙:1#9!(@@34#94
點(diǎn)擊提交,完成模塊建立工作。
第四步:前臺(tái)頁(yè)面調(diào)用:
DIY網(wǎng)頁(yè) 》 DIY 》 高級(jí)模式 》 模塊 》 第三方類
是不是看到剛剛建立的模塊了。
選擇調(diào)用即可。
第五步:擴(kuò)展讀取任一(包括外部)網(wǎng)頁(yè)HTML代碼數(shù)據(jù),新建一個(gè)網(wǎng)頁(yè)“ee.htm”,數(shù)據(jù)規(guī)范如下:
?xml version="1.0" encoding="ISO-8859-1"?
root
item id="html"![CDATA[]]/item
item id="data"
item id="0"
item id="id"![CDATA[14]]/item
item id="title"![CDATA[xml_block_title14]]/item
item id="url"![CDATA[xml_server.php]]/item
item id="pic"![CDATA[nophoto.gif]]/item
item id="picflag"![CDATA[1]]/item
item id="summary"![CDATA[]]/item
item id="fields"
item id="author"![CDATA[xml_user14]]/item
item id="authorid"![CDATA[14]]/item
item id="field1"![CDATA[field1value14]]/item
item id="field2"![CDATA[field2value14]]/item
/item
/item
item id="1"
item id="id"![CDATA[15]]/item
item id="title"![CDATA[xml_block_title15]]/item
item id="url"![CDATA[xml_server.php]]/item
item id="pic"![CDATA[nophoto.gif]]/item
item id="picflag"![CDATA[1]]/item
item id="summary"![CDATA[]]/item
item id="fields"
item id="author"![CDATA[xml_user15]]/item
item id="authorid"![CDATA[15]]/item
item id="field1"![CDATA[field1value15]]/item
item id="field2"![CDATA[field2value15]]/item
/item
/item
/item
/root
第六步:讀取外部網(wǎng)頁(yè)(ee.htm)時(shí)1.PHP的代碼:
適合格式固化的網(wǎng)頁(yè)使用,安全則自己去加上。
?php
define('CHARSET', 'GBK'); //服務(wù)器端數(shù)據(jù)編碼
if($_POST['op'] == 'getdata') { //判斷是否為請(qǐng)求數(shù)據(jù)列表
$xml = file_get_contents('ee.htm');//讀取網(wǎng)頁(yè)數(shù)據(jù) 如下傳遞參數(shù)另..
} else if($_GET['op'] == 'getconfig') {
$xml = file_get_contents('block_xml_sample.xml'); //安裝時(shí)候需要調(diào)用的網(wǎng)頁(yè);為配置規(guī)范XML文檔示例
} else {
$xml = 'NO_OPERATION';
}
ob_end_clean();
@header("Expires: -1");
@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
header("Content-type: text/xml");
echo $xml;
exit();
?
以上的步驟就解決了DZ可以與任一網(wǎng)站數(shù)據(jù)共享的問題
需求描述不準(zhǔn)確。
你是需要在客戶端同時(shí)訪問幾個(gè)接口(接口端用的php)?
1.如果是這個(gè)需求的話,客戶端js自帶異步屬性,用ajax,同時(shí)做幾個(gè)調(diào)用,在回調(diào)里處理數(shù)據(jù)就行了,只是服務(wù)器端,如果有session,需要確保耗時(shí)操作前寫入并關(guān)閉session,不然同一個(gè)客戶端的訪問會(huì)被session卡住(默認(rèn)的文件模式的session)
2.還是需要在php代碼中同時(shí)進(jìn)行多個(gè)接口并發(fā)調(diào)用,在各自返回時(shí)處理,然后整合結(jié)果輸出 ?
這種的話,php本身不支持異步并發(fā)編程,可以考慮用nodejs或者php的擴(kuò)展 swoole 之類的去做
Guzzle是一個(gè)PHP的HTTP客戶端,用來發(fā)送接口請(qǐng)求。通常我們應(yīng)用在服務(wù)內(nèi)外部接口調(diào)用場(chǎng)景。Guzzle實(shí)現(xiàn)了HTTP GET, POST,HEAD,OPTIONS,PUT, DELETE等請(qǐng)求方式。支持文件的上傳下載。支持JSON數(shù)據(jù)的請(qǐng)求響應(yīng)。支持接口的同步、異步、并發(fā)請(qǐng)求。基本滿足了我們常用業(yè)務(wù)邏輯。
1、 Guzzle的安裝。
如果我們用PHP的依賴管理工具Composer安裝的話比較簡(jiǎn)單。
2、 Guzzle的代碼引入。
3、 Guzzle的使用。
4、HttpGuzzle封裝類。
第一個(gè)字母表示類型 count表示ID數(shù)量 / 隔開 ild,ild,ild來記錄數(shù)據(jù)(我是按照你的意思來)
比方
i5/1,2,3,4,5
類型為int 一共5個(gè) 分別1,2,3,4,5
其實(shí)有必要么。。。直接i:1,2,3,4,5不就行了
不一樣的話這樣寫 i:1,2,3|s:4,5,6
懂了嗎?
新聞名稱:同步接口數(shù)據(jù)php 接口數(shù)據(jù)對(duì)接
文章地址:http://muchs.cn/article30/hgeiso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、App設(shè)計(jì)、電子商務(wù)、網(wǎng)站制作、微信公眾號(hào)
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)