Какой способ получения IP лучше?
Ну хз, на мой взгляд это не равноценные примеры: субьективно читать первый не проще, я бы отдал предпочтение функции get_ip(), с другой стороны второй пример не делает того же, что делает первый (например валидацию не проводит)./**
 * Return client ip if find, or null
 * @return string|null
 */
function getUserIp()
{
    static $ip;

    if ( !is_null($ip) )
    {
        return $ip;
    }

    $candidates = [
        @$_SERVER['HTTP_CLIENT_IP'],
        @$_SERVER['HTTP_X_FORWARDED_FOR'],
        @$_SERVER['REMOTE_ADDR']
    ];

    foreach ($candidates as $candidate)
    {
        if ( \filter_var($candidate, \FILTER_VALIDATE_IP) )
        {
            $ip = $candidate;
            break;
        }
    }

    return $ip;
}

var_dump(getUserIp());
IP в $_SERVER['REMOTE_ADDR'];
Собака (подавление ошибок) на тот случай, если какой то из заголовок не был передан (тогда произойдет обращение к несуществующему ключу массива), а фильтрация, потому что там может быть не IP. можно ли использовать строку с IP в качестве имени txt.файла?
Кто вас остановит? Но если фактически сам файл не нужен, лучше использовать БД.