Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > И снова о закачке файлов на сервер


Автор: milleroff 5.11.2006, 14:41
Здравствуйте все. Для закачки файлов на сервак на этот раз решил всё сделать по-своему, создал вот такую конструкцию:

Код

my $dir= './upload'; # директория, куда сохраняем
    my $fh= $FORM{'file_name'}; #handle файла
    my $name = $fh;
    $name =~s/^.*[\\\/]//; # отрезаем путь к файлу
    if ($fh ne "")
        {
        open (IN, $fh);
        open (OUT,">./$dir/$name");
        flock OUT, 2;
        binmode OUT;
        binmode IN;
        print  OUT  while (<IN>);
        close (OUT);
        close (IN);
        flock (OUT,8);
        chmod 0644, "./$dir/$name";


Так вот, на локальном сервере типа "Денвер" всё работает "на ура". Но на Агавовском хостинге файлы создаются пустыми (0 байт). Объясните - почему?

Автор: ежик 11.11.2006, 14:17
а ты пробовал просто создать файлик
Например:
Код

open (my $OUT,">./test");
print  $OUT 'bla bla bla bla';
close ($OUT);

Автор: milleroff 11.11.2006, 21:06
Нет, с этим-то проблем нет. Я к тому, что насколько это правильно (видимо - не очень), когда я из одного дескриптора делаю вывод прямо в другой? Просто я смотрю, народ применяет какие-то временные переменные, буферы... Как здесь:
Код

my $buff;
    open( F, "> $dir/$file_new" ) or die $!;
      binmode F;
      binmode $file;
      print F $buff while ( read( $file, $buff, 1024 ) );
    close( F );

Ничччего не понимаю!

Автор: ежик 14.11.2006, 05:11
Честно говоря, я тут тоже не большой знаток этого вопроса,
но вот то, что ты написал последнее это будет вернее, а вот 
но твой первый вариант просто копировал один файл в другой
Что ты выше написал это для приема от браузера файла!!!



Автор: Phoinix 22.11.2006, 19:51
milleroff, 

Все хорошо, вот только я не пойму строку:

   my $fh= $FORM{'file_name'}; #handle файла

Ты уверен в своем комментарии?

Вообще handle для твоего "типа закаченого" файла будет IN
Сообразишь сам, почему на локальной машине это сработало?
И вообще, откуда ты взял $FORM{'file_name'} ???

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)