Wie Sie schon sagten, wenn auf einer nicht vorhandenen Datei verwendet, erzeugt getimagesize eine Warnung:
Dieser Code:
if ($data = getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
erhalten Sie eine
Warning: getimagesize(not-existing.png) [function.getimagesize]:
failed to open stream: No such file or directory
Eine Lösung wäre es, die @ operator zu verwenden, diesen Fehler zu maskieren:
if ($data = @getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
Da die Datei nicht existiert, wird $ Daten noch falsch sein; aber keine Warnung wird angezeigt.
Eine andere Lösung wäre check if the file exists, bevor getimagesize verwendet wird; so etwas wie dies tun würde:
if (file_exists('not-existing.png') &&
($data = getimagesize('not-existing.png'))
) {
echo "OK";
} else {
echo "NOT OK";
}
Wenn die Datei nicht existiert, wird getimagesize nicht genannt - was bedeutet, dass keine Warnung
Dennoch ist diese Lösung nicht die, die Sie für Bilder verwenden sollten, die auf einem anderen Server und Zugriff über HTTP (wenn Sie in diesem Fall sind), da dies zwei Anfragen an den Remote-Server bedeutet.
Für lokale Bilder, das wäre ganz OK, nehme ich an; Das einzige Problem, das ich sehe, ist die Meldung, wenn ein Lesefehler nicht maskiert wird.
Endlich:
- ich Fehler erlauben würde, auf Ihrem developpement Server angezeigt werden,
- Und wäre nicht die auf dem Produktionsserver angezeigt werden - siehe
display_errors
, darüber ;-)
Wohlgemerkt, wenn file_exists() erzählt die Datei vorhanden ist, getimagesize() kann immer noch nicht, wie die Datei in zwischen Methodenaufrufen nur gelöscht werden. Veeery unwahrscheinlich, aber passiert in den schlimmsten Momenten ... – ya23
@ ya23: true; aber du müsstest sehr unglücklich sein ^^ Und ich mag es nicht, Fehler mit @ zu maskieren: Wenn du es verwendest und ein Problem hast, ist es im Allgemeinen schnell ein Problem zu debuggen :-( –
Nun, ich denke, das @ ist ziemlich dreckig :) – Gigala