Intereting Posts
Magento – базовый стол или вид не найдены Не удалось получить доступ к phpMyAdmin после того, как пароль установлен в базу данных PHP foreach loop для создания массива Swift Mailer – не удается отправить почту и не удается найти журналы ошибок Могу ли я использовать PDO :: FETCH_GROUP для группировки результатов по двум значениям Невозможно вставить SQL в одну конкретную таблицу Выйти из неактивного пользователя с помощью PHP Как проверить несколько слов в строке? (возвращает true, есть хотя бы одно из этих слов) Функция Smarty Object с ассоциативным массивом Неожиданный «=>», ожидаемый один из: «», «», «)», PHP вызывает статическое обходное решение для PHP 5.2 Запуск функции путем ввода URL-адреса Как вы можете определить, ограничена ли коллекция? Как проксировать другую страницу в PHP Как получить xml-запросы и отправить ответ xml в php? Уведомление в реальном времени от веб-сервера к клиенту

Заголовок агента пользователя – аббревиатура для хранения mysql

Согласно этой теме, и специально этот пост: https://stackoverflow.com/a/6595973/1125465 , Microsoft, как всегда показывает. Размер пользовательского агента может быть действительно, действительно огромным.

Я работаю над небольшой библиотекой посетителей в php, и я хочу хранить информацию агента пользователя. Я не могу определить тип и длину данных.

Поэтому мой вопрос: есть ли у вас какие-либо идеи, как сократить пользовательский агент, до какого-то «нормального» размера? (например, 256 символов) .


Примечание. Разработчики используют пользовательские агенты для обнаружения браузера пользователя и операционных систем. Итак, согласно связанному примеру, все глупые числа из M $ просто … Просто. Как всегда, на нервы. Поэтому идея состоит в том, чтобы сделать функцию, которая сокращает строку пользовательского агента, но не теряет важную информацию.

Я считаю, что такая функция должна:

  • Не зависит от будущих обновлений и новых браузеров (без жестко заданных строк)
  • Имейте простой механизм, который решает, что удалить (например, если есть число, запятая, число, запятая, число, запятая, номер, …, это может удалить ее, это не интересно).
  • И в конце, если все операции по-прежнему приводят к слишком длинному пользовательскому агенту (скажем, 256 символов), больше нечего делать, поэтому просто отключите остальные. Это один миллион, поэтому данные могут быть потеряны.

Дополнительное примечание: я знаю, что я могу сделать функцию, которая получает браузер, и тип ОС от пользовательского агента, и сохранять только эти значения. Но, как всегда, такие функции имеют жестко заданные имена, и если браузер не распознается, он возвращает, например, «Unrecognized browser». Поэтому в будущем все должны помнить об обновлении этих функций. И если мы сохраним сокращенный пользовательский агент, информация isn 't потерян (поскольку только скрипт, который читает базу данных, должен иметь новую систему распознавания). Но записи в базе данных являются надежными и последовательными, как и должно быть.


ОБНОВЛЕНИЕ: поскольку должен быть какой-то код, и есть проблема с идеей, а не проблема с существующим кодом, я напишу минимальный код, который я написал до сих пор;):

<?php function shorten($useragent, $maxsize = 256) { $shorten = $useragent; ... // ? $shorten = substr($shorten, 0, $maxsize); // the "last hope" cut return $shorten; } echo shorten($_SERVER['HTTP_USER_AGENT']); ?> 

Для строк User-Agent нет правил, поэтому нет возможности создать абсолютно правильный и перспективный парсер. Однако существует общая картина:

 User-Agent: <engine-string> <engine-string> ... 

Где engine-string имеет форму:

 <agent-name> (<comment>; <comment>; ...) 

Каждая строка двигателя (я просто назвал ее, что, по моему мнению, это может быть неверно) может иметь или не иметь комментариев.

Например:

 Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) ↲ AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e ↲ Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) 

(Это единственная строка, я просто разбил ее на строки.) Кажется, всякий раз, когда кто-то делает вилку браузера, они просто добавляют свою вещь до конца. Итак, у нас есть абстрактный абстрактный браузер «Mozilla» (наследие «Первой Браузерной войны»), которая думает, что это на iPhone. Затем мы видим, что есть WebKit (который помнит, что он родился как KHTML некоторое время назад). Затем есть модификация версии / 6.0, которая затем была изменена в Mobile / 10A5376e, которая стала Safari / 8536.25, что, в конце концов, раскрывает секрет, что это фактически мобильный бот Google.

Другой пример:

 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; ↲ InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; ↲ .NET CLR 3.5.30729; .NET CLR 1.1.4322) 

Это единственный движок, но в скобках можно многое сказать.

Таким образом, общее наблюдение:

  • последние двигательные строки являются наиболее важными,
  • последние комментарии в родителях менее важны.

Имея это в виду, моя идея состояла бы в том, чтобы разобрать строку в этот движок и прочесть токены, а затем из каждой секции двигателя выбросить комментарии, начиная, скажем, с пятого. Затем, если этого еще недостаточно, отбросьте секции двигателей, начиная со второго (первый часто является абстрактным «Mozilla», но часто имеет полезные комментарии, а иногда и на самом деле это что-то конкретное, особенно для веб-сканеров).

При разборе мы должны учитывать, что иногда могут быть строки, не соответствующие этому формату. Они могут быть сохранены в файл журнала для последующей проверки, а затем просто вырезаны до необходимой длины, чтобы они соответствовали базе данных.