Seite 1 von 1

Uploadverzeichnisse

Verfasst: So 3. Nov 2002, 18:12
von günter
Gibt es eine Möglichkeit, die Grössen der Uploadverzeichnisse zu beschränken?

Günter

Verfasst: So 3. Nov 2002, 18:42
von Sven777b
nicht so ohne weiteres... du müsstest die Größeninformation beim Upload bereits irgendwo zwischenspeichern um später rauszubekommen, wieviel bisher in dem Verzeichnis liegt. Also ein zusätzlicher Table in con_upl z.b.

Verfasst: So 3. Nov 2002, 18:55
von idea-tec
die größe von verzeichnissen, bzw. webspace kann man mit dem (auf einigen servern installiertem) Tool "quota" erledigen.

Verfasst: So 3. Nov 2002, 19:07
von Sven777b
stimmt... quota setzen oder - wenn vorhanden - kannst du mit dem Tool "du -m" jederzeit die Größe eines Verzeichnisses in Megabyte ausgeben lassen. Das Ergebnis parsen und vergleichen. Aber beide Tools kannst du meist nur als Root einsetzen und beide gehören zu Linux/Unix

Verfasst: So 3. Nov 2002, 21:29
von günter
... "du -m" oder "quota" kann ich nicht einsetzen, muss mal meinen Hoster fragen, ob er mal die Verzeichnisse damit einstellt.
Ich denke aber, dass die Lösung von Sven777b vielleicht für die Zukunft besser ist, mit php/contendio das Uploaden zu regeln. Ich bin schon auf einige Php - Fragmente in anderen Foren gestossen, die php-uploads machen. Vielleicht klappts damit , wenn ich diese in contenido einbaue und anpasse.

Mal sehen, wenn´s geht melde ich mich wieder.

Günter.

Verfasst: Mo 4. Nov 2002, 00:24
von Sven777b
So geht es... :

ich habe die erstere Lösung von mir mal umgesetzt und sie funktioniert auch. Allerdings musst du dazu eine Datei editieren.

die Datei /contenido/inc/upl_upload_form.inc.php wird komplett ersetzt damit:

Code: Alles auswählen

<?
        //********** Fileupload with form *******
        echo "  <form name=upload action=\"$formaction\" method=post enctype=\"multipart/form-data\">";
 	        $sess->hidden_session();
		echo "  <INPUT type=hidden name=upltype VALUE=\"$upltype\">";
        echo "  <TABLE cellpadding=$cellpadding cellspacing=$cellspacing border=$border>
                <TR><TD class=head colspan=3 width=600>$text</TD></TR>
                <TR><TD class=head>".$lngUpl["file"]."</TD><TD colspan=2 class=content>";
        echo "    <INPUT type=file size=50 maxlength=100000 name=\"userfile\" accept=\"*\">";
        echo "  </TD></TR><TR><TD class=head>".$lngUpl["description"]."</TD><TD class=content>";
        echo "    <INPUT type=text name=description VALUE=\"\" SIZE=50>";
        echo "    <INPUT type=hidden name=uplfiletype VALUE=\"".$cfgClient[$client]["filetype"]["$upltype"]."\">";
        echo "  </TD><TD class=content>";
        echo "    <INPUT type=image src=\"".$cfgPathImg."but_ok.gif\" border=0>";
        echo "  </TD></TR></TABLE>";
        echo "  </form>";
        $userfile_name = $HTTP_POST_FILES['userfile']['name'];
        $source = $HTTP_POST_FILES['userfile']['tmp_name'];
        $target = "$path". $userfile_name;
        $size = $HTTP_POST_FILES['userfile']['size'];
        $dirsize = $size;
	if($cfgClient[$client]['maxsize'][$upltype] > 0){
		$db->query("SELECT size FROM $cfgTab_upl WHERE idclient='$client' AND dirname='$upltype'");
		while( $db->next_record() ){ $dirsize += $db->f("size"); }
	}
        if ($source != "none" AND $source != "") {
                if ( $dirsize > ($cfgClient[$client]['maxsize'][$upltype] * 1048576) ) {
			echo "Uploadmaximum von ".$cfgClient[$client]['maxsize'][$upltype]." Mb erreicht<BR>\n";
                                                unlink($source);
                } elseif ( !copy($source, $target) ) {
                        echo("failed to copy \"$source\" nach \"$target\"<br>\n");
                } else {
                       	$sql = "SELECT idupl FROM $cfgTab_upl WHERE idclient='$client' AND filename='$userfile_name' AND dirname='$upltype' AND filetype='".$cfgClient[$client]["filetype"]["$upltype"]."'";
			$db->query($sql);
			if ($db->next_record()) {
				$sql = "UPDATE $cfgTab_upl SET idclient='$client', filename='$userfile_name', dirname='$upltype', filetype='".$cfgClient[$client]["filetype"]["$upltype"]."', description='$description', size='$size' WHERE idupl='".$db->f("idupl")."'";
				$db->query($sql);
			} else {
				$sql = "INSERT INTO $cfgTab_upl (idclient, filename, dirname, filetype, description, size) VALUES ('$client','$userfile_name','$upltype','".$cfgClient[$client]["filetype"]["$upltype"]."','$description','$size')";
				$db->query($sql);
			}
                }
        }
?>
Anschliessend per phpMyAdmin folgenden SQL-Dump einspielen:

Code: Alles auswählen

ALTER TABLE `con_upl` ADD `size` INT UNSIGNEDDEFAULT '0' NOT NULL ;
ab sofort wird die Dateigröße in der Datenbank mitgeführt. In der config.php kannst du mit folgender Zeile die jeweiligen Maximumwerte festlegen:

Code: Alles auswählen

$cfgClient[1]["maxsize"]["img"]		    = 10;
du kannst also den Wert für jedes Uploadverzeichnis von jedem Client festlegen (für pdf also ["pdf"] ).
Der Maximalwert wird in Megabyte angegeben. 0 = unlimitiert.

Bei Überschreitung des Maximum wird die Datei nicht kopiert und auch nicht eingetragen - es erscheint eine Warnung.

Verfasst: Mo 4. Nov 2002, 08:26
von detlev
@ Contenido - Entwickler für Version 4.4 o.ä.

Das halte ich für ein sinnvolles Regulierungswerkzeug.
Zusätzlich zum Gesamtgröße der directorys sollte man vielleicht noch andenken, die filesize der einzelnen upload-Dateien beschränken zu können, damit nicht Riesenbilddateien von unbedarften Redaktueren im Internetauftritt auftauchen.

Gruß
Detlev

Verfasst: Mo 4. Nov 2002, 08:34
von idea-tec
@detlev
wenn ich nicht komplett vertrottelt bin ist das bereits drinne:
echo " <INPUT type=file size=50 maxlength=100000 name=\"userfile\" accept=\"*\">";
das sollte eine erlaubte Größe von 100 kb darstellen!!!

Verfasst: Mo 4. Nov 2002, 12:17
von Sven777b
@idea-tec:

vertrottelt bist du nicht... aber die Eigenschaft maxlength wurde nicht ins neue HtmL übernommen. Will sagen - ältere Browser akzeptieren diese Eigenschaft - neuere hingegen nicht. Um den Upload zu testen habe ich gestern jeweils 500kb-Dateien hochgeladen. Der IE hat keinen Fehler gemeldet. Opera dagegen meldet IMHO das die Datei größer als 100kb ist.

Verfasst: Di 5. Nov 2002, 20:28
von günter
Super, es klappt :D

Ich hab erst Heute Zeit zum Testen . Danke Sven !
Eines, möchte ich noch schnell schreiben, und zwar muss es beim Einfügen der Tabelle so heissen (ein Leerzeichen vor DEFAULT)

Code: Alles auswählen

ALTER TABLE `con_upl` ADD `size` INT UNSIGNED DEFAULT '0' NOT NULL ;
Es stimmt, was Sven schreibt, dass es bei einigen Browsern teilweise mit uploads noch klemmt.

Ein paar Links dazu hab ich schon mal durchgelesen, die über die beiden
Phpfunktionen is_uploaded_file() und move_uploaded_file() handeln.

http://www.php-center.de/de-html-manual ... pload.html und
http://www.dclp-faq.de/q/q-formular-upload-php4.html oder
http://www.dclp-faq.de/q/q-formular-meh ... pload.html

Verfasst: Di 5. Nov 2002, 23:16
von Eppi
in der nächsten Version wird es die Möglichkeit geben, Den Uploadbereich zu beschränken und die maximale Größe der einzelnen Dateien zu definieren. Die Beschränkung einzelner Verzeichnisse werde ich nicht einbauen.