2011-08-10 26 views
2

我对PHP很新,所以请耐心等待。使用PHP来有条件地记录标题中的值

我正在尝试登录访问我的网站的手机用户代理。我正在通过检查$ _SERVER ['HTTP_USER_AGENT']值来完成此操作。

跑进一个小问题,我注意到,如果该人已被通过Opera Mini的访问我的网站,那么Opera Mini的移动实际用户代理到确定为X-OperaMini的-电话-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”。

+0

你能证明你的日志代码相关的部分?你在哪里拿起'$ _SERVER ['HTTP_USER_AGENT']',你如何存储它? –

回答

4

可以与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}] 
+2

我会使用函数别名'getallheaders()'。在NSAPI下也可以使用这种方法,如果你正在运行'PHP> = 5.4.0',在FastCGI下,你可能不会。 – gnud

+0

@gnud:好点,我会更新我的答案。 –

+0

谢谢我会尝试,但只回答一部分,我如何有条件地登录它? –

2

您可以使用$_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'] 
} 
1

2012年10月,Opera推出了一个名为Device-Stock-UA的新标题。此后,新的Opera Mini/Mobile浏览器将使用新的Device-Stock-UA和旧的X-OperaMini-Phone-UA标题。 https://dev.opera.com/blog/introducing-device-stock-ua/

该参数的定义如下:

标题的值相匹配,股票用户代理的捆绑 与其上Opera移动或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']; 
} 
相关问题