64) { return false; } $number = '-?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+\-]?[0-9]+)?'; if (!preg_match('/\A(' . $number . ')?:(' . $number . ')?\z/', $value)) { return false; } [$minimum, $maximum] = explode(':', $value); if ($minimum === '' && $maximum === '') { return false; } foreach ([$minimum, $maximum] as $bound) { if ($bound !== '' && !is_finite((float) $bound)) { return false; } } return $minimum === '' || $maximum === '' || (float) $minimum <= (float) $maximum; } /** Blank defaults preserve RRDtool's layout; older releases omit these flags. */ function rrd_graph_axis_options(array $graph, string $version) : string { if (version_compare($version, '1.11.0', '<')) { return ''; } $options = ''; foreach (['vertical_label_angle', 'right_axis_label_angle', 'right_axis_range'] as $field) { $value = $graph[$field] ?? ''; if ($value !== '' && rrd_graph_axis_option_is_valid($field, $value)) { $options .= '--' . str_replace('_', '-', $field) . ' ' . cacti_escapeshellarg($value) . RRD_NL; } } return $options; }