Реклама на сайте Advertise with us

Подскажите штуку на php плиз

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 11.12.11
Сообщения: 351
Рейтинг: 737

Ссылка на сообщениеДобавлено: 22/12/13 в 04:56       Ответить с цитатойцитата 

Привет!

Подскажите плиз на php решение, есть список рефереров (domain1.com, domain2.com, domain3.com), если реферер из этого списка (в реферере есть этот домен с www или без) то выводим <div class="hello">Hello</div>, если реферер не из этого списка или пустой вообще, то не выводим ничего.

Благодарю заранее!

2
 



С нами с 03.02.11
Сообщения: 842
Рейтинг: 301

Ссылка на сообщениеДобавлено: 22/12/13 в 06:52       Ответить с цитатойцитата 

Код:

if(isset($_SERVER['HTTP_REFERER'])) {
   $list = array('domain1.com', 'domain2.com', 'domain3.com', 'localhost');
   $ref = preg_replace('~(?:http://)?(?:www\.)?([^/]+).*~', '$1', $_SERVER['HTTP_REFERER']);

   if(in_array($ref, $list))
      echo 'тут твой див';
}
сорри, если не очень лаконично... сильно пьян... как всегда...

5
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 22/12/13 в 11:16       Ответить с цитатойцитата 

Код:
function awd() {
   $domains = array(
      'domain1.com',
      'domain2.com',
      'domain3.com'
   );
   if (isset($_SERVER['HTTP_REFERER'])) {
         $ref = preg_replace('~(?:http://)?(?:www\.)?([^/]+).*~', '$1', $_SERVER['HTTP_REFERER']);
          return in_array($ref, $domains);
   }
}

function yacc() {
   $domains = array(
      'domain1.com' => true,
      'domain2.com' => true,
      'domain3.com' => true
   );
   return isset($_SERVER['HTTP_REFERER']) and ($ref = parse_url($_SERVER['HTTP_REFERER'])) and isset($domains[str_replace('www.', '', $ref['host'])]);
}


Тест


Печаль. icon_smile.gif

Последний раз редактировалось: Yacc (22/12/13 в 14:32), всего редактировалось 1 раз

10
 



С нами с 03.02.11
Сообщения: 842
Рейтинг: 301

Ссылка на сообщениеДобавлено: 22/12/13 в 11:59       Ответить с цитатойцитата 

ого, это in_array такой медленный? не ожидал. хотя хуле, если нет совпадений то просматривается весь список... посыпаю голову водкой smail101.gif да и parse_url раза в полтора шустрее работает, чем регулярка. то вчера по синьке захотелось регулярками повыёбываться (да и то криво) smail101.gif но вот домены сделать ключами - отличное решение, браво! пьянству - бой. icon_surprised.gif а я говорил тогда математичке, "трезвым меня на олимпиаду слать нужно было"... а так только второе место smail101.gif
Yacc: кросавчег! сразу видно, с клавиатурой родился icon_biggrin.gif а я 8 лет на фортепиано учился, и пост писал после 0.7, почувствуйте разницу icon_mrgreen.gif
ЗЫ: о сломанном мозге:
нужна функция, которая принимает 1 - возвращает 2. и наоборот: принимает 2, возвращает 1...
мы простых путей не ищем - return 3-$x; не катит. вот как надо: return $x%2+1; ....

6
 



С нами с 07.04.07
Сообщения: 161
Рейтинг: 203

Ссылка на сообщениеДобавлено: 22/12/13 в 12:24       Ответить с цитатойцитата 

AWD: не парься, вы оба молодцы icon_smile.gif 99% что топикстартеру в принципе такие скорости не нужны icon_smile.gif

Elite Profit - Тиночки, чулки, гламур, нюд арт (обновления)

4
 



С нами с 03.02.11
Сообщения: 842
Рейтинг: 301

Ссылка на сообщениеДобавлено: 22/12/13 в 12:33       Ответить с цитатойцитата 

Elite Profit: да я сильно и не парюсь, но будучи немножко перфекционистом, отдаю предпочтение и уважение решению Yacc:. я знаю много быстрых штук, например, при проверке значений одного типа == работает в 1,5-2 раза медленнее, чем ===, ибо не происходит приведение типов,...
а в целом, как для 0,7 - еще и рабочую регулярку написать... smail101.gif

6
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 22/12/13 в 14:14       Ответить с цитатойцитата 

Yacc писал:
Тест

И как так получается, что при 100 и 100000 записях, yacc тратит одинаковое колличество времени ? smail101.gif

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

6
 



С нами с 03.02.11
Сообщения: 842
Рейтинг: 301

Ссылка на сообщениеДобавлено: 22/12/13 в 14:42       Ответить с цитатойцитата 

Stek писал:
И как так получается, что при 100 и 100000 записях, yacc тратит одинаковое колличество времени ? smail101.gif
кстати, да, 1К отработал медленнее, чем 100К smail101.gif лень проверять, но все же яцц круче авд. факт icon_cool.gif

и, наверное, у яцц сходу скрипт получает совпадение - не зависимо от стотыщмильёнов записей. ждем яцика. smail54.gif smail101.gif

Последний раз редактировалось: AWD (22/12/13 в 15:08), всего редактировалось 1 раз

5
 



С нами с 07.04.07
Сообщения: 161
Рейтинг: 203

Ссылка на сообщениеДобавлено: 22/12/13 в 15:03       Ответить с цитатойцитата 

AWD писал:
кстати, да, 1К отработал медленнее, чем 100К smail101.gif лень проверять, но все же яцц круче авд. факт icon_cool.gif


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

Elite Profit - Тиночки, чулки, гламур, нюд арт (обновления)

1
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 22/12/13 в 16:56       Ответить с цитатойцитата 

Stek писал:
И как так получается, что при 100 и 100000 записях, yacc тратит одинаковое колличество времени ?

Мне больше интересно как человек столько накодивший не знает, что поиск по ключу в хэш-таблице имеет сложность О(1)? icon_smile.gif



Elite Profit писал:
графики, видимо, не так немного отрисованы, тоже факт

Все так, поверь. icon_smile.gif

Поиск посредством in_array имеет сложность О(n), где n индекс искомого элемента. Т.е. если этот элемент последний, то мы получим картинку из предыдущего поста. А если первый, то вот такую:



Что тоже как бы намекает. icon_smile.gif

5
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 22/12/13 в 17:03       Ответить с цитатойцитата 

Yacc: Респект. Радует, что остались еще люди, понимающие, что такое алгоритмы и структуры данных, и использующие их по назначению.

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 22/12/13 в 17:21       Ответить с цитатойцитата 

Оффтопик: а на чем можно проверять скрипты?
вот чтоб так сравнивалось с гравиками?

1
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 22/12/13 в 17:46       Ответить с цитатойцитата 

Lexikon писал:
Оффтопик: а на чем можно проверять скрипты?
вот чтоб так сравнивалось с гравиками?



Оффтопик: JS отлично проверять тут, сразу под браузеры, тоже очень полезно при написании приложений http://jsperf.com/browse trollface.png

1
 



С нами с 11.12.11
Сообщения: 351
Рейтинг: 737

Ссылка на сообщениеДобавлено: 22/12/13 в 19:53       Ответить с цитатойцитата 

Ого, ребята, ничего себе, спасибо что откликнулись! smail54.gif

Только вопрос, как код что дал AWD, привести к виду с учетом замечаний Yacc? Ведь он, как вы говорите, быстрее.

Код:

if(isset($_SERVER['HTTP_REFERER'])) {
    $list = array('domain1.com', 'domain2.com', 'domain3.com', 'localhost');
    $ref = preg_replace('~(?:http://)?(?:www\.)?([^/]+).*~', '$1', $_SERVER['HTTP_REFERER']);

    if(in_array($ref, $list))
       echo 'тут твой див';
}

2
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 22/12/13 в 20:06       Ответить с цитатойцитата 

Код:
$domains = array(
    'domain1.com' => true,
    'domain2.com' => true,
    'domain3.com' => true
);
if (isset($_SERVER['HTTP_REFERER']) and ($ref = parse_url($_SERVER['HTTP_REFERER'])) and isset($domains[str_replace('www.', '', $ref['host'])])) {
    ?><div class="hello">Hello</div><?php
}

5
 



С нами с 11.12.11
Сообщения: 351
Рейтинг: 737

Ссылка на сообщениеДобавлено: 22/12/13 в 20:11       Ответить с цитатойцитата 

Yacc: замечательно, только как это всё будет выглядеть итого? с выводом моего дива? icon_rolleyes.gif

1
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 22/12/13 в 20:15       Ответить с цитатойцитата 

Код:
$domains = array(
    'domain1.com' => true,
    'domain2.com' => true,
    'domain3.com' => true
);
if (isset($_SERVER['HTTP_REFERER']) and ($ref = parse_url($_SERVER['HTTP_REFERER'])) and isset($domains[str_replace('www.', '', $ref['host'])])) {
    ?><div class="hello">Hello</div><?php
}

icon_smile.gif

5
 



С нами с 11.12.11
Сообщения: 351
Рейтинг: 737

Ссылка на сообщениеДобавлено: 22/12/13 в 20:19       Ответить с цитатойцитата 

Yacc, ага понял, просто я это писал тогда, когда там дива ещё не было icon_smile.gif

Спасибо Всем!

2
 



С нами с 03.02.11
Сообщения: 842
Рейтинг: 301

Ссылка на сообщениеДобавлено: 23/12/13 в 08:16       Ответить с цитатойцитата 

Yacc писал:
Мне больше интересно как человек столько накодивший не знает, что поиск по ключу в хэш-таблице имеет сложность О(1)? icon_smile.gif
не помню, писал или нет.. я самоучка. 8 лет учился на фортепиано. чувствуешь разницу? и образование у меня 8 классов. еще 2 года бурсы и год вечерки. понимаешь? и я же не отрицаю, а понимаю и принимаю. да и 0,7 - это не шутка. поэтому, когда я вижу быстрый код - это не одно и тоже, что ты мне тут гнешь функции, которые я в жизни не видел. а вообще я с 18 лет в туалет ходил с книгой Си, а до 18 - с гитарой... такое... вообщем, сделай скидку... я вроде объяснил, почему не знаю О(1) - вообще не понимаю, о чем ты, понимаешь? smail101.gif

5
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 23/12/13 в 22:36       Ответить с цитатойцитата 

AWD писал:
не знаю О(1) - вообще не понимаю

Формально:

http://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D…1%82%D1%8C

Неформально, но в контексте топика:

http://stackoverflow.com/questions/2473989/list-of-big-o-for-php-functions

1
 



С нами с 03.02.11
Сообщения: 842
Рейтинг: 301

Ссылка на сообщениеДобавлено: 23/12/13 в 23:16       Ответить с цитатойцитата 

Yacc писал:
Формально:

http://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D…1%82%D1%8C

Неформально, но в контексте топика:

http://stackoverflow.com/questions/2473989/list-of-big-o-for-php-functions
ты, похоже, не читал, что я писал.... давай так: я тебя уважаю. я твое решение считаю зачетным. перстань. просто перестань.

1
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 24/12/13 в 03:38       Ответить с цитатойцитата 

устроили хренотень какую-то лол smail101.gif
представляю как бы в таком стиле обсуждалась сортировка пузырьком или не дай бог quicksort smail101.gif
count($domains) == 100000 - это называется перебдеть, мягко говоря. ну или я хотел бы посмотреть на php файл, со 100к доменами.

-2
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 24/12/13 в 07:51       Ответить с цитатойцитата 

Еще один. По сути есть что сказать? Или тоже попердеть пришел? icon_smile.gif

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 24/12/13 в 14:19       Ответить с цитатойцитата 

Yacc писал:
Мне больше интересно как человек столько накодивший не знает, что поиск по ключу в хэш-таблице имеет сложность О(1)?


Я сейчас специально сделал тестовый скрипт на 100000 запросов к функции.
yacc - 0.36 секунды
awd - 0.42 секунды.

Т.е. разницы фактически ни какой. Лень копать далее, но больше убежден, что разница из за использование preg vs parse_url. Но вот задавать массив доменов списком без ключей - куда удобнее. И к тому же preg оставляет возможность использовать маски.

Код: [развернуть]

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

2
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 24/12/13 в 15:13       Ответить с цитатойцитата 

Stek писал:
Я сейчас специально сделал тестовый скрипт

У меня складывается впечатление, что ты и AWD - собутыльники. icon_smile.gif

Правильный тест.
Код: [развернуть]

1
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »