getMessage()}\n"); exit(2); } if (!is_array($config) || !isset($config['utm']) || !is_array($config['utm'])) { fwrite(STDERR, "В config.json отсутствует объект utm.\n"); exit(2); } /** Единственное явно согласованное изменение host-config в #274. */ $focus = [ 'weights' => [ 'center' => 0, 'face' => 1, ], 'default' => 'face', ]; if (($config['utm']['focus'] ?? null) === $focus) { fwrite(STDOUT, "focus уже включён: конфиг не изменён.\n"); exit(0); } $config['utm']['focus'] = $focus; try { $encoded = json_encode( $config, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR ) . "\n"; } catch (JsonException $exception) { fwrite(STDERR, "Не удалось сериализовать config.json: {$exception->getMessage()}\n"); exit(2); } if (file_put_contents($path, $encoded, LOCK_EX) === false) { fwrite(STDERR, "Не удалось записать обновлённый config.json.\n"); exit(2); } fwrite(STDOUT, "Изменён только utm.focus: face включён по умолчанию и для rnd.\n"); exit(10);