Большой Воронежский Форум
» Веб-дизайн>Вопрос СС
acb 11:08 27.06.2003
Здравствуйте СС!

Вы однажды очень здорово мне помогли,
поэтому хотел бы задать еще один вопрос.

У меня есть cgi-скрипт, который открывает
определенную страничку в зависимости от
рефссылки, например при нажатии на баннер
со ссылкой http://site.com/cgi-bin/file.cgi?111
в страничку вставляются данные из файла
111.dat
Если переход осуществляется по несуществующей
(ошибочной) ссылке, например,
http://site.com/cgi-bin/file.cgi?1111, то "Server Error".
Так вот вопрос - какую команду можно добавить,
чтобы в таких случаях грузилась главная страница
http://site.com

Заранее благодарю за ответ. [Ответ]
mikе 13:04 27.06.2003
Вообще-то от настроек сервера зависит, будет он выдавать мессагу об ошибке.
например, если написать:
[php]if (!include('rr.htm')) {echo "qwewer";}[/php]
то в зависимости от настроек ПХП получишь либо
qwewer , либо что-то типа
Warning: Failed opening 'rr.htm' for inclusion (include_path='') in c:\www\www1\test\index.phtml on line 3
qwewer

Так что пробовай. [Ответ]
DMakeev 18:37 28.06.2003
На чем скрипт? [Ответ]
acb 07:38 30.06.2003
Скрипт на PERLе [Ответ]
DMakeev 11:31 30.06.2003
acb, если хочешь, кинь его на [email protected], посмотрю, подправлю, скину тебе исправленный - на словах достаточно муторно объяснять не зная структуры скрипта. [Ответ]
acb 12:03 30.06.2003

Сообщение от :
Первоначальное сообщение от DMakeev
acb, если хочешь, кинь его на [email protected], посмотрю, подправлю, скину тебе исправленный - на словах достаточно муторно объяснять не зная структуры скрипта.

Спасибо за ответ.
Кусок скрипта скинул на Ваш e-mail [Ответ]
CC 14:23 24.07.2003
Я правда не доконца понял, но попробую все таки посоветовать...

в корневую директорию кладешь файл
.htaccess
-----------------------------------------------------------------
ErrorDocument 404 /
-----------------------------------------------------------------

он все не валидные ссылки будет валить в корень сайта,
но мне кажется что ты делаешь что-то типа банерной сети,
и тогда у тебя в строке запроса после `?` идет ссылка, то тебе нужно проверять ее на валидность, то есть если сайт присутствует в ДНС, то он валиден...
Такую валидность можно сделать через whois. В PHP можно поэкспериментировать с сокетами.

CC добавил [date]1059046301[/date]:

Сообщение от :
Первоначальное сообщение от mike_s
Вообще-то от настроек сервера зависит, будет он выдавать мессагу об ошибке.
например, если написать:
[php]if (!include('rr.htm')) {echo "qwewer";}[/php]
то в зависимости от настроек ПХП получишь либо
qwewer , либо что-то типа
Warning: Failed opening 'rr.htm' for inclusion (include_path='') in c:\www\www1\test\index.phtml on line 3
qwewer

Так что пробовай.

делается проще

@include_once ("test.php");
но в таком случае в логи варнинги будут валится, поэтому я пользуюсь вот таким вариантом

file_exists("test.php")?include_once("test.php"):n ull;

это работает безотказно.

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

поэтому второй вариант ("он чисто конкретно для PHP4") скрещиваем с тем что было раньше в PHP3 и все про это забыли

в файле test.php
____________________________
<?
$TEST_PHP = (bool)true;

/*
other stuff :^)
*/
?>
__________________________

там где делаем включение

($TEST_PHP && file_exists("test.php"))?include_once("test.php"): null;

вот теперь все будет кошерно, можно писать модульно не мучаясь о забытых лишних включениях...
))

ЗЫЖ хот меня после отпуска прет
)))

CC добавил [date]1059046491[/date]:

Сообщение от :
Первоначальное сообщение от DMakeev
acb, если хочешь, кинь его на
[email protected], посмотрю, подправлю, скину тебе исправленный - на словах достаточно муторно объяснять не зная структуры скрипта.

это кстати одно из верных решений [Ответ]
acb 14:55 24.07.2003
СС, спасибо за ответ.

Я скидывал кусок скрипта по мылу,
но предлагаемый вариант не заработал.

Сейчас я в отпуске и могу только читать почту
и форумы. FTP нет.

Когда вернусь, то обязательно попробую предложенные варианты и свяжусь с Вами. [Ответ]
CC 15:16 24.07.2003

Сообщение от :
Первоначальное сообщение от acb
СС, спасибо за ответ.

Я скидывал кусок скрипта по мылу,
но предлагаемый вариант не заработал.

Сейчас я в отпуске и могу только читать почту
и форумы. FTP нет.

Когда вернусь, то обязательно попробую предложенные варианты и свяжусь с Вами.

да без проблем
я тогда Аську дам
[Ответ]
^igor[] 22:34 25.07.2003
читал, читал - ничего не понял и подумал: "может встрять?"

человек про Перл спрашивал а вы ему тут про PHP втираете

кароче, склифасовский, логика работы скрипта такая:

// смотрим что передали скрипту
$query=$ENV{'QUERY_STRING'};

// проверяем есть у нас файл $query.dat ?

if (файл $query.dat существует) {
//есть: читаем этот файл и выводим его содержимое
print "Content-Type: text/html\n\n";
read file все дела;
print ... ... ... ...;
} else {
// нет: делаем редирект на главную страницу
print "Location:
http://site.com\n\n";
} [Ответ]
CC 15:04 30.07.2003

Сообщение от :
Первоначальное сообщение от ^igor[]
читал, читал - ничего не понял и подумал: "может встрять?"

человек про Перл спрашивал а вы ему тут про PHP втираете

кароче, склифасовский, логика работы скрипта такая:

// смотрим что передали скрипту
$query=$ENV{'QUERY_STRING'};

// проверяем есть у нас файл $query.dat ?

if (файл $query.dat существует) {
//есть: читаем этот файл и выводим его содержимое
print "Content-Type: text/html\n\n";
read file все дела;
print ... ... ... ...;
} else {
// нет: делаем редирект на главную страницу
print "Location:
http://site.com\n\n";
}

вумный :super: :super: :super:
каждый просто думает по своему а язык на котором реализовывать будешь - роли не играет... можно хоть на bash замочить... сложности в этом нету...

ГЛАВНОЕ ИДЕЯ.... ИДЕ Я ЕСТЬ :naughty: :naughty: :naughty: [Ответ]
acb 08:12 02.09.2003
Здравствуйте, товарищи!

Благодарю за ответ.
Да, скрипт на PERL.

Вот как он выглядит:

#!/usr/bin/perl
#file.cgi
sub urldecode{
local($val)=@_;
$val=~s/\+/ /g;
$val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge;
return $val;
}


$graphics="http://mysite.com/images";

$filename=$ENV{'QUERY_STRING'}.'.dat';
open (F,$filename) || die "Can't open $filename: $!";
read(F,$data,-s F);
close(F);

print "Content-Type: text/html\n\n";
print "<HTML><HEAD><TITLE>file</TITLE></HEAD>\n";
print "<BODY LINK=#0000ff VLINK=#800080 BACKGROUND=\"$graphics/bg.gif\">\n";
и так далее.
В нужном месте вставляется строка
$data
и заканчивается
print "</BODY></HTML>\n";

Я думаю, что правильно будет встывить что-то типа:

} else {
print "Location: http://site.com\n\n";
}

Но куда?
Пробовал по-разному, но что-то не получилось. [Ответ]
^igor[] 10:13 02.09.2003
ну, чувак, я ж тебе написал куда - выше смотри
print "Location: должно быть вставлено _до того_ как будет что-то выведено (т.е. до первого print'a), иначе не сработает

книжки читай с примерами кода
[Ответ]
acb 10:44 02.09.2003
Да я, вроде бы, именно так и делал.
Но, что-то сервер выдал ошибку.
Сегодня вечером гляну log и попробую еще раз.

А вот эту строчку править не надо?
open (F,$filename) || die "Can't open $filename: $!";

acb добавил [date]1062488824[/date]:
А, все! PARDON! Въехал!

Я пропустил оператор IF [Ответ]
acb 13:16 02.09.2003
Вот теперь все заработало!
Я почитал теорию (я в ней полный дуб) и сделал так

$filename=$ENV{'QUERY_STRING'}.'.dat';

if(-e $filename){

open (F,$filename) || die "Can't open $filename: $!";
read(F,$data,-s F);
close(F);

}
else
{
print "Location: http://mysite.com\n\n";
}

Так что, благодарю всех за помощь.

P.S. Меня долго мучила проблема отсутствия доступа по FTP на работе. Но, наконец-то, я ее решил. Скачал бесплатный скрипт GENESIS (это многопользовательский файловый менеджер)

http://www.xav.com/scripts/genesis/

Классно работает. Если купить за $38 ключ, то можно еще предоставлять дисковое пространство пользователям и управлять ими.
Может кому-то надо. [Ответ]
Вверх