使用curl将json数据写入文件

时间:2016-12-01 06:10:40

标签: php json file curl

我正在尝试将来自url的json数据存储到一个文件中。我收到错误

“无法将JSON保存到”result.txt“。” 我写了以下代码,请帮帮我

<?php

$outfile= 'result.txt';

$url='http://192.178.1.5:8888/GetUsers';

$rCURL = curl_init();

curl_setopt($rCURL, CURLOPT_URL, $url);
curl_setopt($rCURL, CURLOPT_HEADER, 0);
curl_setopt($rCURL, CURLOPT_RETURNTRANSFER, 1);

$aData = curl_exec($rCURL);

curl_close($rCURL);

$result = json_decode ( $aData );
if($result) { 
    if(file_put_contents($outfile, $result, FILE_APPEND)) {
      echo "Saved JSON fetched from “{$url}” as “{$outfile}”.";
    }
    else {
      echo "Unable to save JSON to “{$outfile}”.";
    }
}
else {
   echo "Unable to fetch JSON from “{$url}”.";
}


?>

4 个答案:

答案 0 :(得分:0)

不使用json_decode保存数据。虽然http://php.net/manual/en/function.file-put-contents.php表示数据可以是数组,但它使我无法使用数组,而是将数据保存为字符串。

答案 1 :(得分:0)

试试这个,使用 file_get_contents 。它将写入文件以获取现有内容

$result = json_decode ( $aData );
$current = file_get_contents($outfile);
if($result) { 
    if(file_put_contents($outfile, $result)) {
      echo "Saved JSON fetched from {$url} as {$outfile}.";
    }
    else {
      echo "Unable to save JSON to {$outfile}.";
    }
}
else {
   echo "Unable to fetch JSON from {$url}.";
}

答案 2 :(得分:0)

根据您的代码,您必须检查您的文件是否可写:

if (!is_writable($outfile)) {
    throw new \RuntimeException("$outfile is not writable.");
}

您应该将此代码放在file_put_contents之前。

答案 3 :(得分:0)

我发现您的代码存在一些主要问题:

$result = json_decode ( $aData );

假设$aData包含有效的JSON对象$result将是对象

您无法将对象传递给file_put_contents,因为此函数只接受字符串(或单维数组)。

如果您尝试这样做,该函数将返回false

假设您使用curl调用检索JSON数据我没有看到将其解码为对象的重点。只需将 curl $aData中的字符串写入文件。

当然,除非您必须进行一些数据操作。

在这种情况下,会破坏数据,但最后,您必须在写入文件之前生成一个字符串。

假设您修复了上述问题,请$result为字符串。

你有:

if( file_put_contents( $outfile, $result, FILE_APPEND ) )

当函数返回写入的字节数并且假设$result可能是空字符串时,if子句应该被重写为...

if( file_put_contents( $outfile, $result, FILE_APPEND ) !== false )

...为了进入&#34; 操作成功&#34;如果你在文件中写一个空字符串,则为代码块。

最后一点,当然,文件必须是可写的。

修改

我在评论中读到curl的回复是

{ "Error": "Method not allowed" }

这是因为您没有像目标服务器所期望的那样进行curl调用。

Method not allowed表示,例如,您在服务器期望该端点GET时发出POST请求。