Willkommen in der Webstatt Zum Webstatt Blog und Stories
gecko am 09.03.06 09:04

hallo

ich möchte die bildbreite-und höhe beim upload limitieren (z.b. max.150x150 pixel).

ich versuch es so, wird aber ignoriert:

$upload_groesse = getimagesize($_FILES["upload3"]["upload_groesse"]);
if($upload_groesse[0] > $max_pic_width or $upload_groesse[1] > $max_pic_height){
$error_meldung ="Die max. zulässige Bild-Dimension von&nbsp;<strong>" .$max_pic_width."*".$max_pic_height."</strong>
&nbsp;wurde überschritten.";
}


weiss jemand wieso?

netcup.de Warum gibt es hier Werbung?
Michael Michael am 09.03.06 09:59

Wird das Bild trotzdem hochgeladen? Oder wird die Fehlermeldung nicht gesetzt?

Über ersteres kann man anhand des Codestücks nicht viel sagen - das Programm bricht ja bei deiner Fehlermeldung nicht ab; wird die Fehlermeldung nicht gesetzt solltest du folgenden Dinge überprüfen:
- stimmen die Werte in $upload_groesse (also $upload_groesse[0] und $upload_groesse[1])
- stimmen die beiden Maximalwerte

Micheal

Micha Micha am 09.03.06 10:09

was soll das
getimagesize($_FILES["upload3"]["upload_groesse"]);
denn überhaupt?

müsste das nicht eher
getimagesize($_FILES["upload3"]["tmp_name"]);
heißen?

Michael Michael am 09.03.06 10:12

Ich habe angenommen upload_groesse wäre der Feldname in der Form...
Falls nicht würde das natürlich erklären warum die IF Bedinung nie true wird.

gecko am 09.03.06 12:25

seit der umstellung auf register_globals=off funzt einfach vieles nicht mehr und ich bin - wie ihr unschwer festgestellt habt - nicht der php-voll-profi...

ich hab ein datei-feld mit namen "upload3". das bild selber wird aus technischen gründen hidden übergeben (bild3).

diese variante hab ich auch schon probiert:

getimagesize($_FILES["upload3"]["tmp_name"]);

das bild wird hochgeladen. die prüfung nach dem mime-type und die prüfung max. KB funktionieren.
nur die bild-dimension nicht.

was z.b. auch nicht mehr funktioniert ist das physische löschen des bildes auf dem server. früher ging das problemlos so:

if ($delete3 == "Y")
{
unlink("../../upload/bilder/$bild3");
$bild3 = "";
}


jetzt gibt er an, das file nicht zu finden, resp. es handle sich um ein verzeichnnis, obwohl am ganzen verzeichnis/system nie was geändert wurde.

Warning: unlink(../../upload/bilder/) [function.unlink]: Is a directory in ....

Michael Michael am 09.03.06 12:51

Dein zweites Problem ist einfach zu lösen:

Durch die Umstellung auf register_globals=off sind Daten aus der URL nicht mehr unter $variablenname sondern unter $_GET['variablenname'] erreichbar - Daten aus Formularen (bei Verwendung der POST Methode) unter $_POST['variablenname'].
Auf das Feld delete3 oder bild3 greifst du also nicht mehr mit $delete3/$bild3 zu sondern mit $_POST['delete3']/$_POST['bild3'].
An der Fehlermeldung erkennst du ja auch, dass $bild3 keinen Wert enthält.

Zu deinem ersten Problem:

Der Zugriff auf die hochgeladene Datei erfolg mit $_FILES['upload3']['tmp_name'].
$upload_groesse = getimagesize($_FILES['upload3']['tmp_name']);
müsste eigentlich funktionieren...
Welcher Wert steht denn in $_FILES['upload3']['tmp_name']?

Michael

gecko am 10.03.06 04:27

danke erst mal für die erklärung

print_r($_FILES["upload3"]["tmp_name"]); gibt folgendes aus:

/tmp/phpOJZhlV

hilft das weiter?

sebastian am 10.03.06 08:01

Quote
Original von gecko
seit der umstellung auf register_globals=off funzt einfach vieles nicht mehr und ich bin - wie ihr unschwer festgestellt habt - nicht der php-voll-profi...


Warum stellst du es nicht einfach wieder um?

gecko am 10.03.06 08:19

weil es nicht in meiner kompetenz liegt

sebastian am 10.03.06 08:22

Hmm, dann würde ich mich echt nach Alternativen umschauen und nicht meine ganze Programmierung umstellen. Aber das nur nebenbei

Julian am 10.03.06 10:08

Quote
Original von gecko
getimagesize($_FILES["upload3"]["tmp_name"]);

Quote
Original von gecko
print_r($_FILES["upload3"]["tmp_name"]); gibt folgendes aus:
/tmp/phpOJZhl


Getimagesize von einem Ordner wird auch nicht funktionieren

Michael Michael am 10.03.06 10:35

Quote
Warum stellst du es nicht einfach wieder um?

Das meinst du hoffentlich nicht ernst. Wir sollten froh sein, dass mittlerweile fast überall register_globals endlich off ist...

Quote
print_r($_FILES["upload3"]["tmp_name"]); gibt folgendes aus:
/tmp/phpOJZhl

Das ist doch der Dateiname oder? Eventuell muss noch die Endung hintendran, damit getimagesize richtige funktioniert?

gecko am 10.03.06 11:00

Quote
Getimagesize von einem Ordner wird auch nicht funktionieren

@julian:
die lösung?

@michael:
kannst du mir sagen,wie ich dann der code geändert werden muss? ich lade ein normales *.jpg oder *.gif file.

wieso muss ich bei der prüfung noch eine endung definieren?

Julian am 10.03.06 11:03

Die Funktion getimagesize() braucht den kompletten Dateinamen. Also inklusive der Dateiendung, naja und gegebenenfalls den Pfad zu der Datei.
Was du da hast ist entweder nur der Pfad oder der Pfad + Datei, aber ohne Dateiendung.
Ich weiß nicht wo die Variable $_FILES["upload3"]["tmp_name"] entsteht, aber dir ist auf jedenfall die Dateiendung verloren gegangen.

Nochmal ein bisschen Zeugs zum nachlesen:
http://de2.php.net/function.getimagesize
http://www.phpcenter.de/de-html-manual/function.getimagesize.html

Michael Michael am 10.03.06 11:04

Ich meinte nur, dass getimagesize vielleicht nicht mit einem Dateinamen ohne Typ auskommt. Einfach noch die Endung des Typs anhängen

$type = 'gif';
$filename = $_FILES["upload3"]["tmp_name"].$type;

Aber eigentlich glaube ich gar nicht, dass hier der Fehler liegt. Ich erde mir das später nochmals ausführlicher anschauen wenn ich zuhause bin

gecko am 10.03.06 11:16

ok, werd mich da auch nochmal ranmachen.

vorläufig dank ich euch mal recht herzlich für die hilfe :)

milahu milahu am 10.03.06 12:07

Quote
Original von Michael
$filename = $_FILES["upload3"]["tmp_name"].$type;

Möp, falsch. Abgesehen davon, dass die Datei nicht existiert, braucht getimagesize() keine Dateiendung, nur der korrekten Dateipfad - in dem Fall $_FILES['upload3']['tmp_name'].

Michael, ich fürchte, du bist nicht mehr ganz so fit in PHP ;)

Michael Michael am 10.03.06 12:39

Das befürchte ich auch, denn ich sehe nicht einmal jetzt warum die Datei nicht existiert...

Allerdings habe sogar ich erkannt, dass der Fehler hier vermutlich nicht liegt :)

Quote
Aber eigentlich glaube ich gar nicht, dass hier der Fehler liegt. Ich erde mir das später nochmals ausführlicher anschauen wenn ich zuhause bin

milahu milahu am 10.03.06 12:44

Quote
Original von Michael
Das befürchte ich auch, denn ich sehe nicht einmal jetzt warum die Datei nicht existiert...

Weil die temporäre Datei im Pfad $_FILES["upload3"]["tmp_name"] liegt und erst nach $_FILES["upload3"]["tmp_name"].$type verschoben werden müsste.

Michael Michael am 10.03.06 12:49

Hier verstehen wir uns einfach falsch ;)

Ich dachte du meintest, dass die Datei $_FILES["upload3"]["tmp_name"] nicht existiere.

Meine $_FILES["upload3"]["tmp_name"].$type Konstruktion bezog sich nur darauf, dass ich die Möglichkeit betrachtete, getimagesize benötige den Dateityp, also er würde in $_FILES["upload3"]["tmp_name"] fehlen.
Wie mein Zitat zeigt, glaubte aber ich selbst nicht wirklich daran.

Aber hast du eine Ahnung wo das Problem liegt? Ich sehe nicht, was hier getimagesize($_FILES["upload3"]["tmp_name"]); nicht stimmt.


Michael

milahu milahu am 10.03.06 13:30

Quote
Original von Michael
Ich sehe nicht, was hier getimagesize($_FILES["upload3"]["tmp_name"]); nicht stimmt.

Daran ist auch nichts falsch.

Michael Michael am 10.03.06 13:40

Aber

$upload_groesse = getimagesize($_FILES["upload3"]["tmp_name"]);
if($upload_groesse[0] > $max_pic_width or $upload_groesse[1] > $max_pic_height){


klappt ja augenscheinlich nicht...

milahu milahu am 10.03.06 13:47

Verzeihung, bin schon ganz durcheinander hier...

Quote
ich hab ein datei-feld mit namen "upload3". das bild selber wird aus technischen gründen hidden übergeben (bild3).

Du meinst, Upload und Prüfung finden nicht im selben Skript statt?
Dann solltest du bedenken, dass die temporäre Datei nur während der Skriptlaufzeit existiert.

Und eine Datei, die nicht existiert, lässt sich nun mal schlecht verarbeiten...

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt