PHP file_get_content在远程通信之前的准备,服务器中json_decode解析详解

本文主要是介绍PHP file_get_content在远程通信之前的准备,服务器中json_decode解析详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

file_get_content在远程通信之前:

1.需要给数据生成请求字符串,

2.转化为二进制流,

3.进行file_get_content远程访问。

4.再返回的数据中,在本地服务器可以用json_decode进行解析。


代码实现,以及对json_decode()函数解析的详解:

<?php
/**
 * Created by PhpStorm.
 * User: 洋   汪
 * Date: 2016/7/20
 * Time: 20:00
 */
header("Content-type:text/html;charset=utf-8");
function postTrans($url, $data)
{
    //发送到服务器之前应该如何对数据进行编码
    //POST4中编码格式:
    //1.(默认)application/x-www-form-urlencoded
    //2.multipart/form-data(上传文件时候)
    // 3.application/json
    // 4.text/xml

    //http_build_query()生成URL-encode之后的请求字符串。
    $content = http_build_query($data);
    $requestPost = array(
        "http" => array(
            "header" => "Content-Type:application/x-www-form-urlencoded\r\n" .
                "Content-Length:" . strlen($content) . "\r\n" .
                "User-Agent:MyAgent/1.0\r\n",
            "method" => "POST",
            "content" => $content
        )
    );

    //转化为计算机的二进制流
    $context = stream_context_create($requestPost);
    //进行跨域访问
    $result = file_get_contents($url, false, $context, -1, 40000);
    return $result;
}


//调用远程函数并传入远程ip服务器和数据,进行远程访问。
$result = postTrans("http://192.168.4.101:90/PHPStudy4/server.php", array("username" => "admin", "password" => "admin"));
//不解析的情况下。输出:未用解析时直接输出:{"code":"101","pass":"111"}
echo "未用解析时直接输出:" . $result . "<br>";
//不解析里边的数值是拿不出来的。输出:未用解析时['code']{
echo "未用解析时['code']" . $result["code"] . "<br>";


//接下来讲解,并用json_decode进行解析。
//当传过来的值为json_encode()方式传递时,php中用json_decode()解析。
//json_decode(接收到的数据,true/false(false为默认的))
//false情况:把接收的数据解析成对象;
//true情况:把传递的值,解析为数组。

//false情况的直接输出造成fatal errorObject of class stdClass could not be converted to string
//stdClass的对象不能转换为字符串
//echo "解析false情况:" . json_decode($result) . "<br>";

//false情况以对象调用。输出:解析false情况->code调用对象:101
echo "解析false情况->code调用对象:" . json_decode($result)->code . "<br>";

//true情况以数组调用:
//true情况直接输出,输出Array这个词
echo "解析true情况调用对象:" . json_decode($result, true) . "<br>";
//数组形式调用。输出:解析true情况['']数组调用:101
$r = json_decode($result, true);
echo "解析true情况['']数组调用:" . $r["code"] . "<br>";
?>



这篇关于PHP file_get_content在远程通信之前的准备,服务器中json_decode解析详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102159

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制