Forum Webscript.Ru
Программирование => Perl => Тема начата: Realtor from Moscow от 22 Июля 2001, 23:50:35
-
Почему Apache не хочет заливать файлы из формы ???
Вроде делаю все правильно:
-
Ты лучше скажи как скрипт их принимает? (код)
-
2Lodevar: Ну право, не уместный вопрос. Но для примера приведу полный текст одного из скриптов.
#!/usr/bin/perl
# загрузка файла аренды
require "../my_html_lib.pl"; # настроечные данные
require "arenda_cfg.pl";
$datafile="arenda.dat";
$datadir=".";
&html_begin;
if ($ENV{\'REQUEST_METHOD\'} eq \'GET\') {$query=$ENV{\'QUERY_STRING\'};}
else {sysread(STDIN,$query,$ENV{\'CONTENT_LENGTH\'});}
if ($query eq \'\') {
print<
Загрузка файла данных аренды
Загрузка файла данных аренды
ENDHTML
;
} # end form
else {
if ($ENV{\'CONTENT_TYPE\'} =~/multipart/) {
($bound)=($ENV{\'CONTENT_TYPE\'} =~/boundary=(\\S+)/);
@parts=split (/
--$bound(-)*/,$query);
@parts=grep($_ ne \'\',@parts);
foreach (@parts) {
($header, $body)=split(/
\\s*
/,$_,2);
($name)=(/name=\\"([^\\"]*)\\"/);
($filename)=(/filename=\\"([^\\"]*)\\"/);
if ($name eq \'userdata\') {$userdata=$body; $userdatafilename=$filename} # end if
} # end foreach
} #end if
# загрузка
open (F, ">$datadir/$datafile");
binmode F;
print F $userdata;
close(F);
print<
Загрузка файла данных аренды
Загрузка файла данных аренды прошла нормально!
Вернуться к администрированию аренды
ENDHTML
;
} # end else
-
-
Эх Ali ;-)
Скрипт же сам себя вызывает 8-)
-
Realtor from Moscow (23-07-2001 17:39):
2Lodevar: Ну право, не уместный вопрос. Но для примера приведу полный текст одного из скриптов.
Я, конечно, очень рад, что вы привели листинг примера один к одному из книги "CGI-программирование. Учебный курс", написанную господином Павловым А. стр.105-107. (или может вы цитировали того, кто оттуда списал :-))
Но вопрос мой был в том, как скрипт принимает данные из формы, а так же из чего вы поняли, что "что-то не работает".
Кстати, там на 107 странице все расписано давольно прилично.
-
Realtor from Moscow (23-07-2001 23:53):
Эх Ali ;-)
Скрипт же сам себя вызывает 8-)
http://www.w3.org/TR/html4/interact/forms.html#h-17.3
-
Книга Павлова - моя любимая. Даже уже по швам расползлась.
Выше указанный скрипт у хостера работает, а у меня на компе нет!
Вот и интересуюсь, может в Apache чего поковырять.
На локальной машине: файл открывается и записывается байтов 500-800. Специально проверял: взял кучу готовых скриптов на CGI.ru и WebScript.ru. Ни один не заливает на локальной машине. Реакция одинаковая ???
-
Ну что ???
Я смотрю, что никто не знает ???
-
Realtor from Moscow (01-08-2001 23:35):
Ну что ???
Я смотрю, что никто не знает ???
Не знает - проблема локальная, и решать ее Вам.:) У меня, например, на моей машине upload работает без проблем.
Скорее, IMHO, настройки Apache.:)
-
Chs (02-08-2001 10:22):
Скорее, IMHO, настройки Apache.:)
Вопрос-то как раз в этом и был! Какие настройки, конкретнее?!?!
-
lodevar (02-08-2001 11:03):
Вопрос-то как раз в этом и был! Какие настройки, конкретнее?!?!
:)) Я знаю, что если Apache настроен в соответствии с много раз упоминаемым в суе http://userguide.webservis.ru/homeserver-apache-forprint.shtml все работает.
Отличия от работающей конфигурации может поискать у себя Realter, а потом всем сообщить.:))
Могу посмотреть так же на его конфигурацию Apache и сказать - работает она у меня или нет.:)
-
Как раз на вышеупоминаемой ссылке написано, как не надо настраивать Апач.
У меня все полностью копирует Unix. И что писать в httpd.conf и mime.types я знаю побольше.
Вопрос был по поводу того, что может есть что между строк, нигде не упоминаемое. А на webservis.ru начинающих отправляйте >(
-
По ссылке информация о настройке апача исключительно под Windows!
-
Realtor from Moscow (02-08-2001 21:58):
У меня все полностью копирует Unix.
Как показывает Ваш же опыт не все.:)
А на webservis.ru начинающих отправляйте >(
Ну да, "круче нас только яйца" (с) не мой.
Если считаете себя продвинутым, то в состоянии разобраться сами.
Или присылайте httpd.conf - посмотрю.
-
2Chs: выслал
-
Realtor from Moscow (02-08-2001 22:45):
2Chs: выслал
Это не Apache. C этой конфигурацией у меня все работает - upload проходит нормально.
Хотя... Может версию Apache поновее поставить (у меня 1.3.14)?
-
Слушай мысль ;-)
Хотя я специально поставил 1.3.6, как менее глючный.
А какой сейчас последний. У хостера стоит, кажется, 1.3.14
-
2Chs: скачал 1.3.20.
Как мнение? Можно ставить?
8)
-
Realtor from Moscow (03-08-2001 02:50):
2Chs: скачал 1.3.20.
Как мнение? Можно ставить?
8)
Не знаю - не пробовал, наверное можно.:):))
-
А все же, в какой версии надо выставлять CharsetRecodeMultipartForms Off в .htaccess ???
Узрел упоминание подобных проблем у А.Лебедева на http://www.parser.ru
И кстати, о "круче только ...". Я не крут. Просто у меня комп в полном доступе был с 86 года прошлого века. Я еще помню, что такое БЭСМ-6 (на водяном охлаждении) 8) В свое время учился в МЭИ на АВТФ (фак. автоматики и выч. техники). На Unix сидел с 88 года. Ну просто мне везло все время (типа как в 88 году попал в мои загребущие руки на 2 года ibm ps/2 model 50 и т.д.).
Я не говорю, что я крут. Просто глупость какая-то с заливкой файлов. Ну не идет ???
Щас это больше хобби, чем что либо. На жизнь зарабатываю юр. услугами. Хотя за июнь сайт принес 100 у.е.. Мало, а приятно. 10 ящиков пива, в пересчете (ну прям как в студенческие времена: 40 рэ стипендия - 4 ящика пива). 8-)
-
Realtor from Moscow (03-08-2001 05:52):
А все же, в какой версии надо выставлять CharsetRecodeMultipartForms Off в .htaccess ???
Это для русского апача, когда при upload файл создается такого же размера, но кривой - перекодированный.
-
Попробуй поставить перед чтением STDIN binmode (STDIN);
Я столкнулся с такой проблемой при upload\\\'е картинок (на Win2k + Apache), переключение в binmode помогло
-
О! У меня таже фигня была!
Попробуй этот код, на моей машине кроме него больше ни чё не аплоудит.
########## HTML #############
#############################
######## upload.cgi #########
#!/usr/bin/perl
# Куда загружать файл
$basedir = \\"f:\\\\\\";
# Позволить загружать все типы файлов? yes/no (в нижнем регистре)
$allowall = \\"yes\\";
# Укажите файлы каких типов можно загружать на сервер.
# (Будет использываться если в предыдущем параметре указанно \\\'no\\\').
$theext = \\".gif\\";
# Страница на которую произойдет переход по окончании загрузки файла
$page = \\"page.html\\";
use CGI;
$onnum = 1;
while ($onnum != 11) {
my $req = new CGI;
my $file = $req->param(\\"FILE$onnum\\");
if ($file ne \\"\\") {
my $fileName = $file;
$fileName =~ s!^.*(\\\\\\\\|\\\\/)!!;
$newmain = $fileName;
if ($allowall ne \\"yes\\") {
if (lc(substr($newmain,length($newmain) - 4,4)) ne $theext){
$filenotgood = \\"yes\\";
}
}
if ($filenotgood ne \\"yes\\") {
open (OUTFILE, \\">$basedir/$fileName\\");
print \\"$basedir/$fileName
\\";
while (my $bytesread = read($file, my $buffer, 1024)) {
print OUTFILE $buffer;
}
close (OUTFILE);
}
}
$onnum++;
}
print \\"Location:$page\\\\n\\\\n\\";
##############################
-
Я уже забыл об этой теме. Спасибо Ilya. Сыплю пепел на свою голову и начинаю рвать бороду :P Забыл про буферизацию :( Сейчас сделаю :P
-
Сыплю пепел на свою голову и начинаю рвать бороду :P
Смотри всю не вырви, а то при следующей встрече не узнаем. ;)