Dateinamen prüfen

fabilazar

Mitglied
Hallo,
ich will einen zip-Archiv zum Server hochladen, und dabei will ich den Dateinamen bzw. die Dateiendung prüfen.
Und zwar sind beliebig viele Punkte im Dateinamen zulässig (z.B. ...\..\Archiv.xyz.zip)
Ich habe es so gelöst bin mir aber nicht sicher ob es ausreicht?

Code:
  function DoUpload($filename) {
  //Reststing nach dem letzten Punkt
  		$last = strrchr($filename, "."); 
  		$end = substr("zip", 0, 2); 
  		   
  		if ($last == $end) {
  		  return true;  
  		}
  		else
  		{
  			$error = "Es ist kein zip-Archiv!";
  		}
  		if (!isset($filename)) 
  		{
  			$error = "Es wurde keine Datei ausgewählt";
  			return false;
  		}
  }
Gruss
 
Du könntest auch mit einem regulären Ausdruck arbeiten:
PHP:
var_dump( (bool)preg_match('/.\x2Ezip$/', $filename) );
 
Oh lieber nicht. Ich weiß das ist gut gemeint, aber ich bin froh wenn ich die reg. Ausdr. so selten wie möglich verwenden muß.
Aber ansonsten kann es so bleiben?
Ich habe noch ne Kleinigkeit vergessen error ist eine Klassenvariable
deshalb muss es doch so heißen $this->error.
Auf die Standard-Fehler kann ich mich mittels der Globalen Variable $_FILES ['error'] beziehen gell?
Sprich so
Code:
 ...
 switch($_FILES['error']) {
 			case UPLOAD_ERR_INI_SIZE:
 			$this->error = "Die Datei ist zu groß";
 ...
Gruss
 
Du könntest weiterhin auch noch die ersten sechs Zeichen auf die Zeichenfolge 0x50 0x4B 0x03 0x04 0x14 0x00 überprüfen, die ich in meinen Tests in allen ZIP-Archiven fand.
PHP:
<?php

	…
	if( $handle = fopen($_FILES['tmp_name'], 'r') && (bool)preg_match('/^\x50\x4B\x03\x04\x14\x00/', fgets($handle, 7) && fclose($handle) ) {
		
	}
	…

?>
 
Zurück