Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Datei-Upload mit Größen-Beschr.? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Datei-Upload mit Größen-Beschr.?


 
langerxxx
05-01-2004, 01:57 
 
Hallo zusammen,

aus den vielen hervorragenden Code-Schnipseln und Beiträgen hier im Forum habe ich ein Upload-Skript gebastelt, welches auch wunderbar funktioniert.
Was leider noch fehlt: Ich möchte die Maße des Banners überprüfen und bei einer Länge > 468 Pixel und/oder einer Höhe > 60 Pixel eine entsprechende Fehlermeldung ausgeben und den Upload zurückweisen.

Hat jemand eine Idee, wie man das umsetzen könnte? Die Funktion getimagesize() habe ich ausprobiert, aber leider wohl nicht so ganz verstanden. :(

<form
action="<?php echo $_SERVER['PHP_SELF']; ?>"
method="post"
enctype="multipart/form-data">
<input type="file" name="probe" />
<input type="submit" value="Los!" />
</form>
<hr />

<?php


$MAX_FILE_SIZE = 15360;

if (isset($_FILES['probe'])
and ! $_FILES['probe']['error']
and (($_FILES['probe']['type'] == "image/pjpeg") or ($_FILES['probe']['type'] == "image/gif"))
and ($_FILES['probe']['size'] <= $MAX_FILE_SIZE)) {



move_uploaded_file($_FILES['probe']['tmp_name'], "./" . $_FILES['probe']['name']);
printf("Die Datei %s steht jetzt " .
"zur Verfügung.<br />\n",
$_FILES['probe']['name']);
printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
$_FILES['probe']['size'], $_FILES['probe']['type']);

}

else {

echo "Es ist ein Fehler aufgetreten: Das Banner darf nur vom Dateityp .gif oder .jpg sein, max.
die Maße 468*60 haben und höchstens 15 kb groß sein!";
}

Danke im voraus und viele Grüße
langerxxx

 
Tenebrael
05-01-2004, 02:59 
 
genau das hab ich zufällig mal als fertige funktion getippselt, hab sie nie brauchen können, schön, dass sie vielleicht doch noch zum einsatz kommt :)


<?
function check_imagesize($image,$mw=468,$mh=60,$ms=10000)
{
$fi = getimagesize($image);

if(($fi[0] >= $mw) || ($fi[1] >= $mh) || (filesize($image) >= $ms))
{
if($fi[0] >= $mw)echo "<p>das Bild darf maximal " . $mw . " Pixel breit sein!</p>\r\n\r\n";
if($fi[1] >= $mh)echo "<p>das Bild darf maximal " . $mh . " Pixel hoch sein!</p>\r\n\r\n";
return false;
}
else
{
return true;
}
}
?>

 
Tenebrael
05-01-2004, 03:02 
 
Eine kleine Erleuterung wäre vielleicht nciht schlecht

 
Tenebrael
05-01-2004, 03:08 
 
SCHEIßE!!! DASS MAN SEINE BEITRÄGE HIER AUCH NICHT BEARBEITEN KANN!!!

bin auf 'abschicken gekommen ;-)

also hier nochmal in deinem script:

<form
action="<?php echo $_SERVER['PHP_SELF']; ?>"
method="post"
enctype="multipart/form-data">
<input type="file" name="probe" />
<input type="submit" value="Los!" />
</form>
<hr />

<?php


$MAX_FILE_SIZE = 15360;

function check_imagesize($image,$mw=468,$mh=60)
{
$fi = getimagesize($image);

if(($fi[0] >= $mw) || ($fi[1] >= $mh) || (filesize($image) >= $ms))
{
if($fi[0] >= $mw)echo "<p>das Bild darf maximal " . $mw . " Pixel breit sein!</p>\r\n\r\n";
if($fi[1] >= $mh)echo "<p>das Bild darf maximal " . $mh . " Pixel hoch sein!</p>\r\n\r\n";
return false;
}
else
{
return true;
}
}

if (isset($_FILES['probe'])
and ! $_FILES['probe']['error']
and (($_FILES['probe']['type'] == "image/pjpeg") or ($_FILES['probe']['type'] == "image/gif"))
and ($_FILES['probe']['size'] <= $MAX_FILE_SIZE))
and(check_imagesize($_FILES['probe'])){



move_uploaded_file($_FILES['probe']['tmp_name'], "./" . $_FILES['probe']['name']);
printf("Die Datei %s steht jetzt " .
"zur Verfügung.<br />\n",
$_FILES['probe']['name']);
printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
$_FILES['probe']['size'], $_FILES['probe']['type']);

}

else {

echo "Es ist ein Fehler aufgetreten: Das Banner darf nur vom Dateityp .gif oder .jpg sein, max.
die Maße 468*60 haben und höchstens 15 kb groß sein!";
}


ACHTUNG ich hab das script eben nochmal verändert, weil es ursprünglich die grafik auch gleich speichern sollte, aber das tut dein script ja schon. also wenn du es so einsetzt wie ich das in DIESEM post geschrieben hab, dann musst du auch das script aus DIESEM post nehmen, ok?
;)

 
Günni
05-01-2004, 04:37 
 
Es ist ohne probleme möglich seine gesendeten Beiträge zu bearbeiten...

 
langerxxx
05-01-2004, 12:32 
 
Hallo Tenebrael,

erstmal Grüße nach DA und danke für den Code!

Einen kleinen Syntaxfehler (falsch gesetzte Klammer) habe ich gerade noch gefunden, allerdings treten noch zwei andere Fehler auf. Ich poste gerade mal die Fehler-Meldung und die dazugehörigen Code-Zeilen:

Warning: getimagesize: Unable to open 'Array' for reading. in /home/domaindbe/www.domain.de/fileupload/upload.php on line 19

$fi = getimagesize($image);

Warning: stat failed for Array (errno=2 - No such file or directory) in /home/domaindbe/www.domain.de/fileupload/upload.php on line 21

if(($fi[0] >= $mw) || ($fi[1] >= $mh) || (filesize($image) >= $ms))

Kann mir da jemand weiterhelfen??

cu
langerxxx

 
TobiaZ
05-01-2004, 12:40 
 
$image ist ein Array!!!

lies mal das kapitel file_upload im Manual durch!

 
Tenebrael
05-01-2004, 15:55 
 
jo, das liegt daran, dass ich immer die faule schreibweise verwendet hab, also nicht $_FILES["probe"] sondern einfach $probe. das geht halt nur wenn register_globals an ist. war ein kleiner fehler von mir...sorry...du musst ja das script mit der datei anwenden, die du später verschiebst, wenn ich aus diesem komische $_FILE array mit dem ich mich nie auseinandergesetzt hab richtig schlau werde, dann müsste das
$_FILES['probe']['tmp_name'] sein. prbier mal an der aufrufenden stelle das zu schreiben:


check_imagesize($_FILES['probe']['tmp_name'])



@günni: oops hab ich jetzt auch gemerkt, ich dachte dieser link wäre wie beim phpbb-forum am oberen rand des beitrags...hab die ganze zeit versucht den beitrag darüber zu bearbeiten ;)

 
TobiaZ
05-01-2004, 15:58 
 
das hat mit Faulheit schon nichts mehr zu tun. das ist einfach UNSAUBER!

 
langerxxx
05-01-2004, 17:23 
 
Mmh, leider hilft das nicht weiter... Könnte mir nochmal jemand auf die Sprünge helfen, wo jetzt genau der Fehler liegt. Irgendwie scheint er ja nicht an die Datei zu kommen, die auf die richtige Größe überprüfen soll.

Wäre super nett, mit Arrays hab' ich immer noch meine Schwierigkeiten.

Danke schonmal!

cu
langerxxx

 
TobiaZ
05-01-2004, 17:33 
 
welcher ist dein aktueller code?

Stell dir die Arrays einfach so vor, als wären Sie normale Variablen.

Also $hallo['welt'] also ganz normal als $hallowelt. Dann ist das verständnis etwas einfacher.

 
langerxxx
05-01-2004, 17:47 
 
Stimmt, so wird es etwas klarer... :)

Aber warum hat er denn Probleme an das Bild zu kommen? Irgendwie hänge ich hier gerade an einem logischen Problem.

Hier nochmal der aktuelle Code

<?php


$MAX_FILE_SIZE = 15360;

function check_imagesize($image,$mw=468,$mh=60)
{
$fi = getimagesize($image);

if(($fi[0] >= $mw) || ($fi[1] >= $mh) || (filesize($image) >= $ms))
{
if($fi[0] >= $mw)echo "<p>das Bild darf maximal " . $mw . " Pixel breit sein!</p>\r\n\r\n";
if($fi[1] >= $mh)echo "<p>das Bild darf maximal " . $mh . " Pixel hoch sein!</p>\r\n\r\n";
return false;
}
else
{
return true;
}
}

if (isset($_FILES['probe'])
and ! $_FILES['probe']['error']
and (($_FILES['probe']['type'] == "image/pjpeg") or ($_FILES['probe']['type'] == "image/gif"))
and ($_FILES['probe']['size'] <= $MAX_FILE_SIZE)
and check_imagesize($_FILES['probe']['name'])){



move_uploaded_file($_FILES['probe']['tmp_name'], "./" . $_FILES['probe']['name']);
printf("Die Datei %s steht jetzt " .
"zur Verfügung.<br />\n",
$_FILES['probe']['name']);
printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
$_FILES['probe']['size'], $_FILES['probe']['type']);

}

else {

echo "Es ist ein Fehler aufgetreten: Das Banner darf nur vom Dateityp .gif oder .jpg sein, max.
die Maße 468*60 haben und höchstens 15 kb groß sein!";
}

?>

Danke!

 
TobiaZ
05-01-2004, 17:51 
 
and check_imagesize($_FILES['probe']['name'])){ der name existiert nicht! Es existiert nur der temname.

 
langerxxx
05-01-2004, 18:04 
 
Ahh, jetzt ist der Groschen gefallen. name existiert ja erst, wenn die temporäre Datei verschoben worden ist. Oh man, manchmal sieht man echt den Wald vor lauter Bäumen nicht! Dabei hatte ja Tenebrael die richtige Lösung schon geschrieben.

Auf jeden Fall super vielen Dank euch allen, vor allem an Tenebrael und TobiaZ! Bin immer wieder gerne hier im Forum! :)

cu
langerxxx


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:44 Uhr.