Автор Тема: Закачка. Скрипт прилагается.  (Прочитано 7318 раз)

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

Оффлайн Yuraz

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 111
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.kirov.ru/~yura
Закачка. Скрипт прилагается.
« : 19 Июля 2002, 09:14:13 »
Всех приветствую!
Встретился с такой проблемой, в первый раз решил использовать закачку файлов на сайте, сделал все по книге CGI-программирование, Павлова.
Форма на экран выводится, после заполнения полей и указания файла, нажимаю кнопку отправить. Браузер начинает отсчитывать секунды и минуты, и ни чего. Подскажите, в чём проблема?
Пользуюсь W2K, Apache 3.12, Perl, на локалхосте.


#!/usr/local/bin/perl
#fileput.pl
#############
#############
$datafile="fotos.txt"; #
$fotodir="."; #
$cgi = "http://127.0.0.8/cgi-bin/fileput.pl";
#############
#
#############
print "Content-type: text/html\\n\\n"; #
if($ENV{\'REQUEST_METHOD\'} eq \'GET\'){$query=$ENV{\'QUERY_STRING\'};}
else{sysread(STDIN,$query,$ENV{\'CONTENT_LENGTH\'});}
if($query eq \'\'){
print <











Èìÿ
Ìûëî
Êîìåíòàðèé
Ôîòî




FORM
}
else{
if($ENV{\'CONTENT_TYPE\'}=~/multipart/){
  ($bound)=($ENV{\'CONTENT_TYPE\'}=~/boundary=(\\S+)/);
  @parts=split(/\\n--$bound(-)*/,$query);
  @parts=grep($_ ne \'\' ,@parts);
  foreach(@parts){
    ($header,$body)=split(/\\n\\s*\\n/,$_,2);
    ($name)=(/name=\\"([^\\"]*)\\"/);
    $body=~s/\\n$//;
    $body=~s/\\r$//;
    ($filename)=(/filename\\"([^\\"]*)\\"/);
    if($name eq \'username\'){$username=$body;}
    if($name eq \'useremail\'){$useremail=$body;}
    if($name eq \'usercomment\'){$usercomment=$body;}
    if($name eq \'userfoto\'){$userfoto=$body;$userfilename=$filename;}
    }
  }
else{}
$userfilename1=$userfilename;
$filedup=0;
while(-e "$fotodir/$userfilename1"){
  $userfilename1="$filedup_$userfilename";
  $filedup++;
  }
open(F,">$fotodir/$userfilename1");
print F $userfoto;
close(F);
open(DATA,">>$datafile");
print DATA "$username::$useremail::$userfilename1::$usercomment\\n";
close(DATA);
print "";
print "!!!!!!!!!!!!!!!!!!!!!!";
print "";
}

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Закачка. Скрипт прилагается.
« Ответ #1 : 19 Июля 2002, 09:27:10 »
Фак смотрим, да?
Там есть работающий пример.

P.S.: И каждый раз находиться кто-то, кто пытается сделать разбор параметров ручками. Ээээ...надоели....
2B OR NOT 2B = FF

Оффлайн Yuraz

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 111
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.kirov.ru/~yura
Закачка. Скрипт прилагается.
« Ответ #2 : 19 Июля 2002, 09:31:34 »
Да, забыл указать, после Submit, Apache подвисает, комп работает под 100%, пока Apache принудительно не закроешь, так и будет под 100% висеть. В логах Apache ничего не пишет.

PS: Может у кого есть другой примитив скрипта этой же реализации?

Оффлайн Yuraz

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 111
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.kirov.ru/~yura
Закачка. Скрипт прилагается.
« Ответ #3 : 19 Июля 2002, 09:32:46 »
Цитировать
Фак смотрим, да?
Там есть работающий пример.

Сорри, сейчас смотрю.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Закачка. Скрипт прилагается.
« Ответ #4 : 19 Июля 2002, 10:33:37 »
Цитировать
Да, забыл указать, после Submit, Apache подвисает, комп работает под 100%, пока Apache принудительно не закроешь, так и будет под 100% висеть. В логах Apache ничего не пишет.

PS: Может у кого есть другой примитив скрипта этой же реализации?

Это ещё что значит? После выполнения скрипта Апач перезапускать надо? В чем проблема может быть?

Оффлайн Yuraz

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 111
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.kirov.ru/~yura
Закачка. Скрипт прилагается.
« Ответ #5 : 19 Июля 2002, 11:04:39 »
use strict;
use Fcntl;

Хорош пример, ничего не скажешь.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Закачка. Скрипт прилагается.
« Ответ #6 : 19 Июля 2002, 12:43:46 »
А вообще, без модулей, как закачка реализуется? Откуда данные файла считываются? Из STDIN читаются?
Ни у кого нет работающего примера?
« Последнее редактирование: 19 Июля 2002, 12:51:28 от Evgeny »

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Закачка. Скрипт прилагается.
« Ответ #7 : 19 Июля 2002, 13:10:54 »
Цитировать
Откуда данные файла считываются? Из STDIN читаются?
А модуль посмотреть? :)
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Закачка. Скрипт прилагается.
« Ответ #8 : 19 Июля 2002, 13:12:19 »
Цитировать
Хорош пример, ничего не скажешь.

Сарказм? Напрасно.
The documentations is your friend

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Закачка. Скрипт прилагается.
« Ответ #9 : 19 Июля 2002, 14:55:42 »
Цитировать
А модуль посмотреть?

А подсказать? ;)

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Закачка. Скрипт прилагается.
« Ответ #10 : 19 Июля 2002, 15:15:56 »
Цитировать
А подсказать?

Предлагаешь мне его поковырять? :)
The documentations is your friend

Оффлайн Yuraz

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 111
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.kirov.ru/~yura
Закачка. Скрипт прилагается.
« Ответ #11 : 19 Июля 2002, 15:56:04 »
Цитировать
Сарказм? Напрасно.

Не хочется инсталировать различные модули. Хотя да, с этими модулями код уж очень простой в факе.
Вопрос, почему ж мой то не пашет, из книги Павлова? Набрал вроде один к одному, 500 ошибок не выдаёт. Может дело в
 

этой строке, не правильно указал ссылку на скрипт, пробовал всяко, тогда как правильно....

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Закачка. Скрипт прилагается.
« Ответ #12 : 19 Июля 2002, 16:01:16 »
Цитировать
Не хочется инсталировать различные модули.

Сложно их вырезать из стандартной поставки Perl...
Цитировать
Вопрос, почему ж мой то не пашет, из книги Павлова?

Это вопрос, вероятно, к Павлову. :)
The documentations is your friend

  • Гость
Закачка. Скрипт прилагается.
« Ответ #13 : 22 Июля 2002, 20:41:46 »
Цитировать
Вопрос, почему ж мой то не пашет, из книги Павлова?
//quote]
Ну давайте начнем обсуждать правильно ли в книге Павлова сделан разбор multpart/form-data.:)
Если очень интересно посмотри как сделано тоже самое в CGI.

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Закачка. Скрипт прилагается.
« Ответ #14 : 22 Июля 2002, 21:49:39 »
Короче говоря, проанализировав твой(Павлова) код и симптомы Апач, я пришел к выводу, что баг в этих местах:
...
foreach(@parts){
($header,$body)=split(/\\n\\s*\\n/,$_,2);
($name)=(/name=\\"([^\\"]*)\\"/);  - - - - - лажа
$body=~s/\\n$//;
$body=~s/\\r$//;
($filename)=(/filename\\"([^\\"]*)\\"/); - - - - - лажа
...

попробуй ($name) = ($header =~ /name=\\"?([^"\\]*\\"/);
($filename) = ($header =~ /filename=\\"?([^"\\]*\\"/) соответственно.

Может я и ошибаюсь, но в любом случае используй хотя бы -w.
А вот в конструкции
...
while(-e "$fotodir/$userfilename1"){
$userfilename1="$filedup_$userfilename"; - - - полная лажа
$filedup++;
}
...
правильно будет $userfilename1="$filedup\\_$userfilename";
тут ошибка на 100%, потому как "$filedup_$userfilename" интерпретируеться как "$filedup_"+"$userfilename". Первое у нас - андеф, соответственно мы получаем замкнутый цыкл - потому Апач и виснет.
На первый взгляд болше топорных ошыбок я не встретил.
Удачи!

 

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