Hi!
while (false === mkdir('./images/'.$catname.(($index > 0)?"_$index":''))
hier wäre jetzt vielelicht auch ausnahmsweise ein @mkdir erlaubt, da der Fehler von mkdir selber abgefangen wird. Aber man könnte diese Fehlermeldung im Produktivbetrieb auch generell abschalten bzw. (auch im Entwicklungsbetrieb) umleiten in eine Datei.
Da dieser Fehler beabsichtigt ist, ist ein @ durchaus angebracht. Man kann ja keine Fehler(typen) einzeln abschalten. Entweder alle oder keinen (die Unterscheidung nach E_... ist zu grob). Alle zu ignorieren ist auch nicht so besonders toll. Und dieser Fehler soll weder die Datei mit den wichtigen Fehlern vollmüllen, noch im Entwicklungsbetrieb ständig den Bildschirm füllen. Also @ davor. Am besten noch kommentieren, dass das Absicht ist und wegen des TOCTTOU-Problems nicht auf vorhergehendes is_dir() umgeschrieben werden kann. Nicht dass ein "@-ist-böse-Fanatiker" hier was Gutes tun will und stattdessen ein nur schwer zu findendes Problem einbaut.
Lo!