创建静态php数组来存储值

时间:2015-05-27 10:04:08

标签: php database url-redirection static-array

我在自己的网站上有一个重定向功能,用户被重定向到白名单并启用了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数组(在多个请求的过程中保持数组)......

2 个答案:

答案 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)以允许将来的选项。

如果这个名单变得太大,维持就会很痛苦。

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