咱们在用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,都得不到数据~服务器