Старый 27.06.2003, 11:08   #1   
Форумец
 
Аватар для acb
 
Сообщений: 25
Регистрация: 03.12.2002
Возраст: 62

acb вне форума Не в сети
Question Вопрос СС

Здравствуйте СС!

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

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

Заранее благодарю за ответ.
  Ответить с цитированием
Старый 27.06.2003, 13:04   #2   
няшечка
 
Аватар для mikе
 
Сообщений: 5,316
Регистрация: 13.06.2003

mikе вне форума Не в сети
Гм

Вообще-то от настроек сервера зависит, будет он выдавать мессагу об ошибке.
например, если написать:
[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

Так что пробовай.
  Ответить с цитированием
Старый 28.06.2003, 18:37   #3   
Memory test: failed
 
Аватар для DMakeev
 
Сообщений: 699
Регистрация: 21.03.2003
Возраст: 41
Записей в дневнике: 7

DMakeev вне форума Не в сети
На чем скрипт?
  Ответить с цитированием
Старый 30.06.2003, 07:38   #4   
Форумец
 
Аватар для acb
 
Сообщений: 25
Регистрация: 03.12.2002
Возраст: 62

acb вне форума Не в сети
Скрипт на PERLе
  Ответить с цитированием
Старый 30.06.2003, 11:31   #5   
Memory test: failed
 
Аватар для DMakeev
 
Сообщений: 699
Регистрация: 21.03.2003
Возраст: 41
Записей в дневнике: 7

DMakeev вне форума Не в сети
acb, если хочешь, кинь его на [email protected], посмотрю, подправлю, скину тебе исправленный - на словах достаточно муторно объяснять не зная структуры скрипта.
  Ответить с цитированием
Старый 30.06.2003, 12:03   #6   
Форумец
 
Аватар для acb
 
Сообщений: 25
Регистрация: 03.12.2002
Возраст: 62

acb вне форума Не в сети
Цитата:
Первоначальное сообщение от DMakeev
acb, если хочешь, кинь его на [email protected], посмотрю, подправлю, скину тебе исправленный - на словах достаточно муторно объяснять не зная структуры скрипта.
Спасибо за ответ.
Кусок скрипта скинул на Ваш e-mail
  Ответить с цитированием
Старый 24.07.2003, 14:23   #7   
Форумец
 
Аватар для CC
 
Сообщений: 220
Регистрация: 17.04.2003
Записей в дневнике: 1

CC вне форума Не в сети
Я правда не доконца понял, но попробую все таки посоветовать...

в корневую директорию кладешь файл
.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], посмотрю, подправлю, скину тебе исправленный - на словах достаточно муторно объяснять не зная структуры скрипта.
это кстати одно из верных решений
  Ответить с цитированием
Старый 24.07.2003, 14:55   #8   
Форумец
 
Аватар для acb
 
Сообщений: 25
Регистрация: 03.12.2002
Возраст: 62

acb вне форума Не в сети
СС, спасибо за ответ.

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

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

Когда вернусь, то обязательно попробую предложенные варианты и свяжусь с Вами.
  Ответить с цитированием
Старый 24.07.2003, 15:16   #9   
Форумец
 
Аватар для CC
 
Сообщений: 220
Регистрация: 17.04.2003
Записей в дневнике: 1

CC вне форума Не в сети
Цитата:
Первоначальное сообщение от acb
СС, спасибо за ответ.

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

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

Когда вернусь, то обязательно попробую предложенные варианты и свяжусь с Вами.
да без проблем
я тогда Аську дам
  Ответить с цитированием
Старый 25.07.2003, 22:34   #10   
Архитектор
 
Аватар для ^igor[]
 
Сообщений: 193
Регистрация: 28.03.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";
}
  Ответить с цитированием
Старый 30.07.2003, 15:04   #11   
Форумец
 
Аватар для CC
 
Сообщений: 220
Регистрация: 17.04.2003
Записей в дневнике: 1

CC вне форума Не в сети
Цитата:
Первоначальное сообщение от ^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:
  Ответить с цитированием
Старый 02.09.2003, 08:12   #12   
Форумец
 
Аватар для acb
 
Сообщений: 25
Регистрация: 03.12.2002
Возраст: 62

acb вне форума Не в сети
Здравствуйте, товарищи!

Благодарю за ответ.
Да, скрипт на 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";
}

Но куда?
Пробовал по-разному, но что-то не получилось.
  Ответить с цитированием
Старый 02.09.2003, 10:13   #13   
Архитектор
 
Аватар для ^igor[]
 
Сообщений: 193
Регистрация: 28.03.2003

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

книжки читай с примерами кода
  Ответить с цитированием
Старый 02.09.2003, 10:44   #14   
Форумец
 
Аватар для acb
 
Сообщений: 25
Регистрация: 03.12.2002
Возраст: 62

acb вне форума Не в сети
Да я, вроде бы, именно так и делал.
Но, что-то сервер выдал ошибку.
Сегодня вечером гляну log и попробую еще раз.

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

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

Я пропустил оператор IF
  Ответить с цитированием
Старый 02.09.2003, 13:16   #15   
Форумец
 
Аватар для acb
 
Сообщений: 25
Регистрация: 03.12.2002
Возраст: 62

acb вне форума Не в сети
Вот теперь все заработало!
Я почитал теорию (я в ней полный дуб) и сделал так

$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 ключ, то можно еще предоставлять дисковое пространство пользователям и управлять ими.
Может кому-то надо.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind