對以前用PHP寫接口,與APP對接一些問題彙總

咱們在用PHP寫API接口的時候,對於數值型的處理問題進行一下彙總。由於PHP是弱類型語言,在與一些強類型語言對接的時候,常常出問題。php

一、PHP對長整型數據有溢出問題
二、PHP從Mysql數據庫裏取數據的時候,取出的數據類型都是string類型。無論在定義表字段是int仍是bigint等,取出來都是string類型
三、對於接口通常都是body提交,若是直接header輸出的話,是接受不到數據的sql


那麼用PHP寫API接口的時候,如何處理呢?
第一個問題:升級PHP版本,升級到PHP7。對長整型的數字就不會溢出,固然你的服務器通常都是64位,和操做系統的位數也有必定的關係。
第二個問題:API接口最終返回給APP端都是JSON格式的加密,那麼在PHP把數據從數據庫中取出來時候,數據庫

json_encode($array, JSON_NUMERIC_CHECK);


注意「JSON_NUMERIC_CHECK」,把字符串類型的數字轉換成數字型,這樣就不會也問題了
第三個問題:直接貼代碼:
 json

$data = array('requestInfo' => $data);

$params = array('http' => array(
            'method' => 'POST',
            'header'=>array(
                "Content-Type:application/x-www-form-urlencoded"
            ),
            'content' => http_build_query($data)
));
$ctx = stream_context_create($params);
$res = file_get_contents(API_URL.$url, false, $ctx);
if(preg_match('/^\xEF\xBB\xBF/',$res)) {
         $res=substr($res,3);
}

若是不用array(‘requestInfo’=>$data),再封裝一次的話,直接在'content'=>$data,接口層是得不到數據的,無論你採用file_get_contents仍是curl,都得不到數據~服務器

相關文章
相關標籤/搜索