Forum Webscript.Ru

Программирование => Perl => Тема начата: Yaroslav от 08 Марта 2005, 20:44:41

Название: что может создавать файл
Отправлено: Yaroslav от 08 Марта 2005, 20:44:41
что может причинить создание файла HASH(0x8092be0)
внутренность в нем пустая и работе он не мешает, но все же, раз он создается, значит что то не так....
создается он в директории где хранятся созданные в ручную сессии
Название: что может создавать файл
Отправлено: synthez от 08 Марта 2005, 23:04:07
У меня было что-то подобное, функция записывающая хэш в файл требовала два параметра function($filename,\\%hash),  и я по своей невнимательности забыл между аргументами запятую и у меня файлы создавались такого вида file.txtHASH(0x542be0) ... конечно не ответ но все же мож где проглядел... удачи!
Название: что может создавать файл
Отправлено: glebushka от 09 Марта 2005, 02:15:03
Потому что где-то не разрешаешь ссылку. И заместо вывода субъекта, выводишь ссылку. Определись, в каком участке кода создаётся данный файл. И запость его (код) сюда. Ну или сам найди ошибку.
Название: что может создавать файл
Отправлено: Yaroslav от 10 Марта 2005, 00:38:06
вот выношу на ваше обсуждение часть которая отвечает за создание и удаление файлов в данной директории

$file - с куков
$time=time();
if ($file eq "") { #если в куке пусто
  while (-e "temp/$time.txt") { #если такая сесия есть уже
    $time++;
  }
  $file=$time;

  open (OLDALLUSER,"temp/files.tmp"); #смотрим лист сесий
  while () { chomp;
        ($oldtime,$oldfile)=split(/\\|/);
        if ($time-$oldtime<24*60*60) { push @newalluser,"$_\\n"; } #если время хранения не вышло
        else { unlink ("temp/$oldfile.txt"); } # если вышло удаляем
    }

    push @newalluser,"$time|$file\\n"; # добавляем новую сесию

    open (NEWALLUSER,">temp/files.tmp"); # перезаписуем всех живых :)
    print NEWALLUSER @newalluser;
    close (NEWALLUSER);

    print "Set-Cookie: file=$file; path=/; \\n";#заносим в кук
}
else { #если сесия уже в куке была читаем что там было
    open (FILE, "temp/$file.txt");
    while () { chomp;
        ($oldid,$oldkol)=split(/\\|/);
        if ($oldid ne $id) { push @newfile,"$oldid|$oldkol\\n"; }
    }
}
if ($kol > "0") { push @newfile,"$id|$kol\\n"; } #добавляем новую запись или заменяем

open (FILE, ">temp/$file.txt");
print FILE @newfile; #собственно записуем новое
close (FILE);
Название: что может создавать файл
Отправлено: vladsu от 10 Марта 2005, 15:59:11
1. Для большей уверенности попробуйте оформить Ваши строки типа:

"temp/$time.txt"
"$oldid|$oldkol\\n"
...

как
"temp/${time}.txt"
"${oldid}|${oldkol}\\n"
...


2. А вот такие записи я вообще не понимаю
push @newalluser,"$_\\n";
push @newalluser,"$time|$file\\n";

зачем хранить в массиве для каждой записи перевод строки, вставляйте его при выводе.

3. Эта запись ошибочна
if ($kol > "0") ....
решите, что Вы хотите сравнивать строки или числа

4. Тут
else { unlink ("temp/$oldfile.txt"); }

я бы подстраховался
else { unlink("temp/$oldfile.txt") if -e "temp/$oldfile.txt"; }

5. Я вижу открытие
open (OLDALLUSER...

но не вижу закрытия

PS Это конечно не ответ на Ваш вопрос, но возможно поможет в избежании других проблем.
Название: что может создавать файл
Отправлено: Yaroslav от 11 Марта 2005, 01:34:11
vladsu
3. чем же ошибочна? она как раз выдает количество... (я по книжке)
4. ок
Название: что может создавать файл
Отправлено: vladsu от 11 Марта 2005, 15:55:52
Цитировать
Yaroslav:
3. чем же ошибочна? она как раз выдает количество... (я по книжке)


В Вашем варианте это, повидимому, должно выглядеть так
if ($kol > 0)...

0 - это число, когда Вы его обрамляете кавычками становится строкой.
Название: что может создавать файл
Отправлено: Yaroslav от 11 Марта 2005, 17:50:55
vladsu
возможо я что то и пропустил.. :(