4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 5 июня 2007 19:02 Сообщение отредактировано: 5 июня 2007 19:05
Вот пример кода:
#!/usr/bin/perl
use CGI::Carp "fatalsToBrowser"; # Output errors to browser
use CGI qw(:standard); # Saves loads of work
$CGI::POST_MAX = 32768; # макс. размер POST-запроса (и файла, соответственно, тоже)
$query = new CGI; # в объекте $query — данные нашего HTTP-запроса
$picture=$query->param('picture'); # получаем указатель поле с загружаемой картинкой. Для загружаемых файлов этот указатель является file handle
open(FILE,">$imagesdir"."avatars/tempfile.tmp"); # открываем файл, в который нужно сохранить загруженную картинку, именно здесь нужно указать свой собственный путь
binmode FILE; # работа с файлом — в двоичном режиме, чтобы картинка не попортилась
print FILE while (<$picture>); # записываем в новый файл FILE данные до тех пор, пока удается что-то прочитать из файла $picture;
close(FILE); # закрываем файл
$pictype=&ScanIMG("$imagesdir"."avatars/tempfile.tmp"); # вызываем функцию проверки файла
if ($pictype == 0) {$XErrorMsg="Файл со значком не является GIF или JPEG файлом или он поврежден." }
else
{ if ($picname !~ /([\w-]+ \. (?: gif))$/ix && $pictype==1 ) {$picname=$picname.'.gif'; }
elsif ($picname !~ /([\w-]+ \. (?: jpe?g))$/ix && $pictype==2 ) {$picname=$picname+'.jpg'; }
if (-e "$imagesdir"."avatars/$picname")
{ $XErrorMsg="Ошибка загрузки: файл с таким именем уже существует.";
}
else
{ rename("$imagesdir"."avatars/tempfile.tmp","$imagesdir"."avatars/$picname");
$XErrorMsg="Значок $picname успешно загружен.";
}
print $XErrorMsg; # выводим результат проверки
Библиотека CGI является стандартной, а функция ScanImg описана в файле, который я прикладываю к этому сообщению. Сейчас загрузка делается так: файл загружается сначала с временным именем, а потом переименовывается в то имя, которое было указано при загрузке. Внимание! Проверки на опасные символы я тут не делал!
Файл с функцией ScanImg приложен отдельно. Его можно либо поместить в твой скрипт, либо сделать include. Если по каким-то причинам не хочешь использовать его, сходи на CPAN и поищи модули работы с графикой там.
Примечание: некоторые комментарии оказались перенесенными. На самом деле они должны быть написаны либо на той же строчке, либо в их начале нужно тоже поставить #
И последнее: читай правила форума! На почту я никому ничего не высылаю принципиально. Если надо — пользуйся стандартными функциями форума. Если не можешь — просматривай вручную. Прикрепленный файл (scanimg.cgi, 4367 байт, скачан: 465 раз)
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
|