我在自己的网站上有一个重定向功能,用户被重定向到白名单并启用了ridirect的网站。
例如,如果用户网址是
mydomain.ridirect.com/rdrct?site=www.goog.com
现在,相关脚本进行数据库调用,并在db中有一个表来检查列入白名单的域,并且它还会告诉域名是否已启用重定向
id domain_name redirect
1 www.yah.com 1
2 www.go.com 0
3 www.goo.com 1
4 www.foo.com 1
现在,示例用户将被重定向,因为它已列入白名单并已启用重定向。
现在问题是,这种设计在实时运行中非常昂贵。大部分时间它耗费了大量时间。每次用户到来时都会进行数据库调用。
因此,现在我在数据库调用之前声明数组,
$redirect = array();
如果通过满足其标准是正确的域名,则值将被添加到上面的数组
array_push($redirect, $trusted_domain, $id, $row["redirect"]);
var_dump($redirect);
所以我的设计是,如果用户再次键入相同的域名,它将不会进行db调用,而是会让数组继续运行。
因此,任何人都可以帮助我创建一个与这个场景匹配的staic数组(在多个请求的过程中保持数组)......
答案 0 :(得分:0)
如果您需要将数组保留在多个请求上,请查看:
<强> APC 强> http://php.net/manual/en/book.apc.php
<强> APCU 强> 如下面的评论所述,请使用apcu用于较新版本的PHP https://pecl.php.net/package/APCu。
使用apc解决方案将是:
通过加载后将重定向URL添加到缓存中。数据库使用List<T>
,然后使用apc_add
检查是否允许使用网址。
或者,您可以尝试使用其他键值存储,例如http://redis.io/
答案 1 :(得分:-1)
我只是猜测你需要这样的东西:
$arr = array();
$arr['www.example.com'] = array('redirect' => true);
$arr['www.example2.com'] = array('redirect' => true);
$arr['www.example3.com'] = array('redirect' => false);
//and then on the request
if(isset($arr[$_GET['site']]) && $arr[$_GET['site']]['redirect']){
//redirect logic
}
我在url键上使用了数组(redirect =&gt; true)以允许将来的选项。
如果这个名单变得太大,维持就会很痛苦。
我建议你有一个数据库来管理它并自动创建一个静态文件。