Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10962[/thread]

Von Perl 5.8.7 -> 5.8.8 upload funktioniert nicht mehr

Leser: 2


<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten
Tom
 2007-12-06 02:28
#103490 #103490
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Ich habe bei mir lokal ActivePerl5.8.7.813 deinstalliert und ActivePerl5.8.8.822 installiert, und jetzt funktioniert mein Upload-Script nicht mehr, d.h. die Datei wird nicht mehr hochgeladen.
Es kommt aber keine Fehlermeldung, woran liegt das?
Welches Modul fehlt mir da?

Tom

P.S. Bitte Betreff anpassen -> Von Perl5.8.7->5.8.8 Dateiupload funkt nicht mehr
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
styx-cc
 2007-12-06 10:28
#103495 #103495
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Wie wäre es mit ein wenig Quelltext?
Pörl.
Tom
 2007-12-07 00:08
#103534 #103534
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
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
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/perl -w

use CGI::Carp "fatalsToBrowser";
use CGI qw(:all);
use warnings;
use DBI;
use lib './module';
use HTML::Template;
use FindBin;
use File::Type::WebImages 'mime_type';
use strict;

use vars qw($action $redirect $root_path $prog_lib %lang);

&get_path;

$action = param('action');
my $cgi = CGI->new();
my %params = $cgi->Vars();
#my $path = $root_path . '/yambe/bilder/userpic';
my $path = 'd:/Projekte/YAMBE/Development/2.x/yambe/bilder/userpic';
my $filehandle = $cgi->upload('user_pic');
my $filename = $params{'user_pic'};
#$filename = (split(/[\\\/]/,$filename))[-1];
#$filename =~ s/[^A-Za-z0-9_\.\-]//g;
#$filename =~ s/\\/\//g;

my %Mode = (
    ''                           =>    \&form,
    'upload'                  =>    \&upload_datei,
    );
    
    if($Mode{$action})
     {
         $Mode{$action}->();
     }
     else
     {
       $redirect =  $root_path . "/cgi-bin/yambe/register.cgi";
       my $q = new CGI;
       print $q->redirect($redirect);
     };
     
sub form
{    
my $template = HTML::Template->new(filename => 'upload.tmpl',
                                 path => ["$prog_lib/templates/standard"]);


#Bindet den Header ein.
&header(0);
$template->param(ROOT_PATH => $root_path);
print $template->output;
#Bindet den Footer ein.
&footer(0);
exit;
}

sub upload_datei
{

#Bindet den Header ein.
&header(0);
upload_file($filename,$filehandle,$path);

my $uploaded_file = $path . "\\" . $filename;
                                                           
my $check_file = mime_type($uploaded_file);

if ($check_file eq undef)
{
        ...
}       
else
{
        ...
}       
#Bindet den Footer ein.
&footer(0);
exit;
}


sub upload_file
{
my ($filename,$filehandle,$path) = @_;
       
my $target = $path.'/'.$filename;
if(-e $target){
print "Zieldatei existiert schon!";
exit(0);
}
else{
binmode $filehandle;
open(TARGET,">$target") or die $!;
binmode TARGET;

my ($buffer);
while(read $filehandle,$buffer,1024){
print TARGET $buffer;
}
close TARGET;
print "<h2>Ihre Datei wurde unter $target gespeichert</h2>";
}
}
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
nepos
 2007-12-07 09:55
#103539 #103539
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Bist du dir sicher, dass hier keine Fehlermeldung kommt?
Kann ich mir eigentlich nicht vorstellen...
Tom
 2007-12-07 12:39
#103546 #103546
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
nepos+2007-12-07 08:55:26--
Kann ich mir eigentlich nicht vorstellen...


Wie kommst Du zu dieser Annahme?

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
nepos
 2007-12-07 12:46
#103548 #103548
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Weils eigentlich immer eine Fehlermeldung gibt.
Was benutzt du denn als Webserver? Hast du da schon mal nachgesehen, ob wirklich nix geloggt wird?
Eventuell schon versucht, ein wenig Debug-Meldungen einzubauen, um zu sehen, ob überhaupt was passiert?
Was siehst du im Browser? Sagt der, die Datei wäre korrekt hochgeladen worden?

Warum gibts ausserdem ein upload_file und dann nochmal ein upload_datei?
Und bitte den Code auch mal einrücken, das Lesen ist leider sehr anstrengend. Die Einrückung sieht ein wenig willkürlich aus, wenn sie denn vorhanden ist...
Tom
 2007-12-10 00:47
#103670 #103670
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich teste das ganze Lokal mit dem Webserver Omnihttpd. Habe die Logfiles kontrolliert und da wird nichts verdächtiges gemeldet.

Im Browser sehe ich nur "Ihre Datei wurde unter ... gespeichert" da ist aber nichts.

Ja den Code werde ich noch einrücken, ich mach das meistens erst wenn alles wie gewünscht funktioniert. ;)

Die Sub "upload_file" ist die Sub die letztlich die Datei hochlädt, und da muss irgendwo auch der Fehler sein. Die andere Sub muss ich mal umbenennen.

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Tom
 2007-12-12 02:49
#103750 #103750
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also ich habe das ganze jetzt nochmal überprüft warum das nicht mehr geht, und habe die Stelle gefunden was das Script zum scheitern bringt, aber ich weiß nicht warum.

Wenn ich in dem o.g. Script bei "sub upload_datei" den Code "&header(0);" entferne dann funktioniert es.

"&header(0);" hat folgenden Code:

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
sub header
{
my ($refrerr) = @_;

if ($refrerr eq 'admin')
{
require "../data/session.cgi";
$header = HTML::Template->new(filename => 'header.tmpl',
                                 path => ["$prog_lib/../templates/standard"]);
}
else
{
require "data/session.cgi";
$header = HTML::Template->new(filename => 'header.tmpl',
                                 path => ["$prog_lib/templates/standard"]);
}                                 

my $loggedin;
my $loggedinuser;
my $loggedinuserid;

my $cgi = new CGI;
$sid = $cgi->cookie('YAMBE_SESSID') || $cgi->param('sid');

$header->param(L_TITLE => $lang{title});
$header->param(L_REGISTER => $lang{Register});
$header->param(L_TODAY => $lang{Today});
$header->param(L_CALENDAR => $lang{Calendar});
$header->param(L_MONTHSUMMERY => $lang{Monthsummery});
$header->param(L_SEARCH => $lang{Search});
$header->param(ROOT_PATH => $root_path);

$header->param(U_REGISTER => &add_session($root_path . "/cgi-bin/yambe/register.cgi"));
$header->param(U_TODAY => &add_session($root_path . "/cgi-bin/yambe/event.cgi"));
$header->param(U_CALENDAR => &add_session($root_path . "/cgi-bin/yambe/kalender.cgi"));
$header->param(U_MONTHSUMMERY => &add_session($root_path . "/cgi-bin/yambe/monat.cgi"));
$header->param(U_SEARCH => &add_session($root_path . "/cgi-bin/yambe/search.cgi"));

if (defined ($sid))
{
($loggedin,$loggedinuser,$loggedinuserid) = &init;
}

if ($loggedin != 1)
{
    $header->param(USER_LOGGED_OUT => 1);
    $header->param(L_PROFILE_REGISTER => $lang{Profile_Register});
    $header->param(L_LOGIN => $lang{Login});
    
    $header->param(U_PROFILE_REGISTER => $root_path . "/cgi-bin/yambe/profile.cgi?action=register");
    $header->param(U_LOGIN => $root_path . "/cgi-bin/yambe/login.cgi");
}
else
{
    $header->param(USER_LOGGED_IN => 1);
    $header->param(L_LOGOUT => sprintf($lang{Logout},$loggedinuser));
    $header->param(L_PROFILE => $lang{Profil});
    
    $header->param(U_LOGOUT => $root_path . "/cgi-bin/yambe/login.cgi?action=logout");
    my $test = &add_session($root_path . "/cgi-bin/yambe/profile.cgi");
    $header->param(U_PROFILE =>  $test . "&amp;action=edit&amp;u=$loggedinuserid");
}    



print "Content-Type: text/html\n\n";
print $header->output;

}


Warum funktioniert das auf einmal nicht mehr?

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
GwenDragon
 2007-12-12 11:32
#103755 #103755
User since
2005-01-17
14773 Artikel
Admin1
[Homepage]
user image
mit use CGI qw(:all) importierst du dir alle Methoden in den Namensraum des Hauptprogramms.
Bei CGI gibt es aber schon eine Methode header() und definierst nochmals eine Subroutine namens header();
Damit überschreibst du die von CGI importierte.
Denke ich.

Du solltest nur use CGI; schreiben und dann die Methoden des Moduks CGI über $cgi->Methode aufrufen, also z. B. $cgi->p() o. ä.

Außerdem verlässt du dich darauf, dass in $header immer was gültiges steht? Was ist wenn der Aufruf von HTML::Template fehlschlägt?

Und du verwendest require. Was ist, wenn das fehlschlägt?
pq
 2007-12-12 14:38
#103772 #103772
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
GwenDragon+2007-12-12 10:32:24--
Und du verwendest require. Was ist, wenn das fehlschlägt?

dann beschwert sich perl =)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten



View all threads created 2007-12-06 02:28.