SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Веб-разработка

Почему 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(): проверяйте результат самой операции чтения. Между проверкой и открытием файл способен измениться или исчезнуть.

Документация