PHP Upload Formular

Hey,

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);
}

else {echo "

$fehler

";}
}
?>

[/code]

Grüße :smiley:

Was genau tut es denn nicht?

error_reporting an?

U.a. wohl deshalb, weil du noch nicht mal register_globals=off berücksichtigt hast.

peterkropff.de/tutorials/php … gister.htm
peterkropff.de/tutorials/php … upload.htm

huhu

hm hilft mir alles nichts…

wenn ich was hochlade macht er halt nichts…

habt ihr kein skript oder so dass funktioniert…find grad keins online…bzw die funktionieren alle nicht

grüße

Willst du mich veräppeln!?!

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.

hey,

chrisb jetzt hör mir mal genau zu!

Wenn du so anderen Leuten hilfst, dann hast du mein volles Beileid.

Ich beanspruche deine Hilfe hier keineswegs mehr, wenn du mich so anmuckst.

Kennst du den Spruch für die Foren: don’t feed the troll?

Trotzdem Danke!

Grüße :smiley:

at2.php.net/manual/de/ini.core.p … er-globals

wozu ist denn das skript ?

upload.php :

[code]// Variabeln festlegen
$max_byte_size = 1000000;
$allowed_types = “(jpg|bmp|gif)”;

// Formular wurde abgeschickt
if($_POST[“submit”] == “Upload”) {

// Wurde wirklich eine Datei hochgeladen?
if(is_uploaded_file($_FILES[“file”][“tmp_name”])) {

// Gültige Endung? ($ = Am Ende des Dateinamens) (/i = Groß- Kleinschreibung nicht berücksichtigen)
if(preg_match("/." . $allowed_types . “$/i”, $_FILES[“file”][“name”])) {

// Datei auch nicht zu groß
if($_FILES[“file”][“size”] <= $max_byte_size) {

// Alles OK dann Datei kopieren
if(copy($_FILES[“file”][“tmp_name”], $_FILES[“file”][“name”])) {
$meldung = “Datei erfolgreich hochgeladen!
Name: " . $_FILES[“file”][“name”] . “
Größe: " . $_FILES[“file”][“size”] . " Byte
MIME-Type: " . $_FILES[“file”][“type”] . “
Link: <a href=”/Extras/uploaded/” . $_FILES[“file”][“name”] . “”>” . $_FILES[“file”][“name”] . “”;

}
else {
echo “Datei konnte nicht hochgeladen werden.”;

}

}
else {
echo"Die Datei darf nur eine Größe von " . $max_byte_size . " Byte besitzen.";

}

}
else {
echo “Die Datei besitzt keine gültige Endung.”;

}

}
else {
echo “Keine Datei zum Hochladen angegeben.”;

}

}
else {
echo “Bitte benutzen sie das uploadformular”;

}[/code]

Formular:

[code]<form action=“upload.php” method=“post” " enctype=“multipart/form-data” >

[/code]

:wink:

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! :p) 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 />&raquo; 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>

in meinem ??
bei mir funktionierts ! :slight_smile:

ne in dem ersten von Spandauer007 :p

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 :stuck_out_tongue: 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^^ :wink:
also alles was in Klammern steht en Tab nach rechts oder 2 Leerzeichen oder was man halt bevorzugt.

grüße

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.

aber die Dateiendung zu ändern ist glaub ich für jeden noob möglich, den MIME-Type zu ändern doch nicht oder hab ich da gerade en Brett vorm kopp^^ :stuck_out_tongue: ?

Der MIME-Type wird doch aus dem Header der Datei gelesen dachet ich…
Und en bisschen Freundlichkeit schade nie^^

Nein, den schickt der Client mit.

Und woraus erhält der Client den?

Ein *nix-System wird vermutlich in die Datei reinschauen, Windows vermutlich eher stumpf nach der Dateiendung gehen.

OK
Quellcode müsst ich einrücken.
aber ich habs einfach aus meinem skript kopiert.
(und mir die arbeit nicht gemacht. :ps: )
Zum mimetype:
kein system ist 100 % sicher. :wink:
Wenn aba jemand nen php skript einschleussen will, dann wird der mit *.txt auf keinen Fall ausgeführt. :wink:

:stuck_out_tongue: ja das stimmt wohl^^

damit sowas ausführbar wäre müsste der admin seinen server schon grob fahrlässig konfigurieren…