本文目錄一覽:
php如何發送和接收JSON數據
對於json,PHP有對應的方法進行操作。
一般而言,json會以字元串形式傳給PHP腳本,一般都是放在$_POST裡面,
14
?php
// 接收
$json_parameter = $_POST[‘json_str’];
// 處理, 變成數組
$array = json_decode($json_parameter);
// PHP 把數組數據變成json格式字元串,發給頁面
$demo = array(
‘key’ = ‘value’,
‘key2’ = ‘value2’
);
$demo_json = json_encode($demo); // 格式是{“key”:”value”,”key2″:”value2″}
echo $demo_json;
如何在php後端及時推送消息給客戶端
?php
use Workerman\Worker;
require_once ‘./Workerman/Autoloader.php’;
// 初始化一個worker容器,監聽1234埠
$worker = new Worker(‘websocket://0.0.0.0:1234’);
// 這裡進程數必須設置為1
$worker-count = 1;
// worker進程啟動後建立一個內部通訊埠
$worker-onWorkerStart = function($worker)
{
// 開啟一個內部埠,方便內部系統推送數據,Text協議格式 文本+換行符
$inner_text_worker = new Worker(‘Text://0.0.0.0:5678’);
$inner_text_worker-onMessage = function($connection, $buffer)
{
global $worker;
// $data數組格式,裡面有uid,表示向那個uid的頁面推送數據
$data = json_decode($buffer, true);
$uid = $data[‘uid’];
// 通過workerman,向uid的頁面推送數據
$ret = sendMessageByUid($uid, $buffer);
// 返回推送結果
$connection-send($ret ? ‘ok’ : ‘fail’);
};
$inner_text_worker-listen();
};
// 新增加一個屬性,用來保存uid到connection的映射
$worker-uidConnections = array();
// 當有客戶端發來消息時執行的回調函數
$worker-onMessage = function($connection, $data)use($worker)
{
// 判斷當前客戶端是否已經驗證,既是否設置了uid
if(!isset($connection-uid))
{
// 沒驗證的話把第一個包當做uid(這裡為了方便演示,沒做真正的驗證)
$connection-uid = $data;
/* 保存uid到connection的映射,這樣可以方便的通過uid查找connection,
* 實現針對特定uid推送數據
*/
$worker-uidConnections[$connection-uid] = $connection;
return;
}
};
// 當有客戶端連接斷開時
$worker-onClose = function($connection)use($worker)
{
global $worker;
if(isset($connection-uid))
{
// 連接斷開時刪除映射
unset($worker-uidConnections[$connection-uid]);
}
};
// 向所有驗證的用戶推送數據
function broadcast($message)
{
global $worker;
foreach($worker-uidConnections as $connection)
{
$connection-send($message);
}
}
// 針對uid推送數據
function sendMessageByUid($uid, $message)
{
global $worker;
if(isset($worker-uidConnections[$uid]))
{
$connection = $worker-uidConnections[$uid];
$connection-send($message);
return true;
}
return false;
}
// 運行所有的worker(其實當前只定義了一個)
Worker::runAll();
啟動後端服務
php push.php start -d
前端接收推送的js代碼
var ws = new WebSocket(‘ws://127.0.0.1:1234’);
ws.onopen = function(){
var uid = ‘uid1’;
ws.send(uid);
};
ws.onmessage = function(e){
alert(e.data);
};
後端推送消息的代碼
// 建立socket連接到內部推送埠
$client = stream_socket_client(‘tcp://127.0.0.1:5678’, $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);
// 推送的數據,包含uid欄位,表示是給這個uid推送
$data = array(‘uid’=’uid1’, ‘percent’=’88%’);
// 發送數據,注意5678埠是Text協議的埠,Text協議需要在數據末尾加上換行符
fwrite($client, json_encode($data).”\n”);
// 讀取推送結果
echo fread($client, 8192);
這裡的uid不一定是用戶的id,也可以理解為任務id即 taskid
以上代碼親測可以直接使用
PHP如何通過Post請求發送Json數據
首先要把數據轉換成json格式,再通過curl方法調用介面並傳參數
代碼如下:
$keyword = urlencode($_POST[‘keyword’]);
$parameters = json_encode(array(‘keyWord’=$keyword,’areaCode’=’*’));
$post_data[‘appToken’] = “323ds7674354fds32fdsda60173”;//隨便寫的
$post_data[‘parameters’] = $parameters;
$url = ”;//隨便寫的
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);//用post方法傳送參數
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
之後就返回數據即可。
php的json怎麼傳到前台?
json.php
?php
echo ‘{“key”:”value”}’;
js
$.get(‘json.php’,function(data){console.info(data);});
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239922.html