2015-05-27 2 views
1

im, имеющий функцию перенаправления на моем собственном веб-сайте, где пользователи перенаправляются на сайты, которые включены в белый список и включены в него.Создание статического php-массива для хранения значений

в качестве примера, если URL пользователь

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

теперь Релевент скрипт делает запрос к базе данных и в БД Theres таблицу для проверки белый список доменов, а также он говорит, является ли доменное имя перенаправления включенный

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, вместо этого он продолжит выполнение массива.

поэтому кто-то может помочь мне создать staic массив (упорствовать массив по ходу нескольких запросов), соответствующий этому сценарию ...

+3

что вы имеете в виду под действием статического массива? - Вы хотите сохранить массив в течение нескольких запросов? – gries

+0

Это должен быть только один вызов SELECT в базе данных, не так ли?Если это слишком медленно, ваша база данных срочно требует некоторой оптимизации, например, некоторых индексов. На самом деле не должно быть никаких причин наклоняться назад и превращать это в какой-то статический PHP-массив, который необходимо обновлять. – deceze

+0

Я отредактировал вопрос guys –

ответ

-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 => true), чтобы разрешить будущие параметры.

Если этот список станет слишком большим, это будет боль для поддержания.

Я предлагаю вам иметь базу данных, управлять ею и автоматически создавать из нее статический файл.

+0

спасибо, плохо попробуйте это и посмотрим –

+0

Хотелось бы узнать, почему downvote – Patrick

+0

i dint положите это! кто-то еще должен иметь ... –

0

Если вам нужно упорствовать массив над несколькими запросами взглянуть на:

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/

+2

Обратите внимание, что APC больше не поддерживается и не будет работать с текущими версиями PHP. Доступен пакет под названием [APCu] (http://pecl.php.net/package/APCu), который обеспечивает совместимую реализацию только функций кэширования переменных, но memcache или Redis могут быть лучшими опциями в будущем. – IMSoP

+0

спасибо за примечание - я обновил ответ – gries

Смежные вопросы