Почему CGI.pm загружает старую версию файла при успешной загрузке нового файла? - PullRequest
1 голос
/ 23 сентября 2010

Я использую CGI.pm версия 3.10 для загрузки файлов с использованием Perl. У меня есть Perl-скрипт, который загружает файл, и одно из моих приложений отслеживает различные ревизии загруженного документа с возможностью возврата денег.

Этапы воссоздания:

  • Я сделал заказ (загрузил файл) с помощью своего приложения (которое использует веб-интерфейс apache).
  • Выход из сеанса текущего пользователя.
  • Войдите снова с теми же учетными данными, а затем зарегистрируйте (загрузите) новый файл.

Выход:

  • Загрузка успешно завершена
  • Скрипт загрузки Perl показывает правильные загруженные данные
  • Новая версия созданного файла

Вывод правильный и ожидаемый, кроме одного случая, который является проблемой

Проблема:

  • Содержимое вновь загруженного файла совпадает с содержимым последней загруженной ревизии в БД.

Я использую временную папку для копирования нового контента, и если я распечатываю новый контент в сценарии загрузки, он корректен. У меня нет ограничений на размер загрузки CGI. Кажется, где-то в среде CGI это может быть ошибкой версии, которую я использую. Я не пользуюсь режимом taint.

Может кто-нибудь помочь мне понять, в чем может быть причина?

Ответы [ 2 ]

1 голос
/ 26 сентября 2010

Звучит так, как будто вы получаете старое имя файла в поле загрузки файла.Не уверен, что это может произойти для файлового поля, но это функция для других типов полей.

Попробуйте добавить прагму -nosticky, например, use CGI qw(-nosticky :all);.Еще одна прагма, которую стоит попробовать - это -private_tempfiles, которая должна препятствовать «подслушиванию» пользователя даже при его собственных загрузках.

Конечно, может потребоваться локализация ( my ) некоторыхпеременная или добавьте -force в поле файла.

0 голосов
/ 08 октября 2010

Я нашел проблему.Причина в том, что путь назначения скопированного файла был неправильным, потому что мое приложение одно из событий отображает путь скопированного файла в другой каталог, и этот путь сохраняется в сеансе пользователя.Это происходит только тогда, когда я запускаю событие непосредственно перед запуском сценария загрузки.Это было причиной того, что это было трудно поймать.Поскольку скрипт загрузки предназначен для выбора нового скопированного файла по тому же пути, он всегда загружает один и тот же файл в БД с другой ревизией.Новый скопированный файл лежит по новому пути.

Решается путем сопоставления правильного пути перед загрузкой.

Спасибо

...