Автор Тема: как бы организовать?  (Прочитано 6618 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
как бы организовать?
« : 15 Августа 2005, 15:01:21 »
есть основной файл index.cgi
в нем сказано напечатать стандартную шапку и:
if ($req eq "smi") { require "./smi.cgi"; }
делее все ложится на плечи этого самого smi.cgi. но в нем так же есть:
elsif($smi eq \'otdmark\') { &otdmark; }
elsif($smi eq \'menmen\') { &menmen; }
else { &start; }
и т.д.
все работает, вопрос в следующем.
все эти СМИ меняются часто, кое кто удаляется/добавляется, это все запоминается поисковиками и при следующем индексировании по убитому пути, к примеру index.cgi?req=smi&smi=nosmi
выводится страничка и поисковик думает что все ок, адрес существует и работает дальше. но посколько страниц таких стало много, то трафика за месяц сжираеца тоже прилично.
естественно если в smi.cgi изменить на
else { print qq[Location: $script\\n\\n]; }
то никуда он не пойдет, т.к. уже с index.cgi выведена шапка.
есть ли какой нибудь простой выход?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
как бы организовать?
« Ответ #1 : 17 Августа 2005, 10:32:57 »
ну раз никто не знает, буду делать как придумал я.
в основной скрипт внесем проверку существующих СМИ.

if ($smi eq "" or $smi eq ("otdmark"||"menmen"||"made"||"zrekl"||"markua"||"prmeneger"||"btl"||"marrek"||"novmark"||"marisua"||"marketolog"))
{ &htmlup; require "./smi.cgi"; }
else { print qq[Location: $script\\n\\n]; }

и даже по этому коду есть вопросы:
1. на локалке работает нормально, на сервере не хочет :(
2. вписать в одну строчку почему то не получается

if ($smi eq (""||"otdmark"||"menmen"||"made"||"zrekl"||"markua"||"prmeneger"||"btl"||"marrek"||"novmark"||"marisua"||"marketolog"))
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
как бы организовать?
« Ответ #2 : 17 Августа 2005, 13:08:29 »
Я бы вбил все СМИ в массив и написал бы функцию проверки наличия заданной СМИ в этом массиве.

$smi eq ("otdmark"||"menmen"||"made"||"zrekl"||"markua"||"prmeneger"||"btl"||"marrek"||"novmark"||"marisua"||"marketolog") - это ужасно =)
There Is More Than One Way To Do It (c)

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
как бы организовать?
« Ответ #3 : 17 Августа 2005, 13:44:07 »
Лучше хеш использовать.
The documentations is your friend

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
как бы организовать?
« Ответ #4 : 21 Августа 2005, 20:25:21 »
2NetFly
чем ужасно?

NeoNox
чем лучше?

ALL
но где же у меня ошибка? почему не работает? запутался в 1-й строчке ...
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
как бы организовать?
« Ответ #5 : 21 Августа 2005, 22:32:08 »
Yaroslav правильнее, оптимальнее для проверки и красивее.

Цитировать
Yaroslav:
но где же у меня ошибка? почему не работает? запутался в 1-й строчке ...

В корне неправильно использован оператор сравнения.
The documentations is your friend

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
как бы организовать?
« Ответ #6 : 22 Августа 2005, 11:54:53 »
Цитировать
NeoNox:
правильнее, оптимальнее для проверки и красивее.

почему то я считал что чем меньше простых действий - тем и правильней и оптимальней. зачем создавать хеш или масив и хранить его в памяти если можно сделать проще? ну тут вам наверное виднее, хотите не обьясняйте :) но вот еще вопрос по поводу хеша, к чему его то можно прикрутить? к ключу или значению а дальне? а смысл? очень прошу обьяснить вашу логику.
Цитировать
NeoNox:
В корне неправильно использован оператор сравнения.

ну и для общего просвящения...
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Ivan Kolesnikov

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как бы организовать?
« Ответ #7 : 22 Августа 2005, 12:29:11 »
Твое выражение

("otdmark"||"menmen"||"made"||"zrekl"||"markua"||"prmeneger"||"btl"||"marrek"||"novmark"||"marisua"||"marketolog")

Полностью эквивалентно "otdmark", а если написать:

(""||"otdmark"||"menmen"||"made"||"zrekl"||"markua"||"prmeneger"||"btl"||"marrek"||"novmark"||"marisua"||"marketolog")

То как не странно получим тотже результат "otdmark".
Оператор || работает следующим образом: если левое выражение true (не пустая строка, и не нуль), то правое не вычисляется. В качестве результата будет последнее вычисленное выражение, то есть в первом случае "otdmark" - true, результат otdmark, во втором "" - false, "otdmark" - true => "otdmark".

Необходимо было написать:

$smi eq "" or $smi eq "otdmark" or $smi eq "menmen" ...

Намного элегантнее будет решение с хешем, создаем скажем вот такой хеш:

%hash = (
"" => 1,
otdmark => 1,
menmen => 1,
...
);

А проверка тогда будет очень простой:

if ($hash{$smi})
{ &htmlup; require "./smi.cgi"; }
else { print qq[Location: $script\\n\\n]; }

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
как бы организовать?
« Ответ #8 : 22 Августа 2005, 14:23:18 »
Ivan Kolesnikov
огромное спасибо за разьяснения о ||
хотя почему его обозвали как или что единтично как or

и немного поковырявши проверку еще и масивом, понял, что использования хеша действительно лучше :)
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Ivan Kolesnikov

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как бы организовать?
« Ответ #9 : 22 Августа 2005, 14:36:25 »
На самом деле || и так идентично or, за одним исключением: у or очень низкий приоритет.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
как бы организовать?
« Ответ #10 : 22 Августа 2005, 14:47:23 »
Цитировать
Yaroslav:
и немного поковырявши проверку еще и масивом, понял, что использования хеша действительно лучше

Ну вот видишь, сам теперь разобрался. Это всяко лучше чем получать готовое решение.
The documentations is your friend

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28