Wie wäre es, wenn Du den Dateinamen beim "." aufsplittest und dann danach gehst?

z.B.

PHP-Code:
$tmp explode(".",$_FILES['datei']['name']);

switch(
$tmp[1]) {

case 
"exe":

$error false;

break;


Weiß nur geraden icht genau, wie der korrekte Arraywert für den Dateinamen ist.
Aber das Prinzip sollte klar sein.
$tmp erhält den Wert, der beim Punkt gesplitteten Teile.
bla.exe --> $tmp[0] = bla, $tmp[1] = exe. Wenn Du nun $tmp[1] switchest kannst Du mit jeder Dateiendung arbeiten.

Da es aber, wie Du sagtest auch Dateien ohne Endung gibt kannst Du mit case "": arbeiten (denke ich mal). Dann kannst Du zusätzlich mit is_file() arbeiten.

Siehe auch bei PHP.net bei explode und is_file .

War das das, was Du suchst?