4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
 Откуда: Москва Всего сообщений: 3031 Рейтинг пользователя: 75 Дата регистрации на форуме: 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 байт, скачан: 378 раз)
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
|