Schrift
[thread]12516[/thread]

Perl-Skript Portierung: IIS5 -> IIS6



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Gast Gast
 2008-09-18 19:00
#114779 #114779
Wir sind auf der Suche nach einem Perl-Programmierer, der ein kleines Perl-Programm für uns validiert. Das Skript lief unter IIS 5 + ActiveState Perl 5.22 ohne Probleme unter IIS6 + AS Perl 5.22 funktioniert das Skript nicht mehr korrekt. Das Skript ist nicht sehr komplex, ca. 30 Zeilen.

Wir suchen jemand, der sich das mal ansehen kann. Hätten daran jemand Interesse?
Gast Gast
 2008-09-18 20:42
#114781 #114781
Nicht mal einen Kontaktadresse?
lichtkind
 2008-09-19 02:19
#114784 #114784
User since
2004-03-22
5681 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
ich vermute AS bedeutet activestate, aber ein perl 5.22 kenn ich wirklich nicht.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
GwenDragon
 2008-09-19 11:34
#114788 #114788
User since
2005-01-17
14608 Artikel
Admin1
[Homepage]
user image
Gast+2008-09-18 17:00:49--
Wir suchen jemand, der sich das mal ansehen kann. Hätten daran jemand Interesse?

Ansehen können wir Programmierer-/innen viel. Auch gegen gewisse Stundensätze.
Es ist vielleicht gemeint:
Testen?
Oder Skript reparieren?
Oder Skript neu schreiben?
Oder Server richtig konfigurieren?

Wissen die Auftraggeber vielleicht gar nicht selbst?

Anonym und ohne Kontaktadresse?
Was ist denn das für eine Firma? Oder Privat?

Und mit solchen unzureichenden Informationen?
Es gibt z. B. kein Perl 5.22.
Aber ein Uralt-Perl 5.005_03 Build 522 von ca. 1999.

Schade. Aber anonyme Kunden finde ich seltsam.
Gast Gast
 2008-09-19 13:07
#114789 #114789
So hier folgt die die Kontaktadresse:

oliver.gimbel@knowledgepark-ag.de

Bei der Perl-Version handelt es sich um den ActiveState Perl Build 522 von 1999. Das zu prüfende Perl-Skript wurde auch schon mit der Perl Version 5.8 getestet, dabei zeigt sich das gleiche fehlerhafte Verhalten.

Er ist nicht klar, ob es am Perl-Skript liegt oder am IIS6.

IIS5:
Das Perl-Skript generiert bei der Ausführung unter IIS5 aus einem Web-Request eine Datei, z.B. namens "h0001.in" Während diese Datei geöffnet ist heisst sie "h0001.tmp"

IIS6:
Bei Ausführung der Perl-Skripts unter IIS6 kommt das Skript nicht bis zur Benennung "h0001.in", sondern es wird nur eine "h0001.tmp" erzeugt.

An dieser Stelle benötigen wir Unterstützung, da nicht klar ist in welchem Bereich (IIS6 oder Perl + IIS6) das Problem liegt?

Der Aufwand wird natürlich gegen Rechnung vergütet.
GwenDragon
 2008-09-19 18:03
#114795 #114795
User since
2005-01-17
14608 Artikel
Admin1
[Homepage]
user image
Danke für die weiteren Informationen.
Gast Gast
 2008-09-19 19:56
#114797 #114797
Hallo, anbei unser Skript in drei Teilen.

Teil 1/3:

Code (perl): (dl )
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$path="e:\\var\\www\\lars\\io\\";
$TimeOutMinutes   =  5;
$debug = 0;
$filenr =  0;
$NewFilename="";
$ext="";

binmode STDIN;
srand(time()^($$+($$<<15)));

$user_input = read(STDIN, $Buffer, $ENV{CONTENT_LENGTH});

open DBG, ">$path" . "debug.trc"        if $debug;
print DBG $Buffer                       if $debug;
close(DBG)                                                                      if $debug;


$exists = 1;
$last = int(rand(99999)) + 1;

while($exists != 0)
{
        $last = int(rand(99999)) + 1;
        $name = $path."h".$last.".in";
        if(open(TESTDAT, $name)  !=  0 )
        {
                close(TESTDAT);
                $exists = 1;
        }
        else
                {
                        if ( open(TESTDAT,$path."h".$last.".tmp") != 0 )
                                {
                                        close(TESTDAT);
                                        $exists = 1;
                                }
                        else
                                {
                                        open(LARSOUT, ">".$path."h".$last.".tmp");
                                        $exists = 0;
                                }
                }
}
Gast Gast
 2008-09-19 19:58
#114798 #114798
Teil 2/3:
Code (perl): (dl )
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
open DBG, ">$path" . "debug.log"                                          if $debug;
binmode DBG;
print DBG "content_length:$ENV{CONTENT_LENGTH}\n" if $debug;

if( $Buffer =~ /^-----------------------------\d{10,20}/ )
{
        print DBG $Buffer if $debug;

        print DBG "Blockid.:$&\n"                                                                 if $debug;

        $CountLines = 1;
        
        @Blocks = split( /$&/, $Buffer );
        undef   $Buffer;
        $Buffer="ANSI2ASCII" ;

        foreach $Block (@Blocks) 
        {
#               print DBG "Blocknr.:" . ++$BlockNr . "\n" if $debug;

                @Lines = split( /\015\012/, $Block );
                shift @Lines;
                foreach $Line (@Lines) 
                { 
#                       print DBG "Linenr.:" . ++$LineNr . "\n" if $debug;

                        if( $Line =~ /.*Content-Disposition: .*name="([^"]+)"; filename="(.*)"/ )
                        {
                                $Fieldname = &Ansii2Ascii( $1 );
                                $Filename  = &Ansii2Ascii( $2 );
                                $Filename  =~ s/.*\\([^\\]+)$/$1/;
                                $Filename  =~ s/\.(...).*$/\.$1/;
                                
#                               print DBG "File.:$Filename\n" if $debug;

                                if (  $Filename  )
                                        {
                                                $filenr = $filenr + 1;
                                                ($ext=$Filename)=~s/.*\.(.*)/\.$1/ if $Filename=~/\..+/;

                                                $NewFilename = "f".$filenr.$last.$ext;
                                        }
                                else
                                        {
                                                $NewFilename = "";
                                        }

                                $Buffer .= "&_org$Fieldname=$Filename" if $Filename;
                                $Buffer .= "&$Fieldname=$NewFilename";

                                last if ! ($Block =~ s/[\s\S]*Content-Type:[^\n]*\n//); 

                                chop $Block; chop $Block;

                                open FILEOUT, ">$path$NewFilename";
                                binmode FILEOUT;
                                print FILEOUT substr( $Block, $EmptyLines * 2 );
                                close FILEOUT;
                                
                                last;
                        }
                        elsif( $Line =~ /Content-Disposition: form-data; name="(.+)"/ )
                        {
                                $name                   = $1;
                                $Buffer                   .= "&" . &Ansii2Ascii( $1 ) . "=";
                                $FldEmptyLines = 0;
#                               print DBG "Varname:$1\n" if $debug;
                        }
Gast Gast
 2008-09-19 19:58
#114799 #114799
Teil 3/3:
Code (perl): (dl )
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
                        elsif( $Line =~ /\S+/ )
                        {
                                if( $name )
                                {
                                        $FldEmptyLines -= $EmptyLines;
                                }
                                else
                                {
                                        $FldEmptyLines++;
                                }
                                undef $name;

                                $Buffer .= '%0D%0A' x $FldEmptyLines;
                                $FldEmptyLines = 0;

                                $Buffer .= &Ansii2Ascii( $Line );
                                print DBG "Varvalue:$Line\n" if $debug;
                                $CountLines = 0;
                        }
                        else
                        {
                                $CountLines &&  $EmptyLines++;
                                $FldEmptyLines++;
                        }
                }
        }
        $Buffer =~ s/^&//;
}

close DBG if $debug;

unlink $path."h".$last.".tmp";
unlink $path."h".$last.".out";


$name = $path."h".$last.".tmp";
print LARSOUT $Buffer;
close(LARSOUT);
rename( $name, $path."h".$last.".in" );

&Timer( 'Start' );

$gefunden = 0;

while($gefunden != 1)
{
        $name = $path."h".$last.".out";

        if(open(NEUDAT, "<".$name) != 0)
        {
                $gefunden = 1;
        }
        else
        {
                exit if &Timer( 'Test' );
                sleep 1;
        }
}

print "Content-type: text/html\n\n";

while(<NEUDAT>)
{
        print;
}
close(NEUDAT);

$name = $path."h".$last.".out";
unlink $name;

sub Ansii2Ascii
{
        local( $wert ) = @_;
#       $wert =~ s/(.)/$map{$wert} || $wert /ge;

        $wert =~ s/\&/%26/g;

        return $wert;
}

sub Timer
{
        local( $What ) = @_;

        if( $What eq 'Start' )
        {
                $StartTime = time();
                return 0;
        }
        elsif( $What eq 'Test' )
        {
                return ( time() - $StartTime ) > $TimeOutMinutes * 60;
        }
}
Gast Gast
 2008-09-19 22:06
#114800 #114800
Was macht das Script genau?

Soviel verstehe ich:
Ließt eine http-post Anfrage von STDIN, sucht darin die Felder raus baut daraus einen String und speichert ihn. Dann wartet es bis es eine Datei gibt und gibt sie aus.
Das mit dem temporären Dateien habe ich kapiert.
Aber ich verstehe nicht so ganz was genau aus der "STDIN" gelesen und umgewandelt wird.
mit "CGI" ließe sich das ganze viel kürzer lösen, denke ich.


Das Script muss ja von anno dazumal sein. Allein das "local( $What ) = @_;" ist ja seltsam.
Dann noch das seltsame testen ob eine Datei vorhanden ist. Unter Unixsystemen könnte man das wohl so machen (obwohl es mit "-e" viel einfacher ist), aber unter Windows gibt es definitiv Probleme wenn jemand anderes die Datei schon geöffnet hat, denn dann glaubt das Script sie wäre nicht existent.
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2008-09-18 19:00.