Hallo mit folgenden Script versuche ich Dateien abzuspeichern:
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.