Tak jak powiedziałeś, jeśli są stosowane w sposób wolny od istniejącego pliku, getimagesize generuje ostrzeżenie:
Ten kod:
if ($data = getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
będzie Ci
Warning: getimagesize(not-existing.png) [function.getimagesize]:
failed to open stream: No such file or directory
Rozwiązaniem byłoby użyć @ operator, aby zamaskować ten błąd:
if ($data = @getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
Jako plik nie istnieje, $ dane nadal będą false; ale żadne ostrzeżenie nie zostanie wyświetlone.
Innym rozwiązaniem byłoby check if the file exists, przed użyciem getimagesize; coś takiego zrobi:
if (file_exists('not-existing.png') &&
($data = getimagesize('not-existing.png'))
) {
echo "OK";
} else {
echo "NOT OK";
}
Jeśli plik nie istnieje, getimagesize nie nazywa - co oznacza brak ostrzeżenia
Mimo to rozwiązanie nie jest jeden należy użyć dla obrazów, które są na innym serwerze i dostęp przez HTTP (jeśli tak jest w tym przypadku), ponieważ będzie to oznaczać dwa żądania do zdalnego serwera.
Dla obrazów lokalnych, to byłoby całkiem OK, jak przypuszczam; Jedyny problem, jaki widzę, to komunikat generowany, gdy błąd odczytu nie jest zamaskowany.
Wreszcie:
- bym pozwalają błędy mają być wyświetlane na serwerze DÉVELOPPEMENT,
- i nie wyświetli ci na serwerze produkcyjnym - patrz
display_errors
, o tym ;-)
pamiętajcie, jeśli file_exists() mówi plik istnieje, getimagesize() może jeszcze nie, jak plik może zostać usunięty tylko pomiędzy wywołaniami metod. Veeery mało prawdopodobne, ale zdarza się w najgorszych chwilach ... – ya23
@ ya23: true; ale będziesz musiał mieć bardzo pecha ^^ A ja nie lubię maskowania błędów za pomocą @: jeśli używasz go i masz problem, to ogólnie rzecz biorąc, szybkie bądzenie debugowania :-( –
Cóż, myślę, że @ jest dość brudne :) – Gigala