So, jetzt kommt noch mein Upload-Script für Dokumente. Ich will sicherstellen, dass nur valide Datei eines bestimmten Typs hochgeladen werden können.
Bin schon gespannt auf Kritik / Feedback usw. Danke schon mal!
PHP-Code:
<form enctype="multipart/form-data" action="<?php echo $_SERVER['SCRIPT_NAME']."?sid=".$sid; ?>" method="POST">
<!-- Der Name des Input Felds bestimmt den Namen im $_FILES Array -->
Diese Datei hochladen:<br /> <input name="userfile" type="file" />
<input type="submit" name="los" value="Hochladen" />
</form>
PHP-Code:
if ($_POST['los']) {
$uploaddir = _DOCPFAD_ABS;
$uploaddatei = basename(strip_tags($_FILES['userfile']['name']));
$uploadfile = $uploaddir . $uploaddatei;
$dateiendung = substr (stristr ( $uploaddatei, '.' ), 1);
/* MIME-Typ einer spezifischen Datei ermitteln */
$filename = $_FILES['userfile']['tmp_name'];
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if (!$finfo) {
echo "Öffnen der fileinfo-Datenbank fehlgeschalgen";
exit();
}
echo "MIMETYPE nach finfo_file: ".finfo_file($finfo, $filename);
$mimetype_import = finfo_file($finfo, $filename);
/* Verbindung schließen */
finfo_close($finfo);
echo "<hr />";
$mimetype_erlaubt = array("application/pdf", "application/msword", "application/vnd.ms-excel", "application/vnd.ms-powerpoint", "text/plain");
if (!in_array($mimetype_import,$mimetype_erlaubt)) {
echo "Kein gültiger Mime-Type<br />";
exit;
}
echo "<hr />";
$endung = array("pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt");
if (!in_array($dateiendung,$endung)) {
echo "Keine gültige Dateiendung<br />";
exit;
}
if (substr_count ( $dateiendung, '.' ) > 0) {
echo "Wahrscheinlich doppelte Dateiendung<br />";
exit;
}
if (file_exists($uploadfile)) {
echo "Diese Datei gibt es schon!<br />";
exit;
}
$suche = "/[^0-9a-zA-Z_\.\-\@]|NULL/";
if (preg_match($suche,$uploaddatei)) {
echo "Kein gülter Dateiname!";
exit;
}
else {
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "Datei ist valide und wurde erfolgreich hochgeladen.\n";
}
else {
echo "Möglicherweise eine Dateiupload-Attacke!<br />";
echo "Fehler: ".$_FILES['userfile']['error']."<br />";
}
}
echo "<table border='1' width='80%'><tr><td>";
echo "<h3>Gerade hoch geladenes Dokument:</h3>";
echo $uploaddatei."<br/>";
echo "</td></tr></table>";
} // Ende if ($_POST['los']) {
Kommentar