So mal ein kleines aber sehr feines Uploadscript, gecodet bei mir^^
Mal ein kleines Uploadscript mit mehrern Funktionen:
* Ausgabe von Fehlern, die beim Upload auftreten können
* File-Size-Limit einstellbar
* prüft ob eine Datei mit dem Namen schon existiert, wenn ja, wird eine --Zufallszahl an den Namen angehängt
* prüfen auf böse Endungen
* Clam-av überprüfung (falls installiert)
index.php
<?php
function dateiendung($dateiname) { //Funktion zum Herausfiltern der Dateiendung
if (false !== ($punkt = strrpos($dateiname, '.'))) {
if (strlen($dateiname) > $punkt)
return substr($dateiname, $punkt + 1);
}
return false;
}
function dateiname($dateiname) { //Funktion zum Herausfiltern der Dateiendung
if (false !== ($punkt = strrpos($dateiname, '.'))) {
return substr($dateiname, 0, $punkt);
}
return false;
}
function kill($ausgabe) { //Funktion: Ausgabe eines Strings, Einbinden des Footers und beenden des Scripts
echo $ausgabe;
include "footer.html";
die();
}
$zielverzeichnis = 'upload/'; //Zielverzeichnis für die Uploads
$unerlaubt = array('php3', 'php4','php5', 'php'); //Unerlaubte Dateiendungen festlegen
$zufallszahl = mt_rand(); //Zufallszahl festlegen (falls die Datei schon existiert)
$zielverzeichnisname = $zielverzeichnis.basename($_FILES['datei']['name']);
$zielverzeichnisnameoe = $zielverzeichnis.basename(dateiname($_FILES['datei']['name']));
$endung = ".".dateiendung($_FILES['datei']['name']);
include "header.html"; //Einbinden des HTML Headers
include "uploadformular.html"; //Einbinden des Uploadformulars
if ($_FILES['datei']['error'] != UPLOAD_ERR_OK)
{
switch($_FILES['datei']['error']) //Fehler beim Upload werden ausgegeben
{
case UPLOAD_ERR_INI_SIZE:
kill("Die Datei ist größer als erlaubt");
case UPLOAD_ERR_FORM_SIZE:
kill("Die Datei ist größer als erlaubt");
case UPLOAD_ERR_PARTIAL:
kill("Die Datei konnte nur teilweise hochgeladen werden");
case UPLOAD_ERR_NO_FILE:
kill("Keine Datei wurde hochgeladen");
}
} elseif ($_FILE['datei']['size'] >= "41943040") //Die Datei wird auf die max. Größe von 5MB geprüft (41943040 Bit)
{
kill("Die Datei ist größer als erlaubt (5MB)!!");
} else {
foreach($unerlaubt as $unerlaubtfor)
{
if($unerlaubtfor == dateiendung($_FILES['datei']['name'])) //Die Endung der Datei wird überprüft
{
kill("Sie haben versucht eine Datei mit einer unerlaubten Dateiendung hochzuladen!");
}
}
}
// Nur falls clam-av installiert ist, zum prüfen der Datein auf Viren! entfernen des Kommentars /* und */
// Anleitung zur clam-av installation: http://www.howtoforge.de/howto/wie-man-hoch-geladene-dateien-automatisch-auf-viren-uberpruft-mit-php-clamavlib
/* cl_setlimits(5, 1000, 200, 0, 41943040);
if($malware = cl_scanfile($_FILES['datei']['tmp_name']))
{
$error .= 'We have Malware: '.$malware.'<br>ClamAV version: '.clam_get_version();
kill($error);
}
*/
if (!file_exists($zielverzeichnisname)) { //Es wird geprüft ob die Datei schon im Uploadverzeichnis vorhanden ist
if (move_uploaded_file($_FILES['datei']['tmp_name'], $zielverzeichnisname))
//Falls das Script bis hierhin nicht beendet wurde wird die Datei vom temporären PHP-Verzeichnis,
// in den Upload-Ordner verschoben, falls die Date noch nicht vorhanden ist
{
echo "Die Datei wurde erfolgreich hochgeladen<br>und befindet sich nun im Verzeichnis: ".$zielverzeichnis."<br>";
echo "<a href=\"".$zielverzeichnisname."\">Link zur Datei</a>"; //Ausgabe eines Links zur Datei
}
} elseif (move_uploaded_file($_FILES['datei']['tmp_name'], $zielverzeichnisnameoe."-".$zufallszahl.$endung))
//Falls die Datei, die hochgeladen werden soll, schon existiert!, wird an die Datei eine Zufallszahl drangehängt!
{
echo "Die Datei wurde erfolgreich hochgeladen<br>und befindet sich nun im Verzeichnis: ".$zielverzeichnis."<br>";
echo "<a href=\"".$zielverzeichnisnameoe."-".$zufallszahl.$endung."\">Link zur Datei</a>"; //Ausgabe eines Links zur Datei
}
include "footer.html"; //Einbinden des HTML-Footers
?>
Header-HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Upload Script 1.0</title>
</head>
<body>
uploadformular-HTML
<form enctype="multipart/form-data" action="index.php" method="post">
<fieldset>
<legend>Datei hochladen</legend>
<label for="file">Bitte eine Datei auswählen.</label><br />
<input type="hidden" name="MAX_FILE_SIZE" value="41943040" />
<input type="file" id="datei" name="datei" />
<input type="submit" value="Hochladen" />
</fieldset>
</form>
Footer-HTML
so, Feedback erwünscht
mfg