124 lines
5.0 KiB
PHP
124 lines
5.0 KiB
PHP
<?php
|
|
// +----------------------------------------------------------------------+
|
|
// | PHP version 4.2 |
|
|
// +----------------------------------------------------------------------+
|
|
// | Copyright (c) 1997-2003 The PHP Group |
|
|
// +----------------------------------------------------------------------+
|
|
// | This source file is subject to version 2.0 of the PHP license, |
|
|
// | that is bundled with this package in the file LICENSE, and is |
|
|
// | available at through the world-wide-web at |
|
|
// | http://www.php.net/license/2_02.txt. |
|
|
// | If you did not receive a copy of the PHP license and are unable to |
|
|
// | obtain it through the world-wide-web, please send a note to |
|
|
// | license@php.net so we can mail you a copy immediately. |
|
|
// +----------------------------------------------------------------------+
|
|
// | Authors: Lucas Nealan <lucas@facebook.com> |
|
|
// +----------------------------------------------------------------------+
|
|
|
|
// $Id: APC.php,v 1.1 2007/09/19 21:35:22 jrust Exp $
|
|
|
|
require_once 'Net_UserAgent/detect.php';
|
|
|
|
class Net_UserAgent_Detect_APC extends Net_UserAgent_Detect
|
|
{
|
|
var $key = '';
|
|
|
|
function Net_UserAgent_Detect_APC($in_userAgent = null, $in_detect = null, $ua_cache_window = 600)
|
|
{
|
|
$data = '';
|
|
$restored = false;
|
|
$ua_cache_timeout = apc_fetch('useragent:cache_timeout'); // don't cache after time period
|
|
|
|
if(!class_exists('G')){
|
|
$realdocuroot = str_replace( '\\', '/', $_SERVER['DOCUMENT_ROOT'] );
|
|
$docuroot = explode( '/', $realdocuroot );
|
|
array_pop( $docuroot );
|
|
$pathhome = implode( '/', $docuroot ) . '/';
|
|
array_pop( $docuroot );
|
|
$pathTrunk = implode( '/', $docuroot ) . '/';
|
|
require_once($pathTrunk.'gulliver/system/class.g.php');
|
|
}
|
|
if ($ua_cache_window > 0) {
|
|
if (!$ua_cache_timeout) {
|
|
// check apc uptime and disable after x mins
|
|
$apc_data = apc_cache_info('file', true);
|
|
|
|
if (isset($apc_data['start_time'])) {
|
|
$uptime = $apc_data['start_time'];
|
|
|
|
if (time() - $uptime > $ua_cache_window) { // timeout and disable after 10 minutes of uptime
|
|
apc_store('useragent:cache_timeout', true);
|
|
$ua_cache_timeout = true; // don't cache this one either
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$this->key) {
|
|
$key_flags = '';
|
|
if ($in_detect !== null) {
|
|
$key_flags = implode('-', $in_detect);
|
|
}
|
|
$this->key = 'useragent:'.G::encryptOld($in_userAgent.$key_flags);
|
|
}
|
|
|
|
if ($data = apc_fetch($this->key)) {
|
|
$success = null;
|
|
$data = unserialize($data);
|
|
if ($data) {
|
|
$restored = $this->cache_restore($data);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$data) {
|
|
$this->detect($in_userAgent, $in_detect);
|
|
|
|
if ($ua_cache_window > 0 && !$ua_cache_timeout) {
|
|
$this->cache_save();
|
|
}
|
|
}
|
|
}
|
|
|
|
function &singleton($in_userAgent = null, $in_detect = null)
|
|
{
|
|
static $instance;
|
|
|
|
if (!isset($instance)) {
|
|
$instance = new Net_UserAgent_Detect_APC($in_userAgent, $in_detect);
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
|
|
function cache_restore($cache)
|
|
{
|
|
if (is_array($cache)) {
|
|
foreach($cache as $prop => $value) {
|
|
$ptr = Net_UserAgent_Detect::_getStaticProperty($prop);
|
|
$ptr = $value;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function cache_save()
|
|
{
|
|
if ($this->key) {
|
|
$data = array('browser' => Net_UserAgent_Detect::_getStaticProperty('browser'),
|
|
'features' => Net_UserAgent_Detect::_getStaticProperty('features'),
|
|
'leadingIdentifier' => Net_UserAgent_Detect::_getStaticProperty('leadingIdentifier'),
|
|
'majorVersion' => Net_UserAgent_Detect::_getStaticProperty('majorVersion'),
|
|
'options' => Net_UserAgent_Detect::_getStaticProperty('options'),
|
|
'os' => Net_UserAgent_Detect::_getStaticProperty('os'),
|
|
'quirks' => Net_UserAgent_Detect::_getStaticProperty('quirks'),
|
|
'subVersion' => Net_UserAgent_Detect::_getStaticProperty('subVersion'),
|
|
'userAgent' => Net_UserAgent_Detect::_getStaticProperty('userAgent'),
|
|
'version' => Net_UserAgent_Detect::_getStaticProperty('version'),
|
|
);
|
|
apc_store($this->key, serialize($data));
|
|
}
|
|
}
|
|
}
|
|
?>
|