Bilder Upload Problem :l

ReqonxS

Mitglied
Und schon wieder habe ich ein Problem wo ich am verzweifeln bin :l
Ich habe für ein Profilbildsystem ein Upload gemacht. Es geht auch alles ganz ok.
Nur dass jede DateiTyp hochgeladen werden kann.

Wie kriege ich jetzt hin dass nur PNG, GIF und JPG Dateien erlaubt sind?

Mein Code:
PHP:
$ImageURL = 'avatars/';
$MaxSize = 2000;  
$AllowType = array('png', 'gif', 'jpg'); 

if(isset($_FILES['picure_up']) && strlen($_FILES['picure_up']['name']) > 1) {
	$Random = rand(4, 9999);
	$ImageURL = $ImageURL . $Random.'_'.basename($_FILES['picure_up']['name']);  
	$Sepext = explode('.', strtolower($_FILES['picure_up']['name']));
	$Type = end($Sepext);   
	$ImageName = $Random.'_'.$_FILES['picure_up']['name'];
	
	if(!in_array($Type, $AllowType)) { $UploadAccess = False; } else { $UploadAccess = True; }
	if($UploadAccess == True) {
		if($_FILES['picure_up']['size'] > $MaxSize*1000) $err .= '<br/>Maximum erlaubte Datei Gr&ouml;&sulig;e: '. $max_size. ' KB.';
	}
    if(move_uploaded_file($_FILES['picure_up']['tmp_name'], $ImageURL)) { 
		mysql_query("UPDATE cms_users SET avatar='".$ImageName."' WHERE id LIKE '".$MyRow['id']."'");
		header("Location: profile.php");
	}
}
 
Also ich habe es jetzt so:
PHP:
<?php
$ImageURL = 'avatars/';
$MaxSize = 2000;  
$AllowType = array('image/png', 'image/gif', 'image/jpeg');

if(isset($_FILES['picure_up']) && strlen($_FILES['picure_up']['name']) > 1) {
	$Random = rand(11111111, 99999999);
	$ImageURL = $ImageURL . $Random.'.'.basename($_FILES['picure_up']['type']);  
	$Sepext = explode('.', strtolower($_FILES['picure_up']['name']));
	$Type = end($Sepext);   
	$ImageName = $Random.'.'.basename($_FILES['picure_up']['type']);
	
	if(in_array($_FILES['picure_up']['type'], $AllowType)) {
		if(move_uploaded_file($_FILES['picure_up']['tmp_name'], $ImageURL)) { 
			mysql_query("UPDATE cms_users SET avatar='".$ImageName."' WHERE id LIKE '".$MyRow['id']."'");
			header("Location: profile.php");
		}
	}
}
?>

Funktionieren tut es auch nur bekomme ein Fehler wenn andere Dateitypen hochladenwill (Sie werden aber nicht hochgeladen)
Warning: POST Content-Length of 9789729 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
 
Du testest mit einer zu grossen Datei. Grösser als dein php.ini zulässt.
Zudem würde ich die Prüfung ganz am Anfang machen. Es macht keinen Sinn Dateinamen zu definieren und sie nachher nicht zu brauchen
PHP:
 <?php
$ImageURL = 'avatars/';
$MaxSize = 2000;  
$AllowType = array('image/png', 'image/gif', 'image/jpeg');

if(
		isset($_FILES['picure_up']) 
		&& strlen($_FILES['picure_up']['name']) > 1
		&& in_array($_FILES['picure_up']['type'], $AllowType))
{
	$Random = rand(11111111, 99999999);
	$ImageURL = $ImageURL . $Random.'.'.basename($_FILES['picure_up']['type']);  
	$Sepext = explode('.', strtolower($_FILES['picure_up']['name']));
	$Type = end($Sepext);   
	$ImageName = $Random.'.'.basename($_FILES['picure_up']['type']);

	if(move_uploaded_file($_FILES['picure_up']['tmp_name'], $ImageURL)) { 
		mysql_query("UPDATE cms_users SET avatar='".$ImageName."' WHERE id LIKE '".$MyRow['id']."'");
		header("Location: profile.php");
	}
}
?>
 
Du müsstest den PHP-Parameter post_max_size verändern:
http://php.net/manual/en/ini.core.php#ini.post-max-size

Solange der nicht größer ist als die von dir hochgeladene Datei, kann die Datei am Server auch nicht entgegen genommen werden, weshalb auch dein PHP-Code niemals ausgeführt wird.

Du musst also diesen Parameter anpassen, entweder in der php.ini direkt oder per ini_set(). Was davon bei dir funktioniert hängt von deinem Server ab (den wir hier nicht kennen).
 
Misstverständniss. Ich meinte:
Man kann zwar Bilder hochladen, funktioniert auch soweit ganz gut, nur sobald man eine Anwendungsdatei hochladen will, kommt dieser Fehler und die Anwendungsdatei wird auch nicht hochgeladen. Soll ja auch nicht hochgeladen werden. Nur der Fehler bzw. die Warnung stört mich.
 
Es ist egal welchen Typ die Datei hat. Sie ist schlicht zu groß. Daher kommt auch die Fehlermeldung. Und wie Du das beheben kannst, habe ich oben geschrieben.

Ein serverseitiges Hindernis zum Hochladen dieser Dateien kann erst funktionieren, wenn die Datei auch auf dem Server angekommen ist. Ist sie aber nicht, wenn diese Fehlermeldung kommt. Eine Alternative wäre eine clientseitige Prüfung auf die Größe und den Typ der Datei. Letzteres geht relativ einfach über die Prüfung der Dateiendung per JavaScript, sollte aber in keinem Fall auch die serverseitige Prüfung ersetzen (da man JavaScript auch abschalten kann). Die Größe einer Datei zu prüfen, geht imho nur mit HTML5 in manchen Browsern.
 
Ich habe oben die Variable
$MaxSize = 2000; gesetzt. Wie kann ich denn durch PHP abfragen ob die Datei größer ist als $MaxSize ?

Problem gelöst mit:
if($_FILES['picure_up']['size'] <= $MaxSize) { }
 
Damit löst Du aber imho das eigentliche Problem nicht. Versuch mal eine 100MB-Datei zu übertragen. Das sollte weiterhin zu o.g. Fehlermeldung führen.
 
Zurück