Forum Webscript.Ru

Программирование => Perl => Тема начата: aner от 16 Января 2004, 01:10:35

Название: апгрейд скрипта
Отправлено: 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);
Название: апгрейд скрипта
Отправлено: Mog. от 16 Января 2004, 08:04:22
Цитировать
aner:
Реально это сделать?
Вполне.
Только где то надо хранить "опорное" время, т.е. время от которого начинают отсчитывать то самое количество дней. Оно сверяется с текущим и по результу проверки производятся дальнейшие действия.

Или тебе нужно конкретно расписать как взять текущее время, как его сохранить в файле и т.д.?
Название: апгрейд скрипта
Отправлено: Phoinix от 16 Января 2004, 10:22:08
aner
Функция time возвращает текущее время. Во время старта показа картинки получи опорное время, потом относительно него и прыгай;

$time = time;
if ($time > ($time_start+(86400*$kol_vo_day))) {Не показывать картинку}
else {Показывать картинку}
Название: апгрейд скрипта
Отправлено: aner от 17 Января 2004, 19:16:29
с функией \'time\' все ясно, спасибо,
а вот "опорное время" может стоить хранить в файле onfig\'a,
коль скоро к нему и так обращается скрипт?
счас он состоит из двух сторочек:
$imagedir=.....
$imageurl=.....

подскажите, как правильно в нем прописать опорное время?
Название: апгрейд скрипта
Отправлено: Mog. от 17 Января 2004, 19:24:02
Ну и пропиши третьей строчкой

Интересно, а зачем тебе все это?
Название: апгрейд скрипта
Отправлено: Phoinix от 17 Января 2004, 19:43:35
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 \'Нет картинки\';
}

И все...
Название: апгрейд скрипта
Отправлено: aner от 17 Января 2004, 23:03:33
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
Название: апгрейд скрипта
Отправлено: Chs от 18 Января 2004, 01:22:35
Цитировать
Missing semicolon on previous line

Точку с запятой не забываем после оператора.:)
Название: апгрейд скрипта
Отправлено: aner от 18 Января 2004, 04:17:28
да, действительно, глупо что забыл, что не Си...

но все равно в логах при каждой загрузке скрипта пишется строчка:
Premature end of script headers, что-то в нем не тово...

А главное, скрипт не выдает картинки, какое бы значение не ставил
в $imageday, сразу переходит к пункту "else" функции и на экране
появляется надпись "нет картинки"...
что-то в приведенной формуле расчета времени, наверно не так?
Название: апгрейд скрипта
Отправлено: Phoinix от 18 Января 2004, 12:26:18
aner

Угу косяк... в условии ставь "меньше" а не "больше"...

Цитировать
но все равно в логах при каждой загрузке скрипта пишется строчка:
Premature end of script headers, что-то в нем не тово...


Ищи в скрипте, скорей всего у тебя где-то print передв передачей заголовка браузера стоит...

[OFF]Что то я не пойму, ты логику скрипта замечаешь? или так "лобовым" копированием занимаешься?[/OFF]
Название: апгрейд скрипта
Отправлено: aner от 18 Января 2004, 16:12:10
нет, здесь дело было не в том... (я же ж не совсем уж...)
сторока в логах - это был сопутствующий момент неправильной постановки знака ">"

все я поправил, итеперь no problem
еще раз, благодарствуйте!