So ich hab das mal "etwas" verfeinert, so dass jeder User (Recht einstellbar) seinen eigenen Ordern bekommt, in den er Sachen hochladen kann.
Achso ja und das mit der Verzeichnissichtbarkeit funktioniert nur, wenn in der Webserver dahingehen konfiguriert, dass .htaccess Dateien unterstützt werden. Ansonsten kann man sich aber einfach eine leere index.html erstellen und dann kann auch niemand durch das Verzeichnis browsen.
Und die Optionen nicht vergessen zu ändern.
<?php
defined ('main') or die ( 'no direct access' );
$title = $allgAr['title'].' :: Upload';
$hmenu = 'Upload';
$design = new design ( $title , $hmenu );
$design->header();
//Options
$uploadordner = "include/downs/uploads/"; //Order für Uploads
$extlimit = "yes"; //Do you want to limit the extensions of files uploaded, yes or no?
$limitedext = array(".gif",".jpg",".png",".jpeg",".bmp",".JPG"); //Extensions you want files uploaded limited to.
$sizelimit = "yes"; //Do you want a size limit, yes or no?
$sizebytes = "1000000"; //size limit in bytes
$right = -4; //Recht ab dem User etwas hochladen können
//Options End
//Bei PHP4 auskommentieren
/*function scandir($dir){
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) $files[] = $filename;
sort($files);
return $files;
}*/
function dir_access($dir,$mode='none'){
switch ($mode){
case 'none':
if (file_exists($dir.'.htaccess')) {
$file = fopen($dir.'.htaccess','r') or die('Kann Datei .htaccess nicht öffnen');
$line = fread($file,1024);
fclose($file);
if (preg_match("/\+Indexes/",$line) == 1) return (TRUE);
else return (FALSE);
}
else return (FALSE);
break;
case 'give':
$file = fopen($dir.'.htaccess','w+') or die('Kann Datei .htaccess nicht öffnen');
fwrite($file,"Options +Indexes\n");
fclose($file);
break;
case 'remove':
$file = fopen($dir.'.htaccess','w+') or die('Kann Datei .htaccess nicht öffnen');
fwrite($file,"Options -Indexes\n");
fclose($file);
break;
}
}
function short_string($string,$len=20)
{
if (strlen($string) <= $len) return $string;
else {
$len = floor($len/2);
$string = substr($string,0,$len-3).'...'.substr($string,$len*-1);
return $string;
}
}
if (loggedin() AND $_SESSION['authright'] <= $right) {
$name = escapeshellcmd($_SESSION['authname']);
$uploadordner .= $name.'/';
if (file_exists($uploadordner) AND !file_exists($uploadordner.'.htaccess')) dir_access($uploadordner,'remove');
$server = 'http://'.$_SERVER['HTTP_HOST'].str_replace('index.php','',$_SERVER['PHP_SELF']);
//Upload
if(!empty($_FILES['file']['name'])) {
if (!file_exists($uploadordner)) {
mkdir($uploadordner,0744) or die('Konnte kein Verzeichnis erstellen');
dir_access($uploadordner,'remove');
}
if (($sizelimit == "yes") && ($_FILES['file']['size'] > $sizebytes)) {
echo "Die Datei ist zu groß, sie darf maximal $sizebytes bytes sein.";
}
$ext = strrchr($_FILES['file']['name'],'.');
$fname = escape($_FILES['file']['name'],'string');
$fname = str_replace(' ','',$fname);
if (($extlimit == "yes") && (!in_array($ext,$limitedext))) {
echo "Der Dateiname hat eine nicht erlaubte Endung.";
}
//falls im Ordner der Name der Datei schon existiert, dann soll eine Fehlermeldung kommen.
elseif (file_exists($uploadordner.$fname)) {
echo "Der Dateiname existiert bereits. Bitte ändere deinen Dateinamen und versuche es nochmal.";
}
//ansonsten wird die Datei im Ordner images kopiert
elseif ( move_uploaded_file($_FILES['file']['tmp_name'], $uploadordner.$fname) ){
//chmod($uploadordner.$fname, 0755);
$link = $server.$uploadordner.$fname;
echo '<br />Link zu deiner Datei ist: <a href="'.$link.'">'.short_string($link,70).'</a><br /><br />';
}
}
?>
<form name="mf" action="index.php?upload" method="post" enctype="multipart/form-data" style="border-style:dotted; border-width:medium; border">
<table>
<tr><td>Datei auswählen:</td><td><input type="file" name="file" value="durchsuchen"></td></tr>
<tr><td><input type="submit" name="senden" value="Datei hochladen"></td></tr>
</table>
</form><br />
<?
//Datei löschen
if ($menu->getA(1) == 'd') {
$files = scandir($uploadordner);
$filenr = $menu->getE(1) + 3;
$del = unlink($uploadordner.$files[$filenr]);
if ($del == TRUE) echo "Datei <b>{$files[$filenr]}</b> erfolgreich gelöscht<br />";
else "Datei {$files[$menu->getE(1)]} konnte nicht gelöscht werden<br />";
}
//Verzeichnissichtbarkeit ändern
if ($menu->getA(1) == 'c') {
dir_access($uploadordner,($menu->getE(1) == 0 ? 'give' : 'remove'));
}
//Verzeichnisinhalt auflisten
if (file_exists($uploadordner)) {
$files = array_slice(scandir($uploadordner),3);
$dirvis = (dir_access($uploadordner) == TRUE ? 1 : 0);
echo "<b>Dateien in deinem Verzeichnis <a href=\"$server$uploadordner\">".short_string($server.$uploadordner,70)."</a>:</b>
Verzeichnis ist <a href=\"?upload-c$dirvis\">".($dirvis == 1 ? '' : 'nicht')." sichtbar</a> für alle.<br />
<table width=\"100%\">
<tr class=\"Chead\" align=\"center\"><th>Dateien</th><th width=\"70\">Größe</th><th width=\"50\">Löschen</th></tr>";
foreach ($files as $filenr => $file)
echo "<tr class=\"Cnorm\"><td><a href=\"$server$uploadordner$file\">".short_string($file,43)."</a></td><td align=\"right\">".round(filesize($uploadordner.$file)/1024,1)."K</td><td align=\"center\"><a href=\"?upload-d$filenr\"><img src=\"include/images/icons/del.gif\" alt=\"Löschen\" border=\"0\" \></a>";
echo "</table>";
}
else echo 'Verzeichnis ist leer.<br />';
}
else
echo 'Diese Funktion steht für dich nicht zur Verfügung!<br />';
$design->footer(); ?>
*UPDATED*
Zuletzt modifiziert von Mairu am 03.12.2006 - 09:52:17