L' unica soluzione se vuoi un controllo sicuro è quella di leggersi il file in modalità binaria.

Ti leggi l'header e controlli se i byte dell' header corrispondono con il tipo di file.
Ti faccio un esempio:
I file pdf (credo sia lo standard) hanno i primi 8 byte comuni per esempio un file pdf versione 1.4 qualsiasi avrà dalla posizione 0 alla posizione 8 i seguenti valori in esadecimale:

25 50 44 46 2d 31 2e 34

Con un editor esadecimale puoi facilmente verificare la cosa.
Questi byte codificati in ASCII rappresentano la stringa:
%PDF-1.4

quindi con un qualsiasi linguaggio di programmazione (in questo caso php) puoi aprire il file in php:
Codice PHP:
$stream=fopen("file.pdf"rb); 
A questo punto ti leggi i primi 8 byte se ti interessa la versione oppure primi 4 i byte se ti interessa solo il formato. In php (supponendo che ti interessa solo il formato)
Codice PHP:
$format=fread($stream4); 
Chiudi il flusso xchè non ti interessa più lavorare sul contenuto del file
Codice PHP:
fclose($stream); 
e a questo punto puoi fare un confronto su $format. Se questa contiene la stringa %PDF allora il file è sicuramente un pdf.

Quindi per concludere il codice che doveresti inserire in un ipotetica funzione che ti riconosce se un file è in formato pdf è:
Codice PHP:
function isPdf($filename){
     
$stream=fopen($filenamerb);
     
$format=$fread=($stream4);
     
fclose($stream);

     return 
ereg("^.PDF"$format) ? 0;

In conclusione questo è un metodo molto sicuro per riconoscere un tipo di file, ma non è sicuro al 100% in quanto qualcuno potrebbe tranquillamente crearti un file con un header "%PDF-1.4" e poi inserire dopo l' header qualsiasi cosa. La probabiltà che questo accada è comunque bassa.
In ogni modo con questa tecnica controlli solo che il file sia scritto nel formato da te desiderato e non ti è comunque garantito che il file che stai esaminando sia stato scritto correttamente.

Per i file .exe e .dd di cui hai bisogno, non conosco come sono fatti, cmq puoi facilmente trovarti l'header file aprendo dei file .exe o .dd con un editor esadecimale e cercando di capire tra i primi 20 - 30 byte le uguaglianze che ci sono, a quel punto sei in grado di scriverti una funzione simile a isPdf che faccia le stesse cose per i file .exe e.dd.