В реальном тестировании производительности вы обнаружите, что file_exists очень быстро. Как и в php, когда один и тот же URL дважды "stat" и d, второй вызов просто извлекается из внутреннего кеша статистики php.
И это только в области запуска php. Даже между запусками файловая система / ОС будет стремиться агрессивно помещать файл в кэш файловой системы, и если файл достаточно мал, тест не только будет существовать из памяти, но и весь файл тоже.
Вот некоторые реальные данные, подтверждающие мою теорию:
Я только что провёл несколько тестов производительности утилит командной строки linux "find" и "xargs". В дальнейшем я выполнил тест на наличие файлов для 13000 файлов, по 100 раз каждый, менее чем за 30 секунд, так что в среднем это 43000 тестов в секунду, поэтому, конечно, в мелком масштабе, если вы сравниваете, скажем, время медленное требуется разделить 9 на 8, но в реальном сценарии вам придется делать это ужасно раз, чтобы увидеть заметную проблему с производительностью.
Если у вас есть 43 тысяча пользователей, одновременно обращающихся к вашей странице, в течение секунды, я думаю, у вас будут гораздо большие проблемы, чем время, необходимое для копирования статуса существования файл более или менее не хватает памяти в сценарии среднего случая.