因此,我试图弄清楚为什么在尝试向其写入数组后,在.json文件中得到NULL值的原因。创建新文件后,仅在“ array_push”行中发生这种情况。如果已经存在一个带有值的.json文件,则它将正确写入该文件。我唯一能猜到的是文件在创建时缺少其中的'{'和'}'。
到目前为止,我的工作量很小,但不确定这是正确的方法。有人可以告诉我这是好是坏吗?
请澄清一下,.json文档仅包含NULL保管库,文件中除了单词NULL外没有任何数组元素或其他任何内容。
//CHECK IF FILE EXISTS, ELSE CREATE IT
$log_filename = "./site_files/logs/error-404-log.json";
if(!file_exists($log_filename)) {
touch($log_filename);
//LINE BELOW IS MY WORK AROUND, I'M NOT SURE IF THIS IS THE RIGHT WAY
file_put_contents($log_filename, json_encode(json_decode("{}")));
echo "$log_filename was created. <br />";
}
$log_array = array();
$new_data = array(
'current_date_stamp' => $current_date_stamp,
'current_page_trail' => $current_page_trail
);
$json_data = file_get_contents($log_filename);
if($log_array != "") { $log_array = json_decode($json_data, true); }
//WHEN CREATING A NEW FILE, ARRAY_PUSH GIVES ERROR
array_push($log_array, $new_data);
$json_data = json_encode($log_array, JSON_PRETTY_PRINT);
file_put_contents($log_filename, $json_data);
答案 0 :(得分:1)
$log_filename = "error-404-log.json"; // establish the path/to/filename.json
if (file_exists($log_filename)) { // if path/to/filename.json exists
$json = file_get_contents($log_filename); // access PRETTY json string
echo "pre-existing data: <div><pre>$json</pre></div><br>"; // display json string
$array = json_decode($json, true); // decode to prepare for new data
}
// data always maintains the same structure: an array of 2-element arrays
$array[] = [
'current_date_stamp' => date('Y-m-d H:i:s'),
'current_page_trail' => "foo"
];
// create/update the file
$new_json = json_encode($array, JSON_PRETTY_PRINT); // re-encode updated array data
echo "new data: <div><pre>$new_json</pre></div>"; // display new json string
file_put_contents($log_filename, $new_json); // create or overwrite file
答案 1 :(得分:0)
您的代码失败,因为您正在将$log_array
与一个空字符串进行比较,该条件将始终通过,因为此数组永远不会是一个空字符串。在if语句中,您解码文件的内容,当文件中没有内容时,这将是一个空字符串,并将返回NULL
,此后,您将此NULL
值写入文件。如果您检查$json_data
是否为空字符串,则您的代码应能正常工作,我也建议您这样做:
$log_array = array();
$new_data = array(
'current_date_stamp' => $current_date_stamp,
'current_page_trail' => $current_page_trail
);
$json_data = file_get_contents($log_filename);
if($json_data != "") {
$log_array = json_decode($json_data, true);
//WHEN CREATING A NEW FILE, ARRAY_PUSH GIVES ERROR
array_push($log_array, $new_data);
$json_data = json_encode($log_array, JSON_PRETTY_PRINT);
file_put_contents($log_filename, $json_data);
}
这更好,因为如果字符串为空,则其他所有操作都不相关。