Forum Webscript.Ru

Программирование => Perl => Тема начата: от 22 Марта 2001, 16:48:52

Название: Название файла из директории!!!!!!!!!!!
Отправлено: от 22 Марта 2001, 16:48:52
Подскажите, пожалуйста правильный синтекс и всего остального этого сабжа:

Есть форма для отправки ID(В виде цифр), причем в зависимости от ID перенаправляет на нужную страницу
$cards_url/$cardnumber$cardext

HTML:







Кусок Перл-скрипта:

sub get_card {
opendir (IDIR, $cards_directory);
@files = IDIR;
$file = "$FORM{\'getcards\'}$cardext";
foreach $files (@files) {
if (($file = @files) & ($FORM{\'getcards\'} ne "")){
$cardnumber = $FORM{\'getcards\'};
print "Location: $cards_url/$cardnumber$cardext

";
}
else {print &Error(\'Такого ID-номера Не существует, или, просто, он не введен!\');      exit; }
}
closedir (IDIR);
}

Нужно, чтобы скрипт проверил на наличие файла
$FORM{\'getcards\'}$cardext в директории $cards_directory, где
$FORM{\'getcards\'}   -   любое число выводимое из формы
$cardext                -  .html
$cards_directory      -   c:/что-угодно/postcards

Я еще ЧАЙНИК в это деле, так что сильно не судите....
Название: Название файла из директории!!!!!!!!!!!
Отправлено: AliMamed от 22 Марта 2001, 17:10:06
что то типа того

if ( open(FILE, \'путь_и_имя_файла\') ){
 print "нашел файл!";
 close(FILE);
}else{
 print "не нашел";
}
Название: Название файла из директории!!!!!!!!!!!
Отправлено: lodevar от 22 Марта 2001, 17:19:31
>>opendir (IDIR, $cards_directory);

Откуда берешь $cards_directory?

>>@files = IDIR;
>>$file = "$FORM{\'getcards\'}$cardext";

А это что за $cardext ?

>>if (($file = @files) & ($FORM{\'getcards\'} ne "")){

А что значит $file = @files ?  Может имеешь ввиду $file = $files ?

>>$cardnumber = $FORM{\'getcards\'};

Ты вроде это значение уже брал. Или я что-то не понимаю???

>>print "Location: $cards_url/$cardnumber$cardext

";
>>}
>>else {print &Error(\'Такого ID-номера Не существует, или, просто, он не введен!\');      exit; }
>>}
>>closedir (IDIR);

Закрывать IDIR нужно до возможного exit\'а. Ну это просто так, для порядку.
Название: Название файла из директории!!!!!!!!!!!
Отправлено: от 22 Марта 2001, 18:04:05
$cardext - это расширение файла НАПРИМЕР, .html с точкой впереди
Название: Название файла из директории!!!!!!!!!!!
Отправлено: lodevar от 22 Марта 2001, 18:30:29
Ты бы конкретно обрисовал бы задачку. А то не понятно, откуда берутся у тебя эти переменные...

И почему тебе не нравится, например @params=split(/&/,$ENV{\'QUERY_STRING\'})

а такая любовь к $FORM{...} ?
Название: Название файла из директории!!!!!!!!!!!
Отправлено: от 22 Марта 2001, 18:58:07
Есть скрипт В.открыток, и я решил зарядить туда форму для Pick-up
Которая находится выше, но не знаю как!!!
При отправлении открытки, скрипт создает файл в директории
$cards_directory (например /usr/bin/postcards в конфиге), где имя файла должно быть что-то вроде этого  $FORM{\'getcards\'}$cardext
(в конфиге $cardext=".html"     $FORM{\'getcards\'} - это некое число генерируемое скриптом). Так вот я хочу, что пользователь вводил в pick-up форму это число и скрипт редиректил его на страницу в указанной директории, с проверкой на существующий файл

Пример,
Создалась у меня открытка в каталоге $cards_directory
С именем файла  53475484.html  
($FORM{\'getcards\'} - 53475484   a   $cardext  -  .html   т.е получаем
$FORM{\'getcards\'}$cardext)
В форме ввожу число 53475484,
Это число подставляется  $FORM{\'getcards\'}  и проверяется наличие файла $FORM{\'getcards\'}$cardext)  в директории $cards_directory
Если файл обнаружен, то перенаправляем пользователя на указанный ХТМЛ
Если же нет то пишем Сообщение об Ошибке
Название: Название файла из директории!!!!!!!!!!!
Отправлено: lodevar от 22 Марта 2001, 19:16:54
#!/usr/bin/perl
print "Content-type: text/html

";

$extension=".html";
$catalog="new";

@params=split(/&/,$ENV{\'QUERY_STRING\'}); #берет коммандную строку
foreach (@params)
{
  ($key,$val)=split(/=/,$_); # переписываем все параметры
  $param{$key}=$val;         # в хэш
}
$nomer = $param{\'getcards\'}; # берем введенный номер
$name=$nomer.$extension;

opendir (IDIR,$catalog);
$found=0;
while(defined($file=readdir(IDIR))) #перебираем весь каталог (не очень полезная затея)
{
 if($file==$name)  # если нашли, то
 {
   $found=1;       # делаем вот так
   closedir(IDIR); # закрываем каталог
 }
}
if($found)  # и проверяем - нашли или не нашли
{
 print "Ура! Нашли файлик!";
}
else
{
 print "Ну нет такого файла!";
}

#А вообще-то - храни ссылки на файлы в твоем каталоге в каком нибудь файле (на худой конец), а

в лучшем случае в базе (типа mySQL). :-)
Название: Название файла из директории!!!!!!!!!!!
Отправлено: от 22 Марта 2001, 19:26:25
Большое Спасибо Lodevar!!!
Сейчас буду пробовать!