Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Что это за временные файлы, которые делает Perl?

2.3K
09 сентября 2003 года
goodstas
28 / / 06.08.2003
Я пишу просто какой-нибудь file.pl без всякой компиляции (пусть он например делает upload), выкладываю его с IIS И при работе с ним Perl создаёт какие-то свои файлы "CGITemp1234..", которые сами автоматически не удаляються.
Вопрос в том, как сделать так чтобы они не появлялись или потом сами удалялись, когда заканчиваеться работа с файлом file.pl ?
1.8K
09 сентября 2003 года
2NetFly
132 / / 01.09.2003
Скрипт, который "например делает аплоад" или именно тот, который делает аплоад?
300
09 сентября 2003 года
ReDrum
689 / / 20.04.2000
Цитата:
Originally posted by goodstas
Я пишу просто какой-нибудь file.pl без всякой компиляции (пусть он например делает upload), выкладываю его с IIS И при работе с ним Perl создаёт какие-то свои файлы "CGITemp1234..", которые сами автоматически не удаляються.
Вопрос в том, как сделать так чтобы они не появлялись или потом сами удалялись, когда заканчиваеться работа с файлом file.pl ?



Найти место в коде, в котором создается временный файл, и написать команду удаления.

для общего развития
perldoc -f unlink

1.8K
09 сентября 2003 года
2NetFly
132 / / 01.09.2003
Цитата:
Originally posted by ReDrum

Найти место в коде, в котором создается временный файл, и написать команду удаления.


Человек же ясно сказал – он эти файлы не создает.

Предполагаю, что они создаются каким-нибудь используемым модулем.

2.3K
09 сентября 2003 года
goodstas
28 / / 06.08.2003
Цитата:
Originally posted by 2NetFly

Человек же ясно сказал – он эти файлы не создает.

Предполагаю, что они создаются каким-нибудь используемым модулем.



Похоже их создаёт модуль FILE.
Тогда как ему сказать, чтобы он это не делал или
как указать ему, чтобы чистил за собой?

300
09 сентября 2003 года
ReDrum
689 / / 20.04.2000
Цитата:
Originally posted by 2NetFly

Человек же ясно сказал – он эти файлы не создает.

Предполагаю, что они создаются каким-нибудь используемым модулем.



Кто не создает эти файлы, перловый скрипт???? :)= Тогда откуда по твоему беруться файлы ;)=.
Да неужели не из входного потока не считываются и не записываются?
И вообще, как же тогда быть с такой ситуацией, аля "я не хочу, а он работает." :)=


2 goodstas
еще раз
perldoc -f unlink

2.3K
09 сентября 2003 года
goodstas
28 / / 06.08.2003
Цитата:
Originally posted by ReDrum


Кто не создает эти файлы, перловый скрипт???? :)= Тогда откуда по твоему беруться файлы ;)=.
Да неужели не из входного потока не считываются и не записываются?
И вообще, как же тогда быть с такой ситуацией, аля "я не хочу, а он работает." :)=


2 goodstas
еще раз
perldoc -f unlink



Эти файлы делаються из-за того что я использую модуть FILE. Вопрос как сделать , чтобы файлов не было. А для unlink я должен знать имя файла ... которого у меня нету, так как не я создаю эти файлы.

300
09 сентября 2003 года
ReDrum
689 / / 20.04.2000
В чем загвоздка то,
Во первых читаешь доку по File::MkTemp.
Смотришь код, ищешь где встречаются функции пакета типа
 
Код:
use File::MkTemp;
  mktemp(tempXXXXXX,[dir]);
  my $string = mktemp(tempXXXXXX,[dir]);


Ишешь конец работы своих подпрограмм и ставишь команду удаления.
В данном случае в переменной $string и будет название временного файла.
283
09 сентября 2003 года
Alone
910 / / 20.11.2002
Хм...
если мне не изменяет мой склероз
CGItemp* файлы создает модуль CGI при аплоуде файлов под виндами...
решение удалять в конце работы скрипта...
1.8K
09 сентября 2003 года
2NetFly
132 / / 01.09.2003
Цитата:
Originally posted by Alone
Хм...
если мне не изменяет мой склероз
CGItemp* файлы создает модуль CGI при аплоуде файлов под виндами...
решение удалять в конце работы скрипта...


Так и есть. Именно поэтому выше я спросил:
Скрипт, который "например делает аплоад" или именно тот, который делает аплоад?

1.8K
09 сентября 2003 года
2NetFly
132 / / 01.09.2003
Цитата:
Originally posted by ReDrum


Кто не создает эти файлы, перловый скрипт???? :)= Тогда откуда по твоему беруться файлы ;)=.
Да неужели не из входного потока не считываются и не записываются?
И вообще, как же тогда быть с такой ситуацией, аля "я не хочу, а он работает." :)=


Повторюсь. Человек выше сказал, что нигде в написанном им коде временных файлов он не создает. Предполагаю, что они создаются каким-нибудь используемым модулем.

Еще раз повторить? Тут обсуждается программирование, а не происходит игра в "передерись_к_словам".

2.3K
09 сентября 2003 года
goodstas
28 / / 06.08.2003
Цитата:
Originally posted by Alone
Хм...
если мне не изменяет мой склероз
CGItemp* файлы создает модуль CGI при аплоуде файлов под виндами...
решение удалять в конце работы скрипта...



С этим можно как то бороться? Может есть что нибудь, чтобы он их сам автоматом удалял?

283
09 сентября 2003 года
Alone
910 / / 20.11.2002
Насколько я знаю нет...
А вчем проблемма в конце работы удалять файлы по маске?
300
10 сентября 2003 года
ReDrum
689 / / 20.04.2000
Цитата:
Originally posted by 2NetFly

Повторюсь. Человек выше сказал, что нигде в написанном им коде временных файлов он не создает. Предполагаю, что они создаются каким-нибудь используемым модулем.
Еще раз повторить?



Подход в разработке, я поработал, и пусть кто нить когда нить за мной уберет, имеет право на жизнь???
Ладно об этом ниже.

Цитата:

Тут обсуждается программирование, а не происходит игра в "передерись_к_словам".



Меня пытаются жизни научить? ;)= Гм, посмотрим что дальше будет.

2 Alone
Сомнения у меня по поводу CGI.pm (imho Lincoln D. Stein - неприрекаемый авторитет, так что на провакации не поддаюсь)
Нашел я в коде место где и создаются временные файла аля CGItempXXX и пару строк ниже переопределен DESTROY и в нем как раз и происходит подчистка ранее созданного файла)

Это первое
Второе читаем доку
=cut
the name returned is always the name of the file on the user's machine, and is unrelated to the name of the temporary file that CGI.pm creates during upload spooling (see below).
=cut
То есть следует вывод, что как и предполагалось, при использовании метода upload() временные файлы создаются всегда, независимо от оси.

Едем дальше.
Если модуль такой платформенно-независимый, то наверняка у кого нить из людей была подобная проблема. А проблемы, как известно, пишутся вот здесь http://rt.cpan.org/NoAuth/Bugs.html?Dist=CGI.pm&ShowAll=1 а теперь ткните пальцем на подобную у кого возникли такие беды.

2 goodstas
Запости здесь свой скрипт, или отошли на [email]GermanS@russiajournal.com[/email]. А то полемика будет продолжаться.

283
10 сентября 2003 года
Alone
910 / / 20.11.2002
Я слава Богу не модератор, но хотелбы попросить
ReDrum и 2NetFly выясняйте отношения в привате пожалуйста(надеюсь Joker поддержит) или создайте тему в гостевой... топик тонет во флуде...

ReDrum
просто приведи пример как ты аплоудиш файлы и версию CGI.pm
и скажи "Я в WINDOWS заливаю файлы и никаких временных файлов нигде(это важно, они могут лежать и temp-папках) их нет... LOLы блин :( "...
И все(ну про лолов можно убрать :) ), станет почти наверняка понятно где проблемма(модуль древний, руки из... и т.д.)
покаже это все чистый флуд

P.S.Если в yandex.ru или google.com набрать CGITemp то можно много интересного найти :)
2.3K
10 сентября 2003 года
goodstas
28 / / 06.08.2003
2 goodstas
Запости здесь свой скрипт, или отошли на [email]GermanS@russiajournal.com[/email]. А то полемика будет продолжаться. [/QUOTE]

Код Upload :

use CGI qw( :standard );
use File::Basename;

use warnings;
use strict;

my $query = new CGI;
my $upfile = $query->param("upfile");
my $path = $query->param("path");
my $abspath = $query->param("abs_path");
my $goto = $query->param("redirect");
my $fileName = basename( $query->param("upfile") );
my @array = split(/[.]/,$fileName);
my $localfile = "$path$array[$#array]";
my $jpeg = "jpeg";
my $jpg = "jpg" ;
my $bmp = "bmp";
my $gif ="gif";



if($array[$#array] eq "jpg" || $array[$#array] eq "gif" || $array[$#array] eq "jpeg"|| $array[$#array] eq "bmp")
{
if(-e "$path$jpg")
{
unlink("$abspath$jpg");
}
elsif(-e "$path$jpeg")
{
unlink("$abspath$jpeg");
}
elsif(-e "$path$bmp")
{
unlink("$abspath$bmp");
}
elsif(-e "$path$gif")
{
unlink("$abspath$gif");
}

if(open(UPLOADFILE, ">$localfile"))
{
binmode UPLOADFILE;
while (my $bytesread = read($upfile, my $buffer, 1024))
{
print UPLOADFILE $buffer;
}
close (UPLOADFILE);
print redirect($goto);
}
else
{
print redirect("$goto&Error=open");
exit();
}
}
else
{
print redirect("$goto&Error=ext");
exit();
}


300
10 сентября 2003 года
ReDrum
689 / / 20.04.2000
Цитата:
Originally posted by Alone

ReDrum
просто приведи пример как ты аплоудиш файлы и версию CGI.pm
и скажи "Я в WINDOWS заливаю файлы и никаких временных файлов нигде(это важно, они могут лежать и temp-папках) их нет... LOLы блин :( "...



OS NT4. SP5.0
perl v5.6.1 built for MSWin32-x86-multi-thread
$CGI::VERSION='2.752'
IIS 4.0

Код:
#!/usr/bin/perl -w
use strict;
use vars qw/$query/;

&main();

sub main {
    use CGI;
    $query = CGI->new();

    print $query->header(-type=>'text/html');
    print $query->start_html(-title=>'Upload Test');
    &upload() if ($query->param('file'));
    &upl_form();
    print $query->end_html();
}

sub upl_form {
    print
      $query->start_multipart_form(-method=>'post', -action=>$query->url(-relative=>1)),
        $query->filefield(-name=>'file', -default=>'starting value', -size=>50, -maxlength=>80),
        $query->submit(),
      $query->end_form();
}

sub upload {
    my $file = $query->param('file');
    open (FILE, "> MyTest.gif") || die "Can't open file: $!";
    binmode (FILE);
    my $buffer;
    while (read ($file, $buffer, 1024)) {
        print FILE $buffer;
    }
    close (FILE) || die "Can't close file: $!";
}


Работа:
Нажмите кнопку browse,
Выберите gif файл,
Нажмите кнопку Ок, затем Submit
Результат:
Картинка запишется в файл MyTest.gif в директории в которую вы определили в переменной $filename.
Нажмите F5, в появившемся окне нажмите Retry.
Попытайтесь найти файлы типа CGITemp.
Мне этого не удалось

ЗЫ. Писал на коленке, без лишних условий и проверок.


Цитата:

P.S.Если в yandex.ru или google.com набрать CGITemp то можно много интересного найти :)


Мне не интересно искать, тем более что проверил эту заморочку.

2.3K
10 сентября 2003 года
goodstas
28 / / 06.08.2003
Цитата:
Originally posted by ReDrum


Мне не интересно искать, тем более что проверил эту заморочку.



И всё таки что же не так я делаю?
Мне интересно понять, что мне нужно исправить,
а не копировать просто код.
А смотреть там всего 10 строчек, да и не думаю, что бы там было бы что-то сложное, так как Perl-ом до этого ни разу не пользовался...
Так что не думаю, что это сложная задача.

1.8K
10 сентября 2003 года
2NetFly
132 / / 01.09.2003
Цитата:
Originally posted by Alone
Я слава Богу не модератор, но хотелбы попросить
ReDrum и 2NetFly выясняйте отношения в привате пожалуйста(надеюсь Joker поддержит) или создайте тему в гостевой... топик тонет во флуде...


Тут отношения выяснять никто не пытается. Пытаюсь объяснить человеку, который никогда не сталкивался с вышеописанной проблемой, что она, не смотря на то, что он с ней не сталкивался, существует.

ReDrum, жизни тебя никто не учит. Сам учись. Человек выше привел код. Процитируй мне строку, где он создает временный файл (твое утверждения) и я с радость признаю, чтоб был не прав.

Кстати, топик тонет не во флуде, а в флейме ;)

2.3K
10 сентября 2003 года
goodstas
28 / / 06.08.2003
Кто нибудь может мне сказать, что мне нужно изменить в том коде, который я опубликовал, чтобы не появлялись или сами убирались эти временные файлы?
1.8K
10 сентября 2003 года
2NetFly
132 / / 01.09.2003
sub rm_cgitmp
{
my $dir = shift;
opendir (DIR, $dir);
/^CGITemp/i && unlink $dir . $_ foreach readdir(DIR);
closedir DIR;
}

#Удаляет все временные файлы из указанной папки
rm_cgitmp('/usr/home/user1/cgi-bin/');
2.3K
10 сентября 2003 года
goodstas
28 / / 06.08.2003
Цитата:
Originally posted by 2NetFly
sub rm_cgitmp
{
my $dir = shift;
opendir (DIR, $dir);
/^CGITemp/i && unlink $dir . $_ foreach readdir(DIR);
closedir DIR;
}

#Удаляет все временные файлы из указанной папки
rm_cgitmp('/usr/home/user1/cgi-bin/');



Не удаляет, имя директории я передаю полностью физичиский адрес - это из file.asp я передаю
Server.MapPath(".").
И вместо CGITemp только CGItemp :))

Показываю всё вместе :


use CGI qw( :standard );
use File::Basename;

use warnings;
use strict;

my $query = new CGI;
my $upfile = $query->param("upfile");
my $path = $query->param("path");
my $dir = $query->param("dir");
my $abspath = $query->param("abs_path");
my $goto = $query->param("redirect");
my $fileName = basename( $query->param("upfile") );
my @array = split(/[.]/,$fileName);
my $localfile = "$path$array[$#array]";
my $jpeg = "jpeg";
my $jpg = "jpg" ;
my $bmp = "bmp";
my $gif ="gif";



if($array[$#array] eq "jpg" || $array[$#array] eq "gif" || $array[$#array] eq "jpeg"|| $array[$#array] eq "bmp")
{
if(-e "$path$jpg")
{
unlink("$abspath$jpg");
}
elsif(-e "$path$jpeg")
{
unlink("$abspath$jpeg");
}
elsif(-e "$path$bmp")
{
unlink("$abspath$bmp");
}
elsif(-e "$path$gif")
{
unlink("$abspath$gif");
}

if(open(UPLOADFILE, ">$localfile"))
{
binmode UPLOADFILE;
while (my $bytesread = read($upfile, my $buffer, 1024))
{
print UPLOADFILE $buffer;
}
close (UPLOADFILE);

opendir (DIR, $dir);
/^CGItemp/i && unlink $dir . $_ foreach readdir(DIR);
closedir DIR;

print redirect($goto);
}
else
{
print redirect("$goto&Error=open");
exit();
}
}
else
{
print redirect("$goto&Error=ext");
exit();
}:roll: :roll: :roll: :roll: :) :???: :@@@:

1.8K
10 сентября 2003 года
2NetFly
132 / / 01.09.2003
Функция удаления работает, можешь мне поверить на слово ;)
Скорее всего, ты указываешь неверный путь. Если хочется проверить: создай пару файлов в директории и жестко пропиши ее (директорию) в скрипте.
300
11 сентября 2003 года
ReDrum
689 / / 20.04.2000
Короче вот решение проблемы
 
Код:
use CGI;
 +use vars qw/$query/; # Добавить это

  my $query = CGI->new();
  $query = CGI->new(); # Убрать my
1.8K
11 сентября 2003 года
2NetFly
132 / / 01.09.2003
Цитата:
Originally posted by ReDrum
Короче вот решение проблемы
 
Код:
my $query = CGI->new();
  $query = CGI->new(); # Убрать my


Это решений (с отсутствием my) приводит к необходимости отказаться от стрикта. А для больших проектов это неприемлемо ;)

300
11 сентября 2003 года
ReDrum
689 / / 20.04.2000
открываем америку???
или может а доку меня носом ткнешь? :))))
use vars qw/$query/; - это само собой разумеется, тем более в примере, приведенному алону, именно так и написано.
1.8K
11 сентября 2003 года
2NetFly
132 / / 01.09.2003
Цитата:
Originally posted by ReDrum
тем более в примере, приведенному алону, именно так и написано.


Теперь вижу. До этого на код никакого внимания не обратил.

300
11 сентября 2003 года
ReDrum
689 / / 20.04.2000
В догонку добавлю, что можно выдрать полный путь к временномы файлу из объекта типа CGI ;))), а значит не гемориться с удалением файла по маске.

Так как вы оба в танке, на досуге загляните в
perldoc Data::Dumper
1.8K
11 сентября 2003 года
2NetFly
132 / / 01.09.2003
Цитата:
Originally posted by ReDrum
Так как вы оба в танке


Я считал тебя достаточно взрослым и достаточно неглупым человеком, который в конференции о программировании не переходит на личности. Я ошибался. Дискуссия закончена.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог