Php file exists не видит файл

Обновлено: 03.07.2024

File_exists - это функция в php, которая определяет есть ли - существует ли файл по тому пути, который вы указали:

Синтаксис функции file_exists

Давайте попробуем разобрать синтаксис функции file_exists

file_exists - название функции.

string - тип принимаемых данных функцией file_exists - строка.

$filename - название файла разрешением, либо путь до файла.

: bool - тип возвращаемого значения булев.

Как проще написать функцию file_exists

Как переводится file_exists.

Словосочетание File_exists- состоит двух английских слов

File - переводится как файл и

exists - переводится как существует .

Итого, если брать словосочетание file exists, то оно переводится скорее с вопросительным смыслом!

File already exists перевод

Очень часто вместе с file_exists идет словосочетание File already exists и многих интересует, как это переводится!?
File already exists -переводится, как файл уже существует!

Что возвращает file_exists

Для того, чтобы работать с функцией надо понимать, что возвращает функция! Поскольку file_exists предполагает два ответа, да - существует, нет - не существует, то логично, что она должна такие же данные возвращать и в php!
File_exists - возвращает в случае существования файла true, иначе false - подробнее.

Как получить возвращаемые значения относительно файла в file_exists

Для иллюстрации работы функции file_exists нам потребуется два файла, один из которых не будет существовать!

Для получения того, что возвращает функция file_exists - нам потребуется другая функция -> var_dump

Применим её к file_exists таким образом:

$home = $_SERVER["DOCUMENT_ROOT"];//путь до корневой папки

$file = "/index.html"; //главная страница сайта

Результат возврата функции file_exists к существующему файлу

Как видим, file_exists возвращает значение "true", а тип булев - как мы и говорили в синтаксисе(см.выше):

Тоже самое проделаем с файлом, который не существует! Внутри неважно что мы напишем, должно быть единственное условие, что файла не существует:

Результат возврата функции file_exists к не существующему файлу

Всего три варианта проверки file_exists

Если вы прочитаете аннотацию к функции file_exists, то могу с точностью сказать, что у вас возникнут как минимум 3 вопроса(просто . там этого не будет написано..):

Вообще существует, как минимум 3 варианта написания пути к файлу, это:

Локально(поскольку данным вариантом пути я никогда не пользуюсь, то и смыслы писать о нём нет).

Далее. в подробностях рассмотрим эти три варианта!

Существует ли файл в папке проверка локально file_exists

Предположим, что файл со скриптом и проверяемый файл лежат в одной папке, тогда можно проверить существует ли файл локально таким образом:

Если у вас на сайте единая точка входа, и оба файла подчинены этому, то file_exists вернет "true" хотя должен вернуть "false"(при отсутствующем файле. )

Нужен пример!? легко!

Если мы сейчас посмотрим в адресную строку, то мы увидим вот это:

Напишем адрес для файла, который " НЕ СУЩЕСТВУЕТ! ", который якобы лежит в этой же папке, что и данная страница. Вы можете нажать на ссылку, проверить существует ли файл на самом деле! Сайт вам вернет 404 - т.е. подтвердит, что файла по данному адресу в данной папке нет.

Другими словами, проверка существования локально "file_exists" - должна вернуть "false"!

Давайте выведем этот код прямо здесь:

- Парадокс!? Нет! Объясняется просто!

Все файлы и в том числе обрабатывающие, стекаются в одну точку -> на главную в нашем случае -> index.html(при соответствующих настройках htaccess, файл можно менять), при единой точке входа. И для скрипта проверять существование файла index.html - это проверка самого себя, как бы странно это не звучало.

Чтобы вы понимали, именно проверять таким образом локально, в приведенном примере, корневая папка, будет той локальной папкой для этой проверки существования файла!

Все файлы, например sitemap.xml, которые будут физически находиться в корневой папке сайта, file_exists будет возвращать true!


Проделаем тоже относительно нашего файла, на котором данный текст

Далее . еще более интересный эксперимент. расположим одну и ту же запись на файле. который подчиняется единой точке входа, а второй нет.

Первый файл - это данный файл и мы расположим здесь вот такую запись.

var_dump (file_exists('003_proverit_suschestvuet_li_fayl_php_file_exists.html'));

И второй файл. на котором расположим точно такую же запись, кроме названия самого файла.

Два идентичных кода с использованием функции file_exists.

Расположенных на файлах отличающихся правилом обработки единая точка входа

Будут давать противоположные ответы.

Проверка существования файла по абсолютному пути file_exists

Нам потребуется получить абсолютный путь до файла, из адресной строки и чтобы данный файл существовал! Сделаем такой специальный файл ->file_exists_ok.dat, на котором и будем испытывать функцию file_exists

Как вы думаете, что вернет функция file_exists , если применить к файлу по абсолютному пути, который существует, таким образом:

Как видим, казалось бы, файл существует, но функция file_exists возвращает false. И вывод единственный, что получить реальное положение дел относительно существования файла по абсолютному пути - не представляется возможным!

Проверка существования файла по пути на сервере file_exists

Теперь возьмем тоже самый существующий файл и применим уже не абсолютный путь, а путь на сервере до файла и вставим его в в функцию file_exists

var_dump (file_exists( $home.'/__a-data/__all_for_scripts/__examples/php/file_exists/file_exists_ok.dat'));

И получим результат работы функции file_exists :

Вывод о существовании файла и функции file_exists

Какой вывод можно сделать по тем проверкам существования или отсутствия файла на сервере!?

Если я запускаю эту функцию в /zones/team.php, она работает (выводится ДА). Если я запустил эту функцию на /auth/ajax.php, она напечатает NO. Почему?

Так что я провожу некоторый эксперимент.

1 - Если я попробую:

Он говорит НЕТ на обоих;

2 - Если я попробую:

Он говорит ДА на обоих; Но на team.php я использую ./ и на ajax.php ../ . почему это работает .

Ваш последний работает, скорее всего, потому что:

  1. Вы вызываете zones/team.php из index.php , который находится в корне. В этом случае часть ./ правильно определяет ваш текущий каталог.
  2. А для ajax вы должны вызывать его напрямую, как auth/ajax.php , а не что-то вроде index.php?type=jx&do=auth/ajax , что будет таким же, как №1. Следовательно, это не тот случай, вам нужно сначала выйти из auth с помощью ../ , а затем продолжить с squadra/. .

Как можно чаще используйте абсолютные пути. Относительные пути - это боль для PHP при их вычислении (с точки зрения производительности).

Убедитесь, что вы учитываете папку, которую набрали. Вы начинаете адрес файла с /, который является корнем стороны сервера . Если вам нужен локальный каталог, удалите предыдущий / или введите весь путь.

Во-вторых, убедитесь, что у вас нет опечаток.

Поскольку у вас есть косая черта, file_exist перейдет в корень жесткого диска.

Используйте $ _SERVER ['DOCUMENT_ROOT'] перед ним или удалите косую черту и используйте ../ и т. Д. И т. Д.

Если squadra - это каталог в каталоге, в котором запущен скрипт PHP, попробуйте

Проверьте статус php safe_mode и проверьте чувствительность к регистру в пути к файлу.

Предупреждение: эта функция возвращает FALSE для файлов, недоступных из-за ограничений безопасного режима. Однако эти файлы все еще можно включить, если они находятся в safe_mode_include_dir.

Если вы используете относительный путь с file_exists, он возвращает false, если путь не относится к каталогу php.

Еще раз проверьте путь - я думаю, что ведущая косая черта является ошибкой, поскольку она может указывать на корень (либо сервер, либо, что более вероятно, пользовательское пространство), в то время как ваш исполняемый скрипт может находиться во вспомогательном пути .

Если я наберу URL (для примера используется .jpg)

в моей адресной строке будет отображаться изображение этого пользователя. Тогда, если я введу путь к файлу

в адресной строке отобразится изображение этого пользователя. Теперь моя проблема, если я делаю PHP file_check на любом из них всегда говорится, что файл НЕ существует. Вот код, который я использую:

РЕДАКТИРОВАТЬ
Вот мой общий путь к файлу:

Тем не менее, когда я набираю:

Решение

При использовании file_exists, кажется, вы не можете сделать:

так что вы должны сделать:

Тогда все будет работать нормально.

Это, по крайней мере, так в этой системе Windows, на которой запущены php 5.2.5 и apache 2.2.3

Не уверен, что дело до конкатенации или факта константы, я собираюсь убежать и проверить это …

Другие решения

Ну, если вы не знаете точное исключение — не используйте if/else заявления. Вы не можете охватить все возможные комбинации строчных и прописных букв.

Лично я бы порекомендовал конвертировать изображение в ВАШ любимый формат, когда пользователь загружает его, чтобы вы точно знали, что ищете!

Если это невозможно по каким-либо причинам, вы можете использовать glob() найти любой файл, загруженный пользователем.

Тем не менее, для этого потребуется иметь дело с несколькими файлами и … нет … Конвертировать, сохранить, использовать!

file_exists всегда возращает false

1 ответ 1

У тебя в переменной $path лежит абсолютный путь. По которому файл не доступен.

Я пытаюсь найти файл file_exist в каталоге. Если я не хочу использовать другое изображение. Но поскольку я использую функцию file_exists, он всегда возвращает false.

Но функция всегда возвращает false, даже если файл выходит. Я проверил это, используя

Это отобразило изображение правильно.

Пожалуйста, помогите мне

Вы передаете URL-адрес функции file_exists, которая неверна. Вместо этого передайте локальный путь к папке.

file_exists использует пути файловой системы, а не URL-адреса. Вы используете URL-адреса в браузере для доступа к вашим скриптам PHP через веб-браузер и веб-сервер по сети. Сам PHP script может получить доступ к локальной файловой системе и использует это, он не проходит через сетевой стек для доступа к файлам.

Предполагая, что этот файл находится на локальном компьютере (что предлагается localhost , вам нужно получить к нему доступ с помощью локального пути к файлу. Трудно догадаться, что это может быть для вас, но может показаться /var/www/dropbox. .

file_exists() проверяет, существует ли файл в локальной файловой системе. Вы передаете URL-адрес. Измените его на локальный путь в каталог Dropbox и он должен работать:

если я запустил эту функцию на /zones/team.php, она работает (она печатает YES). Если я запустил эту функцию на /auth/ajax.php, напечатайте NO. Почему?

Итак, я делаю эксперимент.

1 - Если я пытаюсь:

он говорит "НЕТ" на обоих;

2 - Если я пытаюсь:

он говорит ДА на обоих; Но на team.php im using./и на ajax.php../. почему это работает.

Ваш последний работает, скорее всего, потому, что:

  • Вы вызываете zones/team.php из index.php , который находится в корне. В этом случае часть ./ правильно идентифицирует ваш текущий каталог.
  • И для ajax вы должны называть его прямо как auth/ajax.php , а не что-то вроде index.php?type=jx&do=auth/ajax , которое будет таким же, как No.1. Следовательно, это не так, вам нужно сначала выйти из auth с помощью ../ , а затем продолжить с squadra/. .

Используйте абсолютные пути так часто, как можете. Относительные пути - это боль для PHP для их вычисления (по производительности).

Убедитесь, что вы рассматриваете папку, которую вы набрали. Вы начинаете адрес файла с /, который является корнем на стороне сервера. Если вам нужен локальный каталог, удалите предыдущий/или введите весь путь.

Во-вторых, убедитесь, что у вас нет опечаток.

Как только вы получили косую черту, file_exist пойдет в корень жесткого диска.

Используйте $_SERVER ['DOCUMENT_ROOT'] перед ним или удалите косую черту и используйте.. /, и т.д. и т.д.

Если squadra - это каталог в каталоге, где работает PHP script, попробуйте

Проверьте статус php safe_mode, и проверьте чувствительность к регистру файла.

Предупреждение: Эта функция возвращает FALSE для файлов, недоступных из-за ограничений безопасного режима. Однако эти файлы могут быть включены, если они находятся в safe_mode_include_dir.

Если вы используете относительный путь с file_exists, он возвращает false, если путь не относится к директории php.

Проверьте путь еще раз - я думаю, что главная косая черта - ошибка, так как она может указывать на корень (либо на сервер, либо на более вероятное пространство пользователя) - в то время как ваш исполняемый script может быть расположен в подпуте.

ТЛ; дг; Попробуйте удалить первый "/"

Посмотрите другие вопросы по меткам php relative-path file-exists или Задайте вопрос

Когда вы используете file_exists, вы используете только краткое имя файла.

Например, если вы загружаете файл с именем test.jpg, он проверяет, если ./test.jpg существует.

Но когда вы действительно перемещаете загруженный файл, вы помещаете его в каталог с именем Images:

Теперь, если вы загрузите это test.jpgпереехал в ./Images/test.jpg, который не найден вашим другим кодом.

Решение

Вы должны использовать одно и то же имя файла в обоих случаях. Так что просто измените if с file_exists позвонить:

Этот код добавляет имя папки к имени файла, так что вы проверяете правильный путь; загрузка test.jpg приводит к проверке файла ./Images/test.jpg,

3 ответа

Поэтому попробуйте предварительно указать путь к каталогу:

if (file_exists(dirname(__FILE__) . $file))

Egg 18 Мар 2016 в 11:16

Иногда file_exists() кэширует свой результат. Вы можете попробовать clearstatcache() очистить кеш.

Jasper Vergers 18 Мар 2016 в 11:14

Попробуйте сделать так:

blue112 18 Мар 2016 в 11:12

file_exists () должен использовать путь к файлу на жестком диске, а не URL. Поэтому у вас должно быть что-то вроде:

file_exists работает только в локальной файловой системе.

Так что попробуйте это, если вы используете localhost в:

вы включили опцию, которая позволяет использовать внешние URL-адреса? Вы можете установить его в PHP.ini:

вы проверили комментарии ниже?

просто читаю его части, но, похоже, есть несколько проблем.

попробовать ниже. Его работа для меня

Make sure you are considering the folder that you have typed. You start the file address with /which is server side root. If you want local directory, either remove the preceeding /or type out the entire path.

Secondly make sure you have no typos.

Mikhail 13 ноября 2010, 00:43:08

PHPology 13 ноября 2010, 00:44:01

tcrosley 13 ноября 2010, 00:46:14

Проверьте статус php safe_mode и проверьте чувствительность к регистру пути к файлу.php file_existsПредупреждение: эта функция возвращает FALSE для файлов, недоступных из-за ограничений безопасного режима.Однако эти файлы все еще могут быть включены, если они находятся в safe_mode_include_dir.

Mohammad 13 ноября 2010, 00:48:35

Если вы используете относительный путь с file_exists, он возвращает false, если путь не относится к каталогу php.

Chris 13 ноября 2010, 00:44:19

Вы передаете URL в функцию file_exists, что неправильно. Вместо этого укажите ваш локальный путь к папке.

file_exists использует пути файловой системы, а не URL-адреса. Вы используете URL-адреса в браузере для доступа к своим PHP-сценариям через веб-браузер и веб-сервер по сети. Сам скрипт PHP может обращаться к локальной файловой системе, хотя и использует его, он не проходит через сетевой стек для доступа к файлам.

file_exists() проверяет, существует ли файл в локальной файловой системе Вы передаете URL. Измените его на локальный путь к каталогу Dropbox, и он должен работать:

Вы передаете URL в функцию file_exists, который является неправильным параметром. Вместо этого пройдите туда свой местный путь.

Чтобы узнать больше о функции file_exist(), прочтите это руководство по php:

Что такое file_exists

Синтаксис функции file_exists

file_exists ( string $filename ) : bool

Как проще написать функцию file_exists

Другие решения

Установите разделитель файловой системы по умолчанию (зависит от системы):

Если вы можете, попробуйте использовать абсолютный путь, а не относительный, и защитите систему от таких имен, как «../../file.jpg»:

Как переводится file_exists.

Итого, если брать словосочетание file exists, то оно переводится скорее с вопросительным смыслом!

Что возвращает file_exists

Как получить возвращаемые значения относительно файла в file_exists

Для иллюстрации работы функции file_exists нам потребуется два файла, один из которых не будет существовать!

Применим её к file_exists таким образом:

Результат возврата функции file_exists к существующему файлу

Тоже самое проделаем с файлом, который не существует! Внутри неважно что мы напишем, должно быть единственное условие, что файла не существует:

Существует ли файл в папке проверка локально file_exists

Предположим, что файл со скриптом и проверяемый файл лежат в одной папке, тогда можно проверить существует ли файл локально таким образом:

Но! Есть но! Если у вас на сайте единая точка входа, и оба файла подчинены этому, то file_exists вернет false

Нужен пример!? легко!

Если мы сейчас посмотрим в адресную строку. то мы увидим вот это:

И если мы выведем вот так и проверим, есть ли файл index.html

Чтобы вы понимали, именно проверять таким образом локально, в приведенном примере, корневая папка, будет той локальной папкой для этой проверки существования файла!

Все файлы, например sitemap.xml, которые будут физически находиться в корневой папке сайта, file_exists будет возвращать true!

Проделаем тоже относительно нашего файла, на котором данный текст

Но если мы проверим приведенный выше файл , как по вашему, что file_exists вернет!?

Проверка существования файла по абсолютному пути file_exists

Нам потребуется получить абсолютный путь до файла, из адресной строки и чтобы данный файл существовал! Сделаем такой специальный файл ->file_exists_ok.dat, на котором и будем испытывать функцию file_exists

Как вы думаете, что вернет функция file_exists , если применить к файлу по абсолютному пути, который существует, таким образом:

Читайте также: