'Not a TapPony scan']); exit; } $cols = ['timestamp', 'uid', 'chip', 'tag_type', 'payload', 'device', 'seq']; $row = []; foreach ($cols as $c) { $v = (string)($scan[$c] ?? ''); // Keep spreadsheet apps from running a tag's content as a formula. if ($v !== '' && strpbrk($v[0], "=+-@\t\r") !== false) { $v = "'" . $v; } $row[] = $v; } $fh = fopen($csv, 'a'); if ($fh === false) { http_response_code(500); echo json_encode(['message' => 'Could not open the CSV file']); exit; } flock($fh, LOCK_EX); clearstatcache(true, $csv); if (filesize($csv) === 0) { fputcsv($fh, $cols); } fputcsv($fh, $row); flock($fh, LOCK_UN); fclose($fh); echo json_encode(['message' => 'Logged ' . $scan['uid']]);