suche php funktion
Michael
- php
hi,
ich habe eine frage und zwar ob es in php eine funktion gibt die erkennt ob ein bild was normalerweise angezeigt werden soll, auf dem server zu finden ist oder nicht und dann entweder das bild ausgibt oder eine fehlermeldung...! hab schon halb google durchsucht weiß aber gar net wonach ich richtig suchen soll...! :-/ wäre um eine antwort froh!
mfg michi
versuchs mal mit file_exists($filename);
schönen gruß
.sea.monkey.
Danke!!
mfg michi
ähmm klappt soweit hab aber noch ne frage... und zwar sieht das nun so aus bei mir:
$datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
if(file_exists($datei))
{
.
.
.
.
}
else
{
echo "...";
}
es kann nun aber sein das, dass bild ein *.jpg und nicht ein *.JPG format hat! klar könnte ich noch ne if abfrage machen aber in klammer des if teiles ist sau mäßig viel code... geht das auch einfacher?
mfg michi
Hello,
das Du Dir das Problem bereits beim Hochladen des Files schaffst, musst Du es auch dort vermeiden.
Wenn Du also den gewünschten Dateinamen beim Hochladen bereits einheitlich in Kleinbuchstaben umwandelst, dann prüfst ob das File mit diesem Namen schon vorhanden ist (um ggf. Überschreiben zu vermeiden), es dann speicherst (mit move_uploaded_file() verschiebst), dann hast Du bei der Anzeige später kein Problem mehr.
if(file_exists($pfad/$dateiname)
and is_readable($pfad/$dateiname)
and is_file($pfad/$dateiname)
and getimagesize($pfad/$dateiname)
{
show($pfad/$dateiname);
}
else
{
show($pfad/$error_picture);
}
Je nachdem, ob es sich um ein Script zur direkten Ausgabe von Bildern oder um ein Script zur Erzeugung von HTML-Text handelt, musst Du im Else-Zweig ebenfalls ein Bild oder aber den Pfad auf ein Bild ausgeben. Du kannst aber NICHT den Pfad auf ein Bild ausgeben (<img src="$pfad/$dateiname" alt="Partybild" />), wenn du im if-Zweig ein Bild ausgegeben hast.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
ähmm was ist denn jetzt genau gemeint mit:
and is_readable($pfad/$dateiname)
and is_file($pfad/$dateiname)
and getimagesize($pfad/$dateiname)
was muss ich davon gebrauchen?
mfg michi
Hello,
ähmm was ist denn jetzt genau gemeint mit:
and is_readable($pfad/$dateiname)
and is_file($pfad/$dateiname)
and getimagesize($pfad/$dateiname)was muss ich davon gebrauchen?
Alles!
http://de.php.net/manual/de/function.file-exists.php
liefert die Existenz einer DATEI oder eines VERZEICHNISSES mit dem Namen
http://de.php.net/manual/de/function.is-file.php
prüft, ob es denn eine Datei ist
http://de.php.net/manual/de/function.is-readable.php
prüft, ob die datei auch gelesen werden darf
[http://de.php.net/manual/de/function.getimagesize.php]
prüft, ob es sich überhaupt um ein Bild handelt
and is_readable($pfad/$dateiname)
and is_file($pfad/$dateiname)
and ($_pic_specs = getimagesize($pfad/$dateiname))
wäre noch intelligenter, da man das Array mit den Picture Specifications dann gleich an
die Anzeigefunktion übergeben könnte, um dem Browser den passenden MIME-Typ
mitteilen zu können und nicht einen geratenen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
also muss es bei mir lauten:
$datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
$datei2 = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';
if(file_exists($datei) and file_exists($datei2))
{
.
.
.
.
}
else
{
echo "...";
}
mfg michi
Hello,
also muss es bei mir lauten:
$datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
$datei2 = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';if(file_exists($datei) and file_exists($datei2))
Nein.
In diesem Fall müsstest Du ein "inclusiv oder" verwenden, also "or".
Aber es ist für Dich besser, das Verzeichnis einmal zu überarbeiten und alle Datein auf einheitliche Klien- oder Großschreibung umzustellen. Klienschreibung ist zu bevorzugen, da Billy the Gator das bei seinen Betriebssystemen ja seit Windows XY irgendwann als Default gewählt hat und kaum noch jemand mit DOS im Internet surfen wird und damit Files uploaded.
Für die Überarbeitung kannst Du Dir natürlich eine Funktion schreiben:
Alle Dateinamen des Verzeichnisses mit glob() einlesen
Dateinamen umandeln,
prüfen ob der umgewandelte Name schon vorhanden ist
wenn nicht vorhanden, File umbenennen mit rename()
wenn vorhanden, Name in eine Liste schreiben
Liste vornehmen, um einen neuen Namen zu vergeben, der noch nicht da ist.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
das ich "o"r nehmen muss ist mir eben auch aufgefallen and ist ja quatsch immerhin soll eine der dateien ausgelesen werden im besten fall immerhin handelt sich um deine datei die dann ja folglicherweise nicht zwei endungen haben kann! aber wieso "or" und nicht "||" ??
P.S. ich wandele schons eit längeren immer die files um! aber habe so viele in so vielen ordnern, da kann es sein das man die eine oder andere schon mal vergessen hat deswegen diese sicherheit...!
mfg michi
Hello,
das ich "o"r nehmen muss ist mir eben auch aufgefallen and ist ja quatsch immerhin soll eine der dateien ausgelesen werden im besten fall immerhin handelt sich um deine datei die dann ja folglicherweise nicht zwei endungen haben kann! aber wieso "or" und nicht "||" ??
Der Unterschied liegt bei PHP nur in der Priorität der Operatoren. Bei || solltest Du sicherheitshalber nicht mit Klammern sparen. http://www.php.net/manual/de/language.operators.php
Bei JavaScript war ich neulich allerdings reingefallen, denn mit "or" kann das nix anfangen...
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
ok habs jetzt so geregelt:
$datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
$datei_2 = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';
if(file_exists($datei) || file_exists($datei_2))
{
.
.
.
.
weil ich eh nie mit klammern spare...
besten dank für die ganzen tipps!
mfg michi
Hallo
$datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
$datei_2 = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';
if(file_exists($datei) || file_exists($datei_2))
{weil ich eh nie mit klammern spare...
Gerade hier hast du keine zusätzliche Klammer, die deine Behauptung,
du spartest nicht mit selbigen, stützen würde. :-)
Vielleicht wäre auch die Umstellung der Abfrage effektiver:
$datei = "partybilder/".$party_ident."/".$pic_ident; // ohne Angabe der Endung
if (file_exists($datei.".JPG") or file_exists($datei.".jpg"))
Die Bedingung wird zwar textmäßig etwas länger, du arbeitest aber nur noch
mit _einer_ Variable für den Pfad zum Bild.
Tschö, Auge
Hallo
ähmm was ist denn jetzt genau gemeint mit:
and is_readable($pfad/$dateiname)
and is_file($pfad/$dateiname)
and getimagesize($pfad/$dateiname)was muss ich davon gebrauchen?
Das "and" sagt's schon: alles.
Wenn also eine der Bedingungen nicht zutrifft, also false zurückgibt,
ist es keine Datei, geschweige denn eine Bilddatei.
Tschö, Auge
also muss es bei mir lauten:
$datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
$datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';
if(file_exists($datei) and file_exists($datei2))
{
.
.
.
.
}
else
{
echo "...";
}
mfg michi
morgens,
versuchs mal mit file_exists($filename);
Das ist korrekt, reicht aber nicht. Du solltest Alternativen anbieten, falls die Datei existiert - oder eben nicht existiert. Also schematisch sowas:
if (file_exists($filename)) {mach irgendwas damit}
else {mach was anderes}
Grüße aus Berlin
Christoph S.