Schrift
[thread]929[/thread]

Dateie speichern: produziert nur 0 Byte Dateien



<< >> 9 Einträge, 1 Seite
smack:
 2007-05-09 15:40
#100 #100
User since
2007-05-08
27 Artikel
BenutzerIn
[default_avatar]
Hallo mit folgenden Script versuche ich Dateien abzuspeichern:
Code: (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
sub bildspeichern {
# gid & file
my $gid = $main::cgi->param('gid');
my $f = $main::cgi->param('Filedata');

share::logge('gid: '.$gid);

my ($kommando, @ruckgabe);

# random filename
my @zeichen = ("a" .. "z","A" .. "Z", 0 .. 9);
my $securestring = join ("", @zeichen[map{rand @zeichen}(1 .. 8)]);

# filehash
#my $hash = Digest::MD4->new;
#$hash->add($f);
#my $filename = $hash->digest;
my $filename = join ("", @zeichen[map{rand @zeichen}(1 .. 40)]);


if($gid eq 'neu') {
chdir("./bilder");
mkdir($securestring, 0777);
chdir("..");
}
else {
$kommando = "SELECT COUNT(*) as count FROM `gal_bilder` WHERE `galid` = '".$gid."'";
$mysql::query = $mysql::db->prepare($kommando);
$mysql::query->execute || seite::fehler('500','1 mySQL meldet:<br \>#'.$DBI::err.' - <i>'.$DBI::errstr.'</i><br \><br \>Querycode:<br \><code>'.$kommando.'</code>');

@ruckgabe = $mysql::query->fetchrow();

if($ruckgabe[0] > 0) {
$kommando = "SELECT `securestring` FROM `gal_bilder` WHERE `galid` = '".$gid."' LIMIT 1";
$mysql::query = $mysql::db->prepare($kommando);
$mysql::query->execute || seite::fehler('500','2 mySQL meldet:<br \>#'.$DBI::err.' - <i>'.$DBI::errstr.'</i><br \><br \>Querycode:<br \><code>'.$kommando.'</code>');

@ruckgabe = $mysql::query->fetchrow();
$securestring = $ruckgabe[0];
}
else {
chdir("./bilder");
mkdir($securestring, 0777);
chdir("..");
}
}

$kommando = "INSERT INTO `gal_bilder` (`id`, `galid`, `bildname`, `securestring`, `titel`, `uploaded`) VALUES (NULL, '".$gid."', '".$filename.".jpg', '".$securestring."', '', NOW());";
$mysql::query = $mysql::db->prepare($kommando);
$mysql::query->execute || seite::fehler('500','3 mySQL meldet:<br \>#'.$DBI::err.' - <i>'.$DBI::errstr.'</i><br \><br \>Querycode:<br \><code>'.$kommando.'</code>');

# save the file
open DAT,"> ./bilder/$securestring/$filename.jpg";
binmode $f;
binmode DAT;
my $data;
while(read $f,$data,1024) {
print DAT $data || share::logge("fehler beim schreiben von $data");
}
close DAT;

share::logge("$f erfolgreich gespeichert!");

print "Content-Type:text/html\n\n";
print "$f erfolgreich gespeichert!";

exit;
}
es werden die Dateien schon erstellt usw, aber es sind dann nur 0 Byte Dateien drin. Die Rechte der Ordner mit dem securestring sind 755 allerdings sollten sie doch 777 sein?

kann mir jmd helfen: wenn man z.b. http://****/cgi-bin/galerie/main.cgi?typ=html¶... sind die Dateien 0 Byte groß auch wenn ichs per formular schicken lasse.
GwenDragon
 2007-05-09 15:46
#101 #101
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Ich weiß jetzt nicht, warum es nicht geht, aber ich würde komplette Pfade verwenden, anstatt relative für die Dateien.

Zudem prüfst du überhaupt nicht ob ein chdir, mkdir, open, read bzw. write oder close fehlschlägt.\n\n

<!--EDIT|GwenDragon|1178711300-->
smack:
 2007-05-09 15:57
#102 #102
User since
2007-05-08
27 Artikel
BenutzerIn
[default_avatar]
hab ich bereits getestet gehabt, läuft einwandfrei durch.
renee
 2007-05-09 16:08
#103 #103
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach mal aus
Code: (dl )
print DAT $data || share::logge("fehler beim schreiben von $data");
Code: (dl )
print DAT $data or share::logge("fehler beim schreiben von $data");


Das hat was mit der verschiedenen Wertigkeit von || und or zu tun.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
smack:
 2007-05-09 16:12
#104 #104
User since
2007-05-08
27 Artikel
BenutzerIn
[default_avatar]
folgender fehler kommt bei

binmode $f

Inappropriate ioctl for device



heut morgen gings noch ich werd blöd ey!\n\n

<!--EDIT|smack:|1178713209-->
GwenDragon
 2007-05-09 16:33
#105 #105
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Und wo öffnest du deine Datei, die in $f steht?

my $f = $main::cgi->param('Filedata');
besser:
my $fh = $main::cgi->upload('Filedata');
$fh ist dann ein offenes Filehandle.\n\n

<!--EDIT|GwenDragon|1178714352-->
smack:
 2007-05-09 16:54
#106 #106
User since
2007-05-08
27 Artikel
BenutzerIn
[default_avatar]
erstmal danke ich euch für die hilfe, aber so wie ich das sehe liegt der hund wo anders begraben. die datei wird nicht mehr übergeben, heute morgen gings noch. danke erstmal euch.
Relais
 2007-05-09 17:08
#107 #107
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die Platte ist voll.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
smack:
 2007-05-09 17:23
#108 #108
User since
2007-05-08
27 Artikel
BenutzerIn
[default_avatar]
:D das wärs nenen hab noch 600 mb frei.

irgendein problem mit post und get. entweder werden nur get übergeben oder nur post variablen. mod_rewrite problem denk ich
<< >> 9 Einträge, 1 Seite



View all threads created 2007-05-09 15:40.