Автор Тема: Помогите!!!!!  (Прочитано 2284 раз)

0 Пользователей и 1 Гость просматривают эту тему.

  • Гость
Помогите!!!!!
« : 08 Февраля 2002, 17:06:51 »
Ребята.... нужен скрипт аплоада на pl
Чтоб ещё не бил файлы...
Московским могу пиво поставить
confidens@omen.ru

  • Гость
Помогите!!!!!
« Ответ #1 : 08 Февраля 2002, 17:22:00 »
а не московским ??? ;)))
Подсказка: см. ниже по форуму, там куча сабжей по эту тему.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Помогите!!!!!
« Ответ #2 : 08 Февраля 2002, 17:25:00 »
Пиво я люблю, но вот с upload уже задолбали.

perldoc CGI  в части парам, если этого недостаточно то поискать по форуму - обсуждалось неоднократно.
2B OR NOT 2B = FF

  • Гость
Помогите!!!!!
« Ответ #3 : 08 Февраля 2002, 17:29:41 »
Дык я в перле не бум бум.... мне надо чтоб как малому ребёнку - то есть написать готовый

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Помогите!!!!!
« Ответ #4 : 08 Февраля 2002, 17:52:44 »
Я думаю NAS не обидиться. Пиво - ему:

#!/usr/bin/perl                              # используйте -T для CGI-скриптов
$SIG{ALRM} = sub { die "$0 timed out" };     # эти 2 строки не работают под
alarm 900;                                   # Windows, но они необязательны
use strict;                                  # спасает от глупых ошибок
use Fcntl;                                   # O_EXCL, O_CREAT и O_WRONLY
use CGI       qw (:standard);                # читайте "perldoc CGI"
use CGI::Carp qw (fatalsToBrowser);          # вывод ошибок к browser-у
$CGI::POST_MAX = 131072;                     # максимальный ввод = 128 KB
my $foto = param (\'foto\');                   # имя файла и одноврем. handle
my $DIR  = \'/home/alex/pics\'                # не забудьте "chmod 777 pics"
my $JS   = "                                   // JavaScript-функция для пред-
                                               // варительной проверки формы
function check (form)
{
    if (form.elements[\'foto\'].value.length < 4)// foto должно быть заполнено
    {
        alert (\'A gde zhe foto?\');             // показать JavaScript-окошко
        form.elements[\'foto\'].select ();       // выделить текст в поле foto
        form.elements[\'foto\'].focus ();        // и прыгнуть туда курсором
        return false;                          // false запретит browser-у
    }                                          // отправлять данные к серверу
    return true;                               // все OK - можно отправлять
}";
print header (-type  => \'text/html; charset=koi8-r\'),
      start_html (-title  => \'МИСС ИHТЕРHЕТ\',    # напечатать заголовок и $JS
                  -script => $JS);
         
# regex внизу проверяет, есть ли .gif или .jp(e)g в конце и кладет имя
# файла в $1
if ($foto !~ /([\\w-]+ \\. (?: gif | jpe?g ))$/ix) #только имя,путь выкидывается
{
    print h1 (\'Отправьте нам фото!\'),            #start_form работать не будет
          start_multipart_form (-onsubmit => \'return check (this)\'),
          filefield (-name => \'foto\'),
          submit (-value => \'Go baby go!\'),      # напечатать форму с кнопкой
          end_form;                              # напечатать
}
# Этот скрипт никому не мешает вводить мусор (например xxxx.gif) в поле foto,
# что приведет к созданию пустых файлов; если это Вас беспокоит, установите
# новую версию CGI.pm и прочтите
# [url]http://stein.cshl.org/WWW/software/CGI/#upload[/url]
elsif (not sysopen FILE, "$DIR/$1", O_EXCL | O_CREAT | O_WRONLY, 0444)
{
    print h1 ("Hе могу создать $DIR/$1: $!"); # ошибка или такой файл уже есть
}
# Портятся файлы при посылке? См. ниже!
else                                           # все в порядке - файл создан
{
    binmode FILE;                              # включить binmode для Windows
    print FILE while (<$foto>);                # и скопировать данные в файл
    close FILE;
    print h1 (\'Сердечное Вам спасибо!\');       # воспитывать как собак Павлова
}
print end_html;                                # напечатать
==========================
Если закачка некоторых файлов происходит с глюками - видимо, файл
перекодируется на лету русским апачем.
Варианты решения:
1.запретите  все  перекодировки  для  скрипта,  который  разбирает FileUpload,
например таким способом:
 
  CharsetDisable On
 
  и делайте перекодировку сами.
2.Используйте директиву CharsetRecodeMultipartForms, которая появилась в PL23,
но  при  этом  вам  все равно  придется перекодировать вручную текстовые части
запросов.  Для этого можно использовать Russian Apache API, доступное в других
модулях или Russian Apache Perl API, доступное из mod_perl.
2B OR NOT 2B = FF

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28