我正在尝试将来自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}”.";
}
?>
答案 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
请求。