Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Не работает закачка картинок


Автор: rcdimon 4.4.2005, 13:52
Почему не ясно. ВОт кодец.

Код

#!/usr/bin/perl

use CGI qw(:all);

###########################################################################
# 
# 
#                                                                         #
########################################################################### 

##############################################################################
##        Объявление некоторых констант                    ##

    $root_path    =    "../cgi-bin";
    $docs_path    =    "../www";


##############################################################################

dbmopen(%a, "$docs_path/hash/admin_pass",0644);
dbmopen(%gal, "$docs_path/hash/galery",0644);


print header( -charset => 'Windows-1251' );


$login_        =    param('login');
$pass_        =    param('pass');
$razdel_    =    param('razdel');
$first_        =    param('first');
$photo_        =    param('photo');










open(MF,"$docs_path/pages/contact_info.txt");
    @contact_info = <MF>;
close (MF);



if ($a{$login_} eq $pass_ and $login_ ne "" ){

            
if ($photo_ ne ""){##############################

opendir MD,"$docs_path/teh/galery/";
    @list = readdir MD;

    foreach $temp (@list){
        if ($temp ne "." and $temp ne ".."){
            
        }
    }


closedir MD;

open (MFD, "$docs_path/teh/galery/$razdel_/number.txt");
    $name_ = <MFD>;
close (MFD);

if ($name_ eq ""){$name_ = "1";}

open (MFD, ">$docs_path/teh/galery/$razdel_/number.txt");
    $name_++;
    print MFD "$name_";
close (MFD);


    $downpath = "$docs_path/teh/galery/$razdel_/"; 
    $file_name_ = "$name_.jpg";
    $in = param('photo');

print "$in";

    open(OUT,">$downpath/1.jpg"); 
    binmode(OUT); 
    while (<$in>) {print OUT $_;} 
    close(OUT); 
} else {
#########################################333

        open(MF,"$docs_path/pages/admin_design1.txt");while (defined($te=<MF>)){
            $te =~ s/<!--admin_data-->/pass=$pass_&login=$login_/gim;
            $te =~ s/<!--img_path-->/\//gim;
            $te =~ s/<!--contact_info-->/@contact_info/gim;
            $te =~ s/<!--news-->/news/gim;
            $te =~ s/<!--opros-->/opros/gim;
        print $te;}close (MF);

            $title = "Закачка фотографии";
            $letter= "<center>Фотография не была загружена на сервер</center>";
            
        open(MF,"$docs_path/pages/msg.txt");while (defined($te=<MF>)){
            $te =~ s/<!--img_path-->/\//gim;
            $te =~ s/<!--data-->/$letter/gim;
            $te =~ s/<!--title-->/$title/gim;
        print $te;}close (MF);

            print "\<html\>\<head\>\<meta http-equiv=\"refresh\" content=\"4\; url=admin.cgi?login=$login_&pass=$pass_&page=5\"\>\<\/head\>\<\/html\>";

        open(MF,"$docs_path/pages/design2.txt");while (defined($te=<MF>)){
            $te =~ s/<!--img_path-->/\//gim;
            $te =~ s/<!--contact_info-->/@contact_info/gim;
            $te =~ s/<!--news-->/news/gim;
            $te =~ s/<!--opros-->/opros/gim;
        print $te;}close (MF);
exit(0);
}
                #############################

            
        open(MF,"$docs_path/pages/admin_design1.txt");while (defined($te=<MF>)){
            $te =~ s/<!--admin_data-->/pass=$pass_&login=$login_/gim;
            $te =~ s/<!--img_path-->/\//gim;
            $te =~ s/<!--contact_info-->/@contact_info/gim;
            $te =~ s/<!--news-->/news/gim;
            $te =~ s/<!--opros-->/opros/gim;
        print $te;}close (MF);

            $title = "Закачка фотографии";
            $letter= "<center>Фотография успешно закачена</center>";
            
        open(MF,"$docs_path/pages/msg.txt");while (defined($te=<MF>)){
            $te =~ s/<!--img_path-->/\//gim;
            $te =~ s/<!--data-->/$letter/gim;
            $te =~ s/<!--title-->/$title/gim;
        print $te;}close (MF);
            print "\<html\>\<head\>\<meta http-equiv=\"refresh\" content=\"2\; url=admin.cgi?login=$login_&pass=$pass_&page=5\"\>\<\/head\>\<\/html\>";

        open(MF,"$docs_path/pages/design2.txt");while (defined($te=<MF>)){
            $te =~ s/<!--img_path-->/\//gim;
            $te =~ s/<!--contact_info-->/@contact_info/gim;
            $te =~ s/<!--news-->/news/gim;
            $te =~ s/<!--opros-->/opros/gim;
        print $te;}close (MF);

} else {

        open(MF,"$docs_path/pages/admin_design1.txt");while (defined($te=<MF>)){
            $te =~ s/<!--admin_data-->/pass=$pass_&login=$login_/gim;
            $te =~ s/<!--img_path-->/\//gim;
            $te =~ s/<!--contact_info-->/@contact_info/gim;
            $te =~ s/<!--news-->/news/gim;
            $te =~ s/<!--opros-->/opros/gim;
        print $te;}close (MF);
            
            print "Неверная пара логин- пароль";

        open(MF,"$docs_path/pages/design2.txt");while (defined($te=<MF>)){
            $te =~ s/<!--img_path-->/\//gim;
            $te =~ s/<!--contact_info-->/@contact_info/gim;
            $te =~ s/<!--news-->/news/gim;
            $te =~ s/<!--opros-->/opros/gim;
        print $te;}close (MF);
}


smile

Автор: Phoinix 4.4.2005, 14:11
rcdimon

Честно говоря, мне тоже... ковыряться в коде не особо охота, тем более что этого не достаточно

Что в неправильно закаченном файле? Файл то создается...
Что в логах ошибок?
Какой enctype формы?

Автор: rcdimon 5.4.2005, 11:26
Создается файл с нужным именем, но пустой.

Автор: korob2001 5.4.2005, 11:57
Код

while ( read( $in, my  $buff, 1024)  ) {print OUT $buff;} 

А ещё лучше так:
Код

print OUT $buff while ( read( $in, my  $buff, 1024)  );

Удачи.

Автор: Phoinix 5.4.2005, 14:13
korob2001

Это, боюсь не поможет. И код у него правильный, хоть и "корявый"

Остается одно:

rcdimon

На первый вопрос ты ответил, а на остальные два? особенно на третий:

Цитата(Phoinix @ 4.4.2005, 14:11)
Какой enctype формы?


Ибо ошибка наверняка кроется в нем...

Автор: korob2001 5.4.2005, 16:54
Цитата

Это, боюсь не поможет. И код у него правильный, хоть и "корявый"

Не поможет, но бинарник лучше читать частями, да и не только бинарник. smile Код, правда какой-то странный. smile

Автор: rcdimon 7.4.2005, 11:50
Люди.... Не бейте... Простите плз. Извиняюсь. Я дурак я знаю. Но руки из жопы НЕ РАСТУТ. Так что не говорите smile

enctype- Все тут. Оказывается я когда изменял страничку зачем то удалил этот параметр. Пиво с меня причетается.

Цитата
Это, боюсь не поможет. И код у него правильный, хоть и "корявый"


Я глубоко убежден, что программист обязан писать не только работающие программы, но и крассивые. Поэтому мне очень интересно выслушать в чем именно по вашему мнению состоит корявость моего кода. Если это выходит за рамки данного топика, то прошу не полениться и написать мне либо в приват либо на мыло neweb-design<Собака>yandex.ru

Заранее благодарен. smile

Автор: korob2001 8.4.2005, 15:58
rcdimon - хорошим стилем считается не красивый код, а максимально понятный для чтения. Хотя это конечно же твоё дело, как хочешь, так и пиши. Просто может случиться так, что когда-нить тебе прийдётся работать в группе программистов, вот тут-то они и будут разгадывать красоту твоего кода.

Например:
Зачем писать while после точки с запятой???
Почему не читаешь файл частями???
Зачем читать содержимое всего каталога в массив, а потом циклически проходить по всему массиву???
Обясни назначение этого цикла:
Код

foreach $temp (@list){
        if ($temp ne "." and $temp ne "..") {
            
        }
}

Что он делает???

ЗЫ: Только не подумай, что я горел желанием придраться к тебе или твоему коду. Ты попросил, я ответил.

Автор: rcdimon 12.4.2005, 18:45
За ответ спасибо.

В этом коде (про который ты спросил) есть массв. В нем список файлов и папок каталога. На самом деле в этом каталоге будут только файлы, другова там храниться не будет. Мне нужно обработать все файлы. На в списке есть еще каталоги с именами . и .. они мне естественно не нужны. Вот я их и выкидываю.

А по поводу while- БЫВАЕТ! smile

Автор: korob2001 13.4.2005, 06:47
Цитата

В этом коде (про который ты спросил) есть массв. В нем список файлов и папок каталога. На самом деле в этом каталоге будут только файлы, другова там храниться не будет. Мне нужно обработать все файлы. На в списке есть еще каталоги с именами . и .. они мне естественно не нужны.

Читай из каталога сразу то, что нужно и отбрасывай, что не нужно. Замени этот код:
Код

opendir MD,"$docs_path/teh/galery/";
    @list = readdir MD;

    foreach $temp (@list){
        if ($temp ne "." and $temp ne ".."){
            
        }
    }
closedir MD;

на такой и буде уже легче:
Код

my @list;
opendir MD,"$docs_path/teh/galery/" or die $!; #Всегда делай проверку
  while ( my $temp = readdir MD ) {
              next if /^\.{1,2}$/; # Пропустим текущий и родительский каталог
              push( @list, $temp );
   }
closedir MD;

Если тебе нужно просто вывести или обратотать каждый файл, то может не стоит читать содержимое всего каталога в память??? Я просто так и не понял, где используется массив @list.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)