Controlla come va passato alla file_exists() il percorso al file da controllare.

L'80% dei problemi con quella funzione è imputabile a errori di questo tipo: path assoluti, relativi, fisici, virtuali, con o senza slash, etc.