Upload Mime Problem!

a*new*found*flo

Erfahrenes Mitglied
Hallo!

Ich werde leider einfach nicht schlau aus meinem Uploader-Script!
Obwohl ich gewisse Mime-Typen erlaube, lädt mir das Script diese Dateien nicht auf den Server!
Hier mal das Script:
PHP:
<form enctype="multipart/form-data" action="upload_file.php" method="post"> 
<input type="file" name="file"><br> 
<input type="hidden" name="id" value="<? echo $id; ?>"><br> 
<input type="image" value="hochladen" src="submit.gif" onClick="this.src='loading.gif'"> 
</form><? 

$tempname = $_FILES['file']['tmp_name']; 
$name = $_FILES['file']['name']; 
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if($type != "application/msexcel" && $type != "application/mspowerpoint" && $type != "application/msword" && $type != "application/pdf" && $type != "application/xhtml+xml" && $type != "application/xml" && $type != "application/zip" && $type != "video/mpeg" && $type != "video/quicktime" && $type != "video/x-msvideo" && $type != "audio/x-mpeg"  && $type != "video/x-ms-wmv" ) { 
    $err[] = "Dieses Format wird leider nicht unterstützt!"; 
} 
if($size > 30500500) { 
    $err[] = "Die Datei,die du hochladen willst, ist zu gross!"; 
}  
if(empty($err)) { 

    copy("$tempname", "$name"); 
	
    echo "Die Datei $name wurde erfolgreich hochgeladen!"; 
	
	}
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
?>

Das einzige, was zum raufladen funktioniert sind Word-Dokumente.
Kann mir da bitte jemand weiterhelfen? Ich verstehe das einfach nicht - bzw. sehe ich den Fehler einfach nicht.

Dankeschön, mfg Flo
 
Was gibt denn Dein Error-Handler in diesem Falle als Text aus?
Wenn es "dieses format wird leider nicht unterstützt" ist, dann hänge doch spaßeshalber zwecks debugging mal den filetype ($type) an die Fehlermessage ran, damit du siehst, wie dein Browser das File sendet...

y.
 
Zuletzt bearbeitet:
Hab ich nun Probiert - er gibt mir nur leider nichts aus....:

PHP:
<form enctype="multipart/form-data" action="upload_file.php" method="post"> 
<input type="file" name="file"><br> 
<input type="hidden" name="id" value="<? echo $id; ?>"><br> 
<input type="image" value="hochladen" src="submit.gif" onClick="this.src='loading.gif'"> 
</form><? 

$tempname = $_FILES['file']['tmp_name']; 
$name = $_FILES['file']['name']; 
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if($type != "application/msexcel" && $type != "application/mspowerpoint" && $type != "application/msword" && $type != "application/pdf" && $type != "application/xhtml+xml" && $type != "application/xml" && $type != "application/zip" && $type != "video/mpeg" && $type != "video/quicktime" && $type != "video/x-msvideo" && $type != "audio/x-mpeg"  && $type != "video/x-ms-wmv" ) { 
$tuep = filetype($type);
    $err[] = "Dieses Format wird leider nicht unterstützt! ".$tuep; 
} 
if($size > 30500500) { 
    $err[] = "Die Datei,die du hochladen willst, ist zu gross!"; 
}  
if(empty($err)) { 

    copy("$tempname", "$name"); 
	
    echo "Die Datei $name wurde erfolgreich hochgeladen!"; 
	
	}
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
?>  </td></tr></table>
 
Probier mal Folgendes:
PHP:
<?php

	$dstDir = 'foo/bar';   // Zielverzeichnis
	$maxFilesize = 30500500;
	$allowedTypes = array(
		'application/msexcel',
		'application/vnd.ms-excel',
		'application/mspowerpoint',
		'application/vnd.ms-powerpoint',
		'application/msword',
		'application/vnd.ms-word',
		'application/pdf',
		'application/xhtml+xml',
		'application/xml',
		'application/zip',
		'video/mpeg',
		'video/quicktime',
		'video/x-msvideo',
		'audio/mpeg',
		'video/x-ms-wmv'
	);

	$errors = array();
	while( true ) {
		if( $_FILES['file']['size'] > $maxFileSize ) {
			$_FILES['file']['error'] = UPLOAD_ERR_INI_SIZE;
		}
		switch( $_FILES['file']['error'] ) {
			case UPLOAD_ERR_INI_SIZE:
			case UPLOAD_ERR_FORM_SIZE:
				$errors[] = 'Die hochgeladene Datei überschreitet die erlaubte maximale Dateigröße von '.$maxFileSize.' Byte.';
				break 2;
			case UPLOAD_ERR_PARTIAL:
				$errors[] = 'Die Datei wurde nur teilweise hochgeladen.';
				break 2;
			case UPLOAD_ERR_NO_FILE:
				$errors[] = 'Es wurde keine Datei hochgeladen.';
				break 2;
		}
		if( !in_array($_FILES['file']['type'], $allowedTypes) ) {
			$errors[] = 'Dieses Dateityp ist nicht erlaubt.';
			break;
		}
		if( !move_uploaded_file($_FILES['file']['tmp_name'], $dstDir.'/'.$_FILES['file']['name']) ) {
			$errors[] = 'Die hochgeladene Datei konnte nicht verschoben werden.';
			break;
		}
		break;
	}

	if( !empty($errors) ) {
		echo '<div class="note error"><ul>';
		echo '<li>'.implode('</li><li>', $errors).'</li>';
		echo '</ul></div>';
	} else {
		echo 'Die Datei wurde erfolgreich hochgeladen.';
	}

?>
 
ok, danke schonmal!

Nur jetzt kommt die Fehlermeldung, dass das File zu groß ist.
Hat aber nur 5 MB, was ich da hochladen wollte.

Irgendwas is da sehr faul!
 
Hab den Fehler bei der Größe:

Du hast ganz oben die Variable: $maxFilesize und dann immer $maxFileSize

habs ausgebessert, aber jetzt kommt bei einer Mp3 zum Beispiel die Fehlermeldung, es sei ein falscher Dateityp.
 
Zuletzt bearbeitet:
Ok, bei mp3's die 5 MB haben sagt er die Datei sei zu groß, bei kleineren Dateien sagt er, es sei der falsche Typ. Nach wie vor gehen nur die Word Dateien.
 
Gumbo hat gesagt.:
Probier mal Folgendes:
PHP:
<?php

	$dstDir = 'foo/bar';   // Zielverzeichnis
	$maxFilesize = 30500500;
	$allowedTypes = array(
		'application/msexcel',
		'application/vnd.ms-excel',
		'application/mspowerpoint',
		'application/vnd.ms-powerpoint',
		'application/msword',
		'application/vnd.ms-word',
		'application/pdf',
		'application/xhtml+xml',
		'application/xml',
		'application/zip',
		'video/mpeg',
		'video/quicktime',
		'video/x-msvideo',
		'audio/mpeg',
		'video/x-ms-wmv'
	);

Du musst in diese Liste noch den MIME Typ von den MP3 File mitreinnehmen. Denke ich mal. Hab den Code nicht genauer angeschaut...

;)
 
Der Typ "audio/mpeg" steht ja schon in der Liste...
Ich würde nach wie vor bei problematischen Uploads mir zu Debugzwecken den tatsächlichen verwendeten MimeType ausgeben lassen. Dieser wird vom Browser gesetzt und da kann es durchausmal passieren, dass eine mp3-Datei als binary octetstream gesendet wird.... da hilft dann nur diesen typ auch zulassen und zusätzlich auf die Dateierweiterung hin prüfen... eine Analyse der reinen Datei vom Inhalt her (Dateiheader etc. halte ich für etwas übertrieben, wäre aber letzlich die 100%ig sichere Variante...)
Also einfach mal den Code entsprechend ergänzen:

$errors[] = 'Dieser Dateityp ist nicht erlaubt:'.$_FILES['file']['type'];

p.s.
Bedenke, daß Dein Zielverzeichnis Schreibrechte für den User einräumen muß, unter dem Deine PHPs ausgeführt werden...(aber ich denke, das hat sich erledigt, da ja schon manche Dateien erfolgreich hochgeladen wurden...)
 
Zurück