使用PHP有条件地在头中记录值
我对PHP很陌生,所以请容忍我 我正在尝试登录访问我网站的手机的用户代理。我通过检查$\u SERVER['HTTP\u USER\u AGENT']值来实现这一点 遇到一个小问题,我注意到此人是否通过opera mini访问我的站点,然后opera mini将实际用户代理移动到一个标题值中,该标题值标识为X-OperaMini-Phone-UA: 因此,我正在寻找PHP代码,该代码将从头文件(如果存在)中提取该文件,如果没有,则将其标识为NA以用于数据库日志记录 这是我目前用于记录日志的代码,它是由其他人编写的使用PHP有条件地在头中记录值,php,mobile,opera-mini,Php,Mobile,Opera Mini,我对PHP很陌生,所以请容忍我 我正在尝试登录访问我网站的手机的用户代理。我通过检查$\u SERVER['HTTP\u USER\u 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')");
?>
您可以通过以下方式获取值:
另一种方法是使用.htaccess中的rewriterule将标头添加到环境变量中,然后像往常一样通过$\u服务器
获取它:
RewriteRule .* - [E=X-OPERAMINI-PHONE-UA:%{HTTP:X-OperaMini-Phone-UA}]
您还可以使用$\u服务器['HTTP\u X\u OPERAMINI\u PHONE\u UA']
:
if(!empty($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'])){
// use $_SERVER['HTTP_X_OPERAMINI_PHONE_UA']
}else{
// use default $_SERVER['HTTP_USER_AGENT']
}
2012年10月,Opera建议了名为设备库存UA
的新标题。此后,新的Opera Mini/Mobile浏览器将使用新的设备库存UA
和旧的X-OperaMini-Phone-UA
标题。
此参数的定义如下:
此标头的值与捆绑的stock user agent的值匹配
运行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'];
}
我将使用函数aliasgetallheaders()
。在NSAPI下也可以使用此方法,如果您运行的是PHP>=5.4.0
,则在FastCGI下也可以使用此方法,但您可能没有。谢谢,我会尝试一下,但这只回答了一部分,我如何有条件地记录它?@Michael:我用一个更详细的示例更新了答案。为了更进一步,您必须显示当前如何进行日志记录。问题是我仍然希望保留一个事实,即Opera迷你浏览器访问了该页面,这就是我添加附加字段的原因。或者,如果值是通过X-opera头记录的,但不知道如何做,我可以预先挂起一些文本。我想说的是,我需要原始的用户代理,但我还需要知道它是不是从Opera获得的Michael:然后您必须向记录
表中添加一个字段,并向插入
查询中添加(可能是空的)Opera迷你头,或者连接字符串。连接是用php中的
完成的。您能显示日志代码的相关部分吗?您在哪里获取$\u服务器['HTTP\u用户\u代理]
,以及如何存储它?
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'];
}