Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can’;t在PHP中从fopen读取JSON数据_Php_Json_Fopen - Fatal编程技术网

Can’;t在PHP中从fopen读取JSON数据

Can’;t在PHP中从fopen读取JSON数据,php,json,fopen,Php,Json,Fopen,我正试图使用下面的函数通过POST和fopen发送一些JSON数据 function doPostRequest($url, $data, $optional_headers = null) { $params = array( 'http' => array( 'method' => 'POST', 'content' => $data, 'header' => 'Con

我正试图使用下面的函数通过POST和fopen发送一些JSON数据

function doPostRequest($url, $data, $optional_headers = null)
{
    $params = array(
        'http' => array(
            'method'  => 'POST',
            'content' => $data,
            'header'  => 'Content-type: application/json' . "\r\n"
                       . 'Content-Length: ' . strlen($data) . "\r\n"
        )
    );

    if ($optional_headers !== null) {
        $params['http']['header'] = $optional_headers;
    }

    $ctx = stream_context_create($params);

    try {
        $fp = fopen($url, 'rb', false, $ctx);

        $response = stream_get_contents($fp);
    } catch (Exception $e) {
        echo 'Exception: ' . $e->getMessage ();
    }

    return $response;
}

$json_data = array(
    'first_name' => 'John',
    'last_name'  => 'Doe'
);

$content = urlencode(json_encode($json_data));

doPostRequest($url, $content);
我没有收到任何错误,但当我尝试解码数据时,
$input\u stream
为空。为什么?我错过了什么

$input_stream = file_get_contents('php://input');
$json = urldecode($input_stream);
var_dump($input_stream);

编辑:我应该提到,该代码在安装了XAMPP的机器上工作,但在另一台机器上不工作。服务器配置可能与此有关吗?

我认为原因在于您编码数据和设置内容类型的方式

如果您希望发送内容类型为:application/json的数据,请不要对数据进行URL编码


有关application/json和application/x-www-form-urlencoded之间的差异,请参阅。

问题在于
$content
来自
doPostRequest($url,$content)
不是UTF-8编码的,并且有一些奇怪的字符,因此
json_decode
正在中断

根据man的说法:

此函数仅适用于UTF-8编码字符串


即使没有
urlencode
我也会得到相同的结果:
$input\u stream
为空。@Alex没有执行var\u dump($input\u stream);尝试执行echo$input\u流@Alex我尝试完全复制您的数据,只是我必须指定url,并且我从var_dump($input_stream)更改了它;要将其记录到文件中,请执行以下操作:error_log('inputstream---'.$input_stream.---\n',3'/usr/local/lib/php/logs/php_error.log');我得到了inputstream---%7B%22第一个名字%22%3A%22John%22%2C%22last名字%22%3A%22Doe%22%7D----作为我的输出。我刚刚意识到这段代码在安装了XAMPP的另一台机器上也能正常工作,所以我想:可能是配置问题吗?