Dateiendung und grösse Abfragen

Divo1984

Erfahrenes Mitglied
Hallo,

ich bin mal wieder ziemlich am verzweifeln:-(

Ich habe folgenden Code:

PHP:
				if(isset($_POST["absenden"])){
					$fehlertext = array();
					
					if(($_POST["beatname"]) == ""){
						$fehlertext[] = "<p class=\"fehler\"><b>Keine Datei gewählt.</b></p>";
					}
					//Hier sollen Abfragen hin auf Endung und Grösse der Datei!
                    //Endung mp3
                    //Grösse Maximal 3 MB
					
		        if(count($fehlertext)){
                echo "Leider sind bei Ihrer Anmeldung einige Fehler aufgetreten. Bitte beachten Sie diese Angaben:<br>\n";        
                foreach($fehlertext as $error)
                echo $error."\n";
			    echo"</br>";
			    include("beat_arena_upload_formular.php");
				}else{
					echo"SQL Befehl";
				}
	
				
				
				}else{
					
				
					
				include("beat_arena_upload_formular.php");}

Zu Erklärung, die includete Datei ist ein Formular dem Feld beatnamen welches vom Type File ist! Ziel des Scriptes soll sein am Ende eine geprüfte Datei auf den Server zu laden!

Ich weiss das zumindestens die Prüfung des Dateiendes auf *.mp3 über preg_match gehen müsste weiss nur net wie ich die Abfrage formulieren sollten!

Und natürlich soll auch die maximale Größe der Datei geprüft werden! Max 3 MB

Könnts mir da helfen?
 
Die Größe der Datei in Bytes bekommst du über die Supervariable $_FILES. Anwendung:

PHP:
$maxSize = 1024 * 1024 * 3; // 3MB
if ($_FILES['beatname']['size'] > $maxSize) {
  // Fehler...
}

Die Dateiendung mit preg_match() zu extrahieren ist ein wenig übertrieben. Mit substr() kommt man auch ins Ziel:

PHP:
$ext = substr($_FILES['beatname']['name'], strrpos($_FILES['beatname']['name'], '.'));
 
Es ist sehr unsicher einfach nur die Dateiendung zu prüfen. Da könnte man ja einfach an irgendeine Datei einfach ".mp3" anhängen und schon kann ich sie dir auf den Server laden.

Du solltest den MIME Typ der Datei prüfen, um sicherzugehen.

Schau dir mal finfo_file an.
 
Hallöle,

also die Abfrage der Grösse habe ich jetz so gehändelt:

PHP:
				if(isset($_POST['absenden'])){

					if($_FILES['beatname']['size'] >= 3000000) {
 					 	$fehlertext[] = "<p class=\"fehler\"><b>Datei ist zu groß!</b></p>";
					}

Das läuft einwandfrei!

Aber ich bekomme nicht geprüft ob überhaupt eine Datei vorhanden ist!

Am Anfang hatte ich das ja so versucht:

PHP:
                    if(($_POST["beatname"]) == ""){
                        $fehlertext[] = "<p class=\"fehler\"><b>Keine Datei gewählt.</b></p>";
                    }

was aber blödsinn darstellt, da mir das Script so immer sagt das keine Datei vorhanden wäre:-(

Jemand ne Idee?
 
Wie wäre es auf Prüfung der Dateigröße? Hier bekommst alle Infos raus:

PHP:
$_FILES['datei']['tmp_name']
$_FILES['datei']['name']
$_FILES['datei']['type']
$_FILES['datei']['size']

Lege ne Mindestgröße und ne Maximalgröße fest und prüfe diese dann einfach. Prüfe auf folgendes:

- Datei mitgeliefert? z.B. Dateigröße
- Typ
- Mindestgröße
- Maximalgröße
- Mindestname (a.mp3 (also min, 5 Zeichen)
- Maximalname
 
Danke du hast mir grad weitergeholfen, auch wenn ich es jetzt ein wenig anders gelöst habe!

PHP:
					if(($_FILES['beatname']['name']) == ""){
						$fehlertext[] = "<p class=\"fehler\"><b>Keine Datei gewählt!</b></p>";
					}

Danke schön:-)
 
Zurück