Forum Webscript.Ru
Программирование => Perl => Тема начата: aner от 16 Января 2004, 01:10:35
-
Вот, см. ниже самый банальный скрипт, выводящий случайным образом картинку из папки ук. в сопутствующем ему файле "конфиг."(если в папке одна, то будет выводить одну...)
Как к нему приписать время, чтоб он делал это лишь определенное количество дней, а потом прекращал?
Реально это сделать?
require "image.config";
opendir(DIR,"$imagedir");
@jpg=grep(/jpg\\Z/,readdir(DIR));
@gif=grep(/gif\\Z/,readdir(DIR));
push(@images,@jpg);
push(@images,@gif);
closedir(DIR);
srand();
$SIZE=@images;
$randnum=int rand $SIZE;
print "Content-type: text/html\\n\\n";
$image="$imageurl/$images[$randnum]";
print qq(
\\n);
-
aner:
Реально это сделать?
Вполне.
Только где то надо хранить "опорное" время, т.е. время от которого начинают отсчитывать то самое количество дней. Оно сверяется с текущим и по результу проверки производятся дальнейшие действия.
Или тебе нужно конкретно расписать как взять текущее время, как его сохранить в файле и т.д.?
-
aner
Функция time возвращает текущее время. Во время старта показа картинки получи опорное время, потом относительно него и прыгай;
$time = time;
if ($time > ($time_start+(86400*$kol_vo_day))) {Не показывать картинку}
else {Показывать картинку}
-
с функией \'time\' все ясно, спасибо,
а вот "опорное время" может стоить хранить в файле onfig\'a,
коль скоро к нему и так обращается скрипт?
счас он состоит из двух сторочек:
$imagedir=.....
$imageurl=.....
подскажите, как правильно в нем прописать опорное время?
-
Ну и пропиши третьей строчкой
Интересно, а зачем тебе все это?
-
aner
подскажите, как правильно в нем прописать опорное время?
Как хочешь...например сделай небольшой скрипт, типа:
#!/usr/bin/perl
my $time = time;
print "Content-type: text/html\\n\\n";
print qq "$time";
exit;
Получишь на экране текущее время, его записываешь в файл image.config
$imagedir=.....
$imageurl=.....
$imagetime=....
$imageday=.... - количество дней
1;
Скрипт исправляешь на:
require "image.config";
my $time = time;
if ($time > ($imagetime+(86400*$imageday))) {
opendir(DIR,"$imagedir");
@jpg=grep(/jpg\\Z/,readdir(DIR));
@gif=grep(/gif\\Z/,readdir(DIR));
push(@images,@jpg);
push(@images,@gif);
closedir(DIR);
srand();
$SIZE=@images;
$randnum=int rand $SIZE;
print "Content-type: text/html\\n\\n";
$image="$imageurl/$images[$randnum]";
print qq(
\\n);
}
else {
print "Content-type: text/html\\n\\n";
print qq \'Нет картинки\';
}
И все...
-
2 phoinix -
спасибо огромное, что время потратили...
один вопрос, что там за "1;" у вас стоит на след. строке после $imageday?
я перл совсем не знаю, у меня проблема с синтаксисом, а сервер как раз все ругается на эту строчку:
$imageday=2 (типа 2 дня)
я пробовал и так ставить:
$imagetime="1074367748"
$imageday="1074377748"
все равно пишет следущее:
>>Scalar found where operator expected at image.config near "$imageday"
>>Missing semicolon on previous line
-
Missing semicolon on previous line
Точку с запятой не забываем после оператора.:)
-
да, действительно, глупо что забыл, что не Си...
но все равно в логах при каждой загрузке скрипта пишется строчка:
Premature end of script headers, что-то в нем не тово...
А главное, скрипт не выдает картинки, какое бы значение не ставил
в $imageday, сразу переходит к пункту "else" функции и на экране
появляется надпись "нет картинки"...
что-то в приведенной формуле расчета времени, наверно не так?
-
aner
Угу косяк... в условии ставь "меньше" а не "больше"...
но все равно в логах при каждой загрузке скрипта пишется строчка:
Premature end of script headers, что-то в нем не тово...
Ищи в скрипте, скорей всего у тебя где-то print передв передачей заголовка браузера стоит...
[OFF]Что то я не пойму, ты логику скрипта замечаешь? или так "лобовым" копированием занимаешься?[/OFF]
-
нет, здесь дело было не в том... (я же ж не совсем уж...)
сторока в логах - это был сопутствующий момент неправильной постановки знака ">"
все я поправил, итеперь no problem
еще раз, благодарствуйте!