$_FILES['bild']['tmp_name'] überprüfen ob vorhanden?
Matthias
- php
0 Tom0 dedlfix0 Matthias0 Der Martin0 Vinzenz Mai0 ChrisB0 dedlfix
Ich überprüfe die Bildinformationen mit:
$picture = getimagesize ($_FILES['bild']['tmp_name']);
wenn aber kein Bild in meiner Var drin ist, bekomme ich eine Fehlermeldung. ich habe schon versucht es mit
isset abzufangen, aber es klappt nicht. Kann mir jemand sagen wie ich die Fehlermeldung abfange?
Matthias
Hello,
$picture = getimagesize ($_FILES['bild']['tmp_name']);
wenn aber kein Bild in meiner Var drin ist, bekomme ich eine Fehlermeldung. ich habe schon versucht es mit
isset abzufangen, aber es klappt nicht. Kann mir jemand sagen wie ich die Fehlermeldung abfange?
Frag erst nach, ob der Upload von PHP als fehlerfrei erkannt wurde.
Wenn genau ein File hochgeladen wurde, ist
$_FILES['bild']['error']) === UPLOAD_ERR_OK
if (isset($_FILES['bild']['error']) and $_FILES['bild']['error']) === UPLOAD_ERR_OK)
{
$pic_data = getimagesize ($_FILES['bild']['tmp_name']);
}
Dann kannst Du auch davon ausgehen, dass ein tmp_name vorhanden ist für das File.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
$picture = getimagesize ($_FILES['bild']['tmp_name']);
wenn aber kein Bild in meiner Var drin ist, bekomme ich eine Fehlermeldung. ich habe schon versucht es mit isset abzufangen, aber es klappt nicht. Kann mir jemand sagen wie ich die Fehlermeldung abfange?
Da ist kein Bild sondern der Pfad zu einer Datei drin. Wenn was anderes (außer NULL) drin ist, ergibt isset() immer true, ist also keine geeignete Test-Funktion.
Frag erst nach, ob der Upload von PHP als fehlerfrei erkannt wurde.
Wenn genau ein File hochgeladen wurde, ist$_FILES['bild']['error']) === UPLOAD_ERR_OK
Besser wäre is_uploaded_file() zu befragen.
Früher hatte (nach meinen Erinnerungen) die Funktion auch bei ungültigen Bilddateien einen Fehler geworfen, was aber wohl nicht mehr der Fall ist. Da half nur der Einsatz des @-Operators. Auftretende Fehler erkennt man programmtechnisch sowieso am Rückgabewert der Funktion.
Lo!
Wenn ich es richtig verstanden habe dann so:
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
aber dann bekomme ich folgende Fehlermeldung:
Undefined index: userfile
Matthias
Hallo,
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
Undefined index: userfile
das heißt, $_FILES['userfile'] existiert nicht, ein Upload einer Datei mit diesem Namensfeld hat also nicht stattgefunden. Genau das solltest du aber erst mit isset() abfragen. Was ist dir dabei nicht gelungen?
So long,
Martin
Verstehe ich das richtig:
if(isset(is_uploaded_file($_FILES['userfile']['tmp_name'])))
Matthias
Hallo,
Verstehe ich das richtig:
if(isset(is_uploaded_file($_FILES['userfile']['tmp_name'])))
nein, anscheinend nicht.
Es hat keinen Sinn zu fragen, ob es in Rudersberg eine Heinz-Erhardt-Straße gibt, wenn noch nicht bekannt ist, ob Rudersberg überhaupt existiert.
Auf dein Beispiel bezogen: Du kannst nicht nach der Existenz von $_FILES['userfile']['tmp_name'] fragen, wenn nicht einmal $_FILES['userfile'] existiert.
Ciao,
Martin
Hello,
Verstehe ich das richtig:
if(isset(is_uploaded_file($_FILES['userfile']['tmp_name'])))nein, anscheinend nicht.
Es hat keinen Sinn zu fragen, ob es in Rudersberg eine Heinz-Erhardt-Straße gibt, wenn noch nicht bekannt ist, ob Rudersberg überhaupt existiert.
Auf dein Beispiel bezogen: Du kannst nicht nach der Existenz von $_FILES['userfile']['tmp_name'] fragen, wenn nicht einmal $_FILES['userfile'] existiert.
Das stimmt nicht wirklich.
Nach
if (isset($_FILES['userfile']['tmp_name']))
kann er in PHP jederzeit fragen. Das Ergebnis von isset() sagt aber nichts darüber aus, in welcher Tiefe
1) $_FILES
2) $_FILES['userfile']
3) $_FILES['userfile']['tmp_name']
die Struktur und damit auch die Variable existiert.
Das müsste er, wenn es denn notwendig wäre, Stufe für Stufe verifizieren.
Darum hatte ich vorgeschlagen, zuerst
if (isset($_FILES['bild']['error']) and $_FILES['bild']['error']) === UPLOAD_ERR_OK)
zu prüfen, denn wenn diese Bedingungskombination erfüllt ist, muss auch ein File vorhanden sein, von dem man dann auch gerne noch prüfen mag, ob es ein "uploaded File" ist. Das hat aber gar keinen Zweck, wenn der Upload als solcher schon fehlerhaft war.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
kleine Korrektur. Meine Ausage betrifft den Fehlerfall...
Das Ergebnis von isset() sagt aber bei false als Antwort nichts darüber aus, in welcher Tiefe
1) $_FILES
2) $_FILES['userfile']
3) $_FILES['userfile']['tmp_name']die Struktur und damit auch die Variable noch existiert.
Das müsste er, wenn es denn notwendig wäre, Stufe für Stufe verifizieren.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
Nach
if (isset($_FILES['userfile']['tmp_name']))
kann er in PHP jederzeit fragen.
ja, nur dass als Ergebnis drei unterschiedliche Fälle möglich sind:
a) true: Das angefragte Element existiert
b) false: Das angefragte Element existiert nicht
c) false + Notice-Meldung: Das angefragte Element existiert nicht, nicht einmal dessen Elternelement
Fall c) scheint bei Matthias vorzuliegen. Er fragt nach $_FILES['userfile']['tmp_name'] und bekommt eine Notice-Meldung. Also "fehlt" ihm nicht nur $_FILES['userfile']['tmp_name'], sondern auch schon das übergeordnete $_FILES['userfile'], was er vorher erst abprüfen müsste.
Das Ergebnis von isset() sagt aber nichts darüber aus, in welcher Tiefe
1) $_FILES
2) $_FILES['userfile']
3) $_FILES['userfile']['tmp_name']die Struktur und damit auch die Variable existiert.
Das müsste er, wenn es denn notwendig wäre, Stufe für Stufe verifizieren.
Genau das wollte ich mit meinem vorherigen Beitrag schon veranschaulichen.
Darum hatte ich vorgeschlagen, zuerst
if (isset($_FILES['bild']['error']) and $_FILES['bild']['error']) === UPLOAD_ERR_OK)
zu prüfen
Das würde ebenfalls eine Notice werfen, wenn schon $_FILES['bild'] nicht existiert.
Ciao,
Martin
Hello,
c) false + Notice-Meldung: Das angefragte Element existiert nicht, nicht einmal dessen
Elternelement
Das habe ich noch nie erlebt, dass bei isset() eine Notice kommt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
c) false + Notice-Meldung: Das angefragte Element existiert nicht, nicht einmal dessen Elternelement
Auch in dem Fall kommt keine Fehlermeldung. Deswegen ist ja isset() ein Sprachkonstrukt und keine Funktion, so dass das, was da als Argument angegeben ist, nicht bereits vor Funktionsaufruf aufzulösen versucht wird.
Lo!
Hi,
Nach
if (isset($_FILES['userfile']['tmp_name']))
kann er in PHP jederzeit fragen.ja, nur dass als Ergebnis drei unterschiedliche Fälle möglich sind:
a) true: Das angefragte Element existiert
b) false: Das angefragte Element existiert nicht
c) false + Notice-Meldung: Das angefragte Element existiert nicht, nicht einmal dessen ElternelementFall c) scheint bei Matthias vorzuliegen. Er fragt nach $_FILES['userfile']['tmp_name'] und bekommt eine Notice-Meldung. Also "fehlt" ihm nicht nur $_FILES['userfile']['tmp_name'], sondern auch schon das übergeordnete $_FILES['userfile'], was er vorher erst abprüfen müsste.
Nein, müsste er nicht - weil PHP bei isset in Bezug auf Arrays so „tolerant“ ist, sich nicht darum zu kümmern, ob die vorherigen Ebenen alle existieren.
Darum hatte ich vorgeschlagen, zuerst
if (isset($_FILES['bild']['error']) and $_FILES['bild']['error']) === UPLOAD_ERR_OK)
zu prüfenDas würde ebenfalls eine Notice werfen, wenn schon $_FILES['bild'] nicht existiert.
Nein, würde es nicht.
MfG ChrisB
Hello,
Nein, müsste er nicht - weil PHP bei isset in Bezug auf Arrays so „tolerant“ ist, sich nicht darum zu kümmern, ob die vorherigen Ebenen alle existieren.
PHP wertet die Bezeichnerkette einfach von links nach rechts aus. Solange kein Glied fehlt, wird weiter ausgewertet.
Darum hatte ich vorgeschlagen, zuerst
if (isset($_FILES['bild']['error']) and $_FILES['bild']['error']) === UPLOAD_ERR_OK)
zu prüfenDas würde ebenfalls eine Notice werfen, wenn schon $_FILES['bild'] nicht existiert.
Nein, würde es nicht.
Hierzu entsteht der Artikel im WIKI
http://wiki.selfhtml.org/wiki/Artikel:PHP/File_Upload
Mir dünkt, dass man auf die Zusammenhänge zwischen HTML-Formular und $_FILES-Array in PHP doch noch genauer (mit einer Zeichnung) eingehen könnte.
Immerhin gibt es ja auch noch die Unterscheidung zwischen Single-Upload und Multi-Upload. PHP verwendet für beide Varianten unterschiedliche Datenmodelle des $_FILES-Array.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo Matthias,
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
aber dann bekomme ich folgende Fehlermeldung:
Undefined index: userfile
warum bist Du verwundert. Deinem Erstbeitrag entnehme ich, dass Dein Formularfeld
bild
heißt und nicht
userfile
Um den Fehlerunterdrückungsoperator wirst Du wohl nicht herumkommen. Die Dateien sind Benutzereingaben und Du kannst nicht ausschließen, dass jemand einfache Textdateien oder unpassende Binärdateien hochlädt.
Freundliche Grüße
Vinzenz
Hi,
Wenn ich es richtig verstanden habe dann so:
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
aber dann bekomme ich folgende Fehlermeldung:
Undefined index: userfile
Dann wurde wohl unter dem Parameter-Namen userfile keine Datei hochgeladen.
Hast du das jetzt einfach per copy&paste übernommen, ohne daran zu denken, dass entsprechend der Benamung des Feldes in deinem Formular anzupassen ...?
MfG ChrisB
Hi!
Wenn ich es richtig verstanden habe dann so:
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
aber dann bekomme ich folgende Fehlermeldung:
Undefined index: userfile
Generell solltest du erst einmal prüfen, ob überhaupt ein Upload stattgefunden hat. Dafür ist die Existenz der Einträge in $_FILES zu prüfen und auch ob Fehler im error-Eintrag angezeigt werden. is_uploaded_file() ist dann erst der nächste Schritt, um zu prüfen, ob der Wert im Dateiname-Feld auf eine hochgeladene Datei verweist.
Lo!