Использование PHP для записи значения в заголовок условно
Я довольно новичок в PHP, поэтому, пожалуйста, потерпите меня.
Я пытаюсь зарегистрировать Агенты пользователей для мобильных телефонов, обращающихся к моему сайту. Я делаю это, проверяя значение $_SERVER['HTTP_USER_AGENT'].
Натолкнулся на небольшую проблему, когда я заметил, что если человек заходил на мой сайт через Opera Mini, то Opera Mini переводит фактического агента пользователя в значение заголовка, обозначенное как X-OperaMini-Phone-UA:
Поэтому я ищу код PHP, который извлечет его из заголовка (если он есть) и, если нет, определит его как NA для целей ведения журнала базы данных.
Это код, который я сейчас использую для регистрации, который был написан кем-то другим
<?php
mysql_connect('server.com', 'dbuser', 'dbpass');
$url = mysql_real_escape_string("http://$_SERVER[SERVER_NAME]$_SERVER[REQUEST_URI]");
$fn = mysql_real_escape_string($_SERVER['SCRIPT_NAME']);
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$ref = mysql_real_escape_string($_SERVER['HTTP_REFERER']);
$ua = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
mysql_select_db('db');
mysql_query("INSERT INTO `record` VALUES ('$url', '$fn', NOW(),'$ip', '$ref','$ua')");
?>
Итак, теперь я добавляю несколько полей с именем opera_user_agent и хочу войти в пользовательский агент Opera, если он есть, и использовать "NA", если его нет.
3 ответа
Вы можете получить значение с помощью getallheaders:
$headers = getallheaders();
if (array_key_exists("X-OperaMini-Phone-UA", $headers))
{
$ua = mysql_real_escape_string($headers["X-OperaMini-Phone-UA"]);
}
else
{
$ua = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
}
Другой подход заключается в добавлении заголовка в переменную окружения с перезаписью в.htaccess, а затем забрать его с помощью $_SERVER
по-прежнему:
RewriteRule .* - [E=X-OPERAMINI-PHONE-UA:%{HTTP:X-OperaMini-Phone-UA}]
Ты можешь использовать $_SERVER['HTTP_X_OPERAMINI_PHONE_UA']
также:
if(!empty($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'])){
// use $_SERVER['HTTP_X_OPERAMINI_PHONE_UA']
}else{
// use default $_SERVER['HTTP_USER_AGENT']
}
В октябре 2012 года Opera предложила новый заголовок под названием Device-Stock-UA
, После этого новые браузеры Opera Mini/Mobile будут использовать новые Device-Stock-UA
и старый X-OperaMini-Phone-UA
заголовки. https://dev.opera.com/blog/introducing-device-stock-ua/
Этот параметр определяется так:
Значение этого заголовка совпадает со значением стандартного пользовательского агента, связанного с операционной системой, в которой работает Opera Mobile или Mini.
Что касается этого обновления, я создал эту функцию:
public static function getUserAgentDevice() {
if (isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'])) {
return $_SERVER['HTTP_X_OPERAMINI_PHONE_UA'];
}
if (isset($_SERVER['HTTP_DEVICE_STOCK_UA'])) {
return $_SERVER['HTTP_DEVICE_STOCK_UA'];
}
return $_SERVER['HTTP_USER_AGENT'];
}