1

我在我自己的网站上有一个重定向功能,用户被重定向到白名单和启用 ridirect 的网站。

例如,如果用户 url 是

mydomain.ridirect.com/rdrct?site=www.goog.com

现在相关脚本进行数据库调用,并且在数据库中有一个表来检查白名单域,它还告诉域名是否启用重定向

id  domain_name  redirect
1   www.yah.com  1
2   www.go.com   0
3   www.goo.com  1
4   www.foo.com  1

现在示例用户将被重定向,因为它被列入白名单并启用了重定向。

现在的问题是,这种设计在现场运行中是一个相当昂贵的设计......大多数时候它会消耗大量时间。每次用户来时,它都会进行 db 调用。

因此,现在我在进行数据库调用之前声明数组,

$redirect = array();

如果它的域名符合其标准,则其值将被添加到上述数组中

array_push($redirect, $trusted_domain, $id, $row["redirect"]);
var_dump($redirect);

所以我的设计是,如果用户再次键入相同的域名,它不会进行 db 调用,而是会继续检查数组。

因此任何人都可以帮助我创建一个与此场景匹配的静态数组(在多个请求的过程中保持数组)...

4

2 回答 2

1

如果您需要在多个请求中保留数组,请查看:

APC http://php.net/manual/en/book.apc.php

APCU 请使用 apcu 获取较新版本的 PHP https://pecl.php.net/package/APCu,如下文评论中所述。

使用 apc 的解决方案是:通过加载重定向 url 后将其添加到缓存中。数据库使用apc_add和之后用于apc_exists检查 url 是否被允许。

或者,您可以尝试使用其他一些键值存储,例如http://redis.io/

于 2015-05-27T11:29:47.140 回答
0

我只是猜你需要这样的东西:

$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 => true)上使用了数组来允许将来的选项。

如果这个列表变得太大,维护起来会很痛苦。

我建议你有一个数据库来管理它并自动从中创建一个静态文件。

于 2015-05-27T10:13:04.630 回答