Dateien hochladen, Grössenabfrage

grimoh

Mitglied
Hallo,

ich habe ein Problem:

Ich möchte eine Datei per PHP hochladen mit folgendem Formular:

PHP:
<?php if($access<3) { echo $noacc; } else { ?>
<form action="index.php?show=uploaded"method="post" enctype="multipart/form-data">
<p>Bitte Datei auswählen:<br>
<input value="10000000" name="MAX_FILE_SIZE" type="hidden">
<input type="file" class="form" name="file" /><br>
URL: ../files/upload/XXXX.xxx max.10MB<br>
<input type="submit" name="senden" class="form" value="Hochladen" />
</form>
<?
}
?>

Und mit dieser Datei, wird alles ausgeführt!

PHP:
<?

$file=$_FILES['file']['name'];

$filetmp=$_FILES['file']['tmp_name'];

$filesize=$_FILES['file']['size'];

$error = $_FILES['file'] ['error'];

if (!file_exists("files/upload/$file") && $error == 0 ){
	
        copy($filetmp, "files/upload/$file");
	move_uploaded_file($filetmp, "files/upload/$file");
		print "Datei hochgeladen";?>
		<br>
		<a href="index.php?show=admin">Weiter</a>
		<? }
		 	else {
				print "Die Datei ist zu groß oder bereits vorhanden!";
				?><br><a href="index.php?show=upload">Nochmal</a><?
			}
			?>

So, jetzt zu meinem Problem!

Es soll sofort die Fehlermeldung ausgegeben werden, wenn die Datei zu gross ist!
Jedoch macht er das bei mir so, dass er die Datei erst lädt und nachher die Fehlermeldung gibt! Was mache ich falsch?

Danke schonmal!

Gruss

Grischa
 
Hallo!

Da das Script serverseitig ausgeführt wird, kann es die Dateigrösse auch erst serverseitig prüfen.
Oder einfacher ausgedrückt: das Script sagt zum Server "hey, prüfe mal die Dateigrösse", dazu muss dem Server die Datei aber ja erstmal zur Verfügung stehen.

Wenn Du die Dateigrösse schon clientseitig prüfen willst, könntest Du z.b. zusätzlich JavaScript einsätzen.
Dass funktioniert natürlich nur wenn der Anwender JavaScript nicht deaktiviert hat (daher ist es auch nur zusätzlich einzubinden.... wenn überhaupt).

Im übrigen stimmt deine Grössenangabe nicht:
10 MB x 1.000 x 1.000 = 10.000.000 Byte
muss heissen:
10 MB x 1.024 x 1.024 = 10.485.760 Byte.
Nach deiner Rechnung währen es also 9,54 MB (aufgerundet).

Gruss Dr Dau
 
Zurück