Willkommen in der Webstatt
User-1 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?
User-2 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

User-3 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?

User-2 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.

User-1 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 ....

User-2 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']?

xyz-141el

User-1 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?

User-4 am 10.03.06 08:01

Quote
Original von xyz-76
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?

User-1 am 10.03.06 08:19

weil es nicht in meiner kompetenz liegt

User-4 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

User-5 am 10.03.06 10:08

Quote
Original von xyz-76
getimagesize($_FILES["upload3"]["tmp_name"]);

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


Getimagesize von einem Ordner wird auch nicht funktionieren

User-2 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?

User-1 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?

User-5 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

User-2 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

User-1 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 :)

User-6 am 10.03.06 12:07

Quote
Original von xyz-141el
$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'].

xyz-141el, ich fürchte, du bist nicht mehr ganz so fit in PHP ;)

User-2 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

User-6 am 10.03.06 12:44

Quote
Original von xyz-141el
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.

User-2 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.


xyz-141el

User-6 am 10.03.06 13:30

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

Daran ist auch nichts falsch.

User-2 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...

User-6 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?
xyz-48n 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