请求要素是json字符串时,php如何获取原生请求体

php 常见问题及解决方法

(1)请求要素是json字符串,后台如何获取

//this is a common php library by huangwei ,
//date:2014-07-03
//see http://blog.sina.com.cn/s/blog_4657e98e0100dyxp.html
//see http://www.cnblogs.com/fullhouse/archive/2012/04/24/2468870.html
if(array_key_exists(‘HTTP_RAW_POST_DATA‘,$GLOBALS)){//判断是否有key-HTTP_RAW_POST_DATA
$raw_data=$GLOBALS[‘HTTP_RAW_POST_DATA‘];//always_populate_raw_post_data = On
}
if (empty($raw_data)) {
	$raw_data=$_POST;
}
if (empty($raw_data)) {
 	//echo "raw_data is empty";
 	$raw_data=file_get_contents("php://input");
 }
if(empty($raw_data)) {
    $raw_data=$_GET;
}
if(empty($raw_data)) {
    $raw_data=$_POST;
}

(2)如何把接收到的json字符串转化为对象

$post_object = json_decode($raw_data);

(3)如何把json对象转化为数组

 //convert object to array
function object_to_array($obj){
    if(is_array($obj)){
        return $obj;
    }
	$_arr = is_object($obj)? get_object_vars($obj) :$obj;
	foreach ($_arr as $key => $val){
	$val=(is_array($val)) || is_object($val) ? object_to_array($val) :$val;
	$arr[$key] = $val;
	}

	return $arr;
     
}

(4)获取php服务器操作系统类型

/***
 * @return string : windows or linux
 */
function serverOS(){
    $os_name=strtolower(php_uname(‘s‘));
    $os_pos=strpos($os_name,‘linux‘);
    if($os_pos === false) {
        return "windows";
    }
    else {
        return "linux";
    }
}

应用:

$root_path_index;
//echo serverOS();
if(serverOS()==‘linux‘){
    $root_path_index=-9;
}else{
    $root_path_index=32;
}

$config[‘webroot‘]=substr(dirname(__FILE__), 0, $root_path_index);///var/www/html/exchange

(5)字符串a是否包含字符串b

function strexists($a, $b)
{
	return !(strpos($a, $b) === FALSE);
}

(6)递归创建文件夹

function mkdirs($dir)
{    
	return is_dir($dir) or (mkdirs(dirname($dir)) and mkdir($dir, 0777));
}

php学习网站

http://www.w3school.com.cn/php

http://www.php.net/manual/zh/function.json-decode.php

http://www.cnblogs.com/bananaplan/p/Sublime-Text-3-Powerful.html

推荐php IDE:http://pan.baidu.com/s/1kTA81E3

时间: 2024-08-09 22:00:27

请求要素是json字符串时,php如何获取原生请求体的相关文章

JSON.parse 解析json字符串时,遇换行符报错

今天遇到后台返回的json字符串转对象时报错了,发现有个textarea提交的字段里有换行符. 错误原因:JSON.parse转json字符串时遇到一些特殊字符需要先转义,如图所示 可以用str.replace(/\n/g,"\\\\n")转义,'\\'转成单个'\','\\n'转成'\n',最后转成'\\n'这样就可以用parse转成对象时变为'\n',取出的字符串设置到html文本中\n被解析为换行. ECMA Script注明json字符串中需要转义的字符: 测试: 1.var

C#反序列化json字符串时,提示:应为来自命名空间“”的元素“root”。。遇到名称为“”、命名空间为“”的“None”。

反序列化调用接口返回的字符串时,出现:应为来自命名空间“”的元素“root”..遇到名称为“”.命名空间为“”的“None”.,导致反序列化数据失败,这种失败并有时候并不会直接提示反序列化失败(抛异常),而是把不能正常反序列化的部分丢弃(值为null),查了一下网上的资料,有说是使用反序列化和序列化的版本不一致,也有说是命名空间的问题,我检查了貌似都没问题,实在没办法了,直接先实例化一个,序列化后和接口返回的值做比较.终于找到问题出在哪了. 是因为我自己定义的类的属性命是Keys,二接口返回的这

当返回值为json字符串时 如何获得其中的json数组

json数据格式 {"IPPORT":"192.168.0.12","time":"2017-04-05 09:12:06","oper":"01","data":[{"paramUnit":"℃","name":"1","data":"3 1.7"

使用AFN 发出请求并传递json字符串参数遇到的一点问题

一. 问题描述:在使用AFN的GET请求, 在传递参数的时候,由于参数是字典类型的,并且AFN的GET方法的params参数是一个字典,如果参数嵌套着字典时, 当你 传参时会发现返回的是空的JSON数据, 并且报参数为空的错误(Xcode并不报错, 返回的数据中报错), 很明显是语法问题. 二. 解决思路:由于是语法错误,所以问了后台,发现后台需要的不是json数据,而是字符串格式的数据,如果直接把json字典作为参数传递,就是直接把json发给了后台,后台是不接受的. 三. 解决方法:所以应该

SpringMVC3中返回json字符串时500 Internal Server Error的处理方案

搭建 Spring3+MyBatis+Rest+BootStrap+JBPM项目环境后,测试发现了一个操蛋的问题.使用Spring MVC的自动类型转换为JSON时,后台数据List/Map获取完全正常,可是JS获取data报500错误.后台无任何异常信息. 问题解决思路:后台数据操作正常,数据返回前端时候异常,问题集中在Spring的jackson json转换上.而Spring用了第三方的Jackson Json数据转换,异常信息的获取需要靠它,代码中加入如下部分: 1 /** 2 * 查询

http协议发送json字符串请求

package post; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; public class DoTest { /** * 请求连接固定参数 * @param s 传参地址 */ public

jQuery中使用$.each()遍历后台响应的json字符串问题

今天在做练习项目的时候,使用$.each()方法遍历后台传过来的json字符串时,chrome浏览器中发现如下问题  Cannot use 'in' operator to search for 'length'...... 琢磨了好久,百思不得其解.前后台代码分别如下: 后台返回json字符串: $sql = "select pid, pname, price, pic, did, count from jd_product, jd_cart_detail where pid=productI

反序列化json串时限定字段不能为空

设计Json Api时,总会遇到将Json字符串转化为Java 对象,然后再处理业务逻辑.但对象中的某些字段我们不希望它们为空,这就需要我们对Java对象的字段进行校验.如果对象中包含多级对象,这样校验起来就非常麻烦. 我使用Google的gson进行json的序列化和反序列化操作,所以就想到gson是否具有这样的过滤机制,查看了好久的api,无奈也没有什么收获,所以就想到自己修改gson代码,增加这样一个功能.实现方式类似gson中的@SerializedName和@Expose等,采用注解实

jQuery loop over JSON字符串 – $.each实例

先来一段简单的javascript对象的遍历: var json = [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":"3","tagName":"banana"}, {"