ich hab mich mal an einem Upload Formular gewagt. Als Tutorial hab ich mal mein PHP Buch genommen^^
Könnt ihr mir sagen warum das Skript nicht tut:
[code]
<?php
//Namen des Unterverzeichnisses in eine Variable schreiben
$uverz=“dateien”;
if($sent)
{
//Wenn das Unterverzeichnis noch nicht exisitiert, dieses anlegen
if(!file_exists($uverz))
{mkdir($uverz,0755);}
//Dateigröße kontrollieren
if($neuedatei_size>100000)
{$fehler=“ Die Datei ist zu groß!”;}
//Zulässige Dateitypen kontrollieren
if(!($neuedatei_type == ‘image/pjpeg’ OR $neuedatei_type == ‘image/gif’))
{$fehler.=“ Der Dateityp ist nicht zulässig! ”;}
//Datei speichern, wenn kein Fehler
if(!fehler)
{
//Namen generieren
$name=uniquid("");
//Dateiendung je nach Typ an den Namen anhängen
switch($neuedatei_type)
{
case ‘image/pjepg’:
$name.=".jpg";
break;
case ‘image/gif’:
$name.=".gif";
break;
}
//Den Dateinamen um die Pfadangabe erweitern
$name=$uverz."/".$name;
//Die Datei in das Unterverzeichnis kopieren
copy($neuedatei, $name);
}
Natürlich nicht, weil dein Script (in Bezug auf die hier vorliegende Konfiguration) einfach fehlerhaft ist.
Also passe die entsprechenden Stellen an - das ist schnell gemacht, wenn man sich mal ein wenig mit der Thematik beschäftigt und sie dann verstanden hat.
Entschuldigt diesen Beitrag, aber wieso machen alle chrisb nieder? Gut, eventuell geht er mit seinem Ton schnell hoch, aber berechtigt. Er gibt schnell die passenden Informationen von sich und versucht zu helfen, doch weil der TE keine fixe Lösung kriegt und selbst zu faul ist, sich die Beiträge durchzulesen bzw. das zu befolgen und das dann hinzukriegen, beschimpft man den jenigen und ignoriert es und fordert naiv weiter eine fixe Lösung. Unmöglich, und wer das tut, kann keine Hilfe mehr erwarten.
in deinem Script von Spandauer007 (nicht in dem von der_admin! ) waren wenige Tippfehler aber auch der RegisterGlobals Fehler wie schon genannt…
versuchs mal hiermit:
<?php
$verz="dateien";
$max_size = 100000; //in byte => 100kb
$Allowed_Types = array(
'image/jpeg' => '.jpg',
'image/gif' => '.gif'
);
$fehler = array();
$msg = "";
if(isset($_FILES['neuedatei']))
{
$type = $_FILES['neuedatei']['type'];
$tmp_name = $_FILES['neuedatei']['tmp_name'];
$size = $_FILES['neuedatei']['size'];
//Wenn das Verzeichnis noch nicht exisitiert, dieses anlegen
if(!file_exists($verz)) mkdir($verz,0755);
//Dateigröße kontrollieren
if($size>$max_size)
{
$fehler[]="Die Datei ist zu groß!";
}
//Zulässige Dateitypen kontrollieren
if(!in_array($type,array_keys($Allowed_Types)))
{
$fehler[]="Der Dateityp '$type' ist nicht zulässig!";
}
//Datei speichern, wenn kein Fehler
if(count($fehler)==0)
{
//Namen generieren
$name=uniqid("");
//Dateiendung je nach Typ an den Namen anhängen
$ext = $Allowed_Types[$type];
//Den Dateinamen um die Pfadangabe erweitern
$name = $verz."/".$name.$ext;
//Die Datei in das Unterverzeichnis kopieren
copy($tmp_name, $name);
$msg = "Die Datei wurde erfoglreich hochgeladen!<br />» Link: <a href='$name'>$name</a>";
}
else
{
foreach($fehler as $f)
{
$msg .= $f."<br />\n";
}
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Datei Upload</title>
</head>
<body>
<?=$msg?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="neuedatei" size="50" /><br /><br />
<input type="hidden" name="MAX_FILE_SIZE" value="<?=$max_size?>" />
<input type="submit" name="sent" value="Senden" />
<input type="Reset" value="Zurücksetzen" />
</form>
</body>
</html>
zu deinem script muss ich sagen, dass die Datei-Typ überprüfung nicht 100% sicher ist, denn man kann jeder Datei jede Extension anhängen und dennoch hat sie einen anderen Inhalt.
Mit dem Type-Attribut fährt man da sicherer und wenn man nicht weiß wie die MIME-Types heißen, einfach den Upload des gewünschten Types versuchen und den Type in der Fehlerausgabe mit ausgeben…
Ansonsten ist es eigentlich immer übersichtlich, wenn man den Code einrückt^^
also alles was in Klammern steht en Tab nach rechts oder 2 Leerzeichen oder was man halt bevorzugt.
Nö, tut man nicht.
Den Mimetype übermittelt ebenfalls der Client, also kann da ebenfalls alles mögliche drinstehen.
Wenn es lediglich um Bilddateien in den gängigen Formaten geht, dann sollte man getimagesize drauf anwenden. Das erkennt nämlich gut, ob es sich bei dem Inhalt um ein Bild handelt oder nicht.
OK
Quellcode müsst ich einrücken.
aber ich habs einfach aus meinem skript kopiert.
(und mir die arbeit nicht gemacht. )
Zum mimetype:
kein system ist 100 % sicher.
Wenn aba jemand nen php skript einschleussen will, dann wird der mit *.txt auf keinen Fall ausgeführt.