Почему file_exists() в PHP возвращает false
file_exists() проверяет существование файла или каталога по указанному пути. Начните с точного пути и рабочего каталога процесса PHP: относительный путь интерпретируется относительно текущего каталога, а не обязательно относительно файла скрипта.
Привязать путь к скрипту
<?php
$path = __DIR__ . '/data/example.txt';
var_dump($path, file_exists($path));Проверьте фактическое имя, регистр символов, расширение и отсутствие невидимых пробелов. Не выводите внутренние пути в публичный HTTP-ответ рабочего приложения: такой диагностический вывод предназначен для тестовой среды.
Учитывайте права процесса
Проверку выполняет пользователь PHP-процесса, который может отличаться от пользователя терминала. Ему нужны соответствующие разрешения на путь. Не исправляйте проблему рекурсивным chmod 777: установите минимальные права для нужного пользователя и проверьте ограничения окружения.
Когда данные менялись в том же процессе
clearstatcache(true, $path);
$exists = file_exists($path);PHP кеширует часть результатов проверки состояния файлов. Очистка кеша имеет смысл при изменении файлов в длительно работающем процессе, но не исправляет неверный путь.
Существование не равно доступности содержимого
Если нужно отличить файл от каталога, используйте is_file()/is_dir(). Не делайте вывод о возможности прочитать файл только по file_exists(): проверяйте результат самой операции чтения. Между проверкой и открытием файл способен измениться или исчезнуть.