Webstatt.org - Community seit 2006 - 2012 (2024?)

getimagesize

user-186
09.03.2006 08: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?

Avatar user-253
09.03.2006 08: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

Avatar user-251
09.03.2006 09:09

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

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

"Some people think football is a matter of life or death but it’s far more important than that." (Bill Shankley)
Avatar user-253
09.03.2006 09: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-186
09.03.2006 11: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"zwinkern 
{
unlink("../../upload/bilder/$bild3"zwinkern;
$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 ....

Avatar user-253
09.03.2006 11: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

user-186
10.03.2006 03:27

danke erst mal für die erklärung

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

/tmp/phpOJZhlV

hilft das weiter?

Unknown
10.03.2006 07:01

Original von user-186
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-186
10.03.2006 07:19

weil es nicht in meiner kompetenz liegt

Unknown
10.03.2006 07:22

Hmm, dann würde ich mich echt nach Alternativen umschauen und nicht meine ganze Programmierung umstellen. Aber das nur nebenbei
user-210
10.03.2006 09:08

Original von user-186
getimagesize($_FILES["upload3"]["tmp_name"]);

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


Getimagesize von einem Ordner wird auch nicht funktionieren

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
Avatar user-253
10.03.2006 09:35

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

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-186
10.03.2006 10:00

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-210
10.03.2006 10: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

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
Avatar user-253
10.03.2006 10: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-186
10.03.2006 10:16

ok, werd mich da auch nochmal ranmachen.

vorläufig dank ich euch mal recht herzlich für die hilfe lächeln

Avatar user-255
10.03.2006 11:07

Original von user-251el
$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 zwinkern

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-253
10.03.2006 11: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 lächeln

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

Avatar user-255
10.03.2006 11:44

Original von user-251el
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.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-253
10.03.2006 11:49

Hier verstehen wir uns einfach falsch zwinkern

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

Avatar user-255
10.03.2006 12:30

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

Daran ist auch nichts falsch.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-253
10.03.2006 12: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...

Avatar user-255
10.03.2006 12:47

Verzeihung, bin schon ganz durcheinander hier...

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

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm