PHP - file_exists не работает, даже если файл существует в каталоге

Я пытаюсь проверить, существует ли файл в каталоге. Когда я использую этот код, он работает - отображается изображение:

<?php 

  $imgId=0; 
  $filename='../uploadedimages/project-'.$item->id.'-'.$imgId;

  echo "<img src='".$filename."' ></img>";

?>  

Когда я использую тот же код с функцией file_exists, он не работает:

<?php 

  $imgId=0; 
  $filename='../uploadedimages/project-'.$item->id.'-'.$imgId;

  if (file_exists($filename)) {                             
    echo "<img src='".$filename."' ></img>";                
  }

?>  

Мой вопрос прост: WTF??


person Tomas Turan    schedule 03.12.2014    source источник
comment
Ваш корневой каталог документа отличается от корневого каталога документа сервера... Таким образом, file_exists() использует папку, в которой находится скрипт, в качестве эталонного каталога. При загрузке <img> на него ссылаются из корня вашего веб-сервера.   -  person RichardBernards    schedule 03.12.2014
comment
file_exists ожидает путь к файловой системе.   -  person Aleksei Matiushkin    schedule 03.12.2014
comment
Примечание: </img> вам это не нужно.   -  person Funk Forty Niner    schedule 03.12.2014
comment
Также относительный путь - это боль для вычисления сервера.   -  person Rizier123    schedule 03.12.2014
comment
Прочтите руководство WTF php.net/manual/en /function.file-exists.php ;) $filename='/var/user/you/httpdocs/uploadedimages/project...   -  person Funk Forty Niner    schedule 03.12.2014
comment
Я хотя это путь к файловой системе. Что такое путь к файловой системе?   -  person Tomas Turan    schedule 03.12.2014
comment
$filename='/var/user/you/httpdocs/uploadedimages/project... ‹= это.   -  person Funk Forty Niner    schedule 03.12.2014
comment
Z:\kvetena.local\web\uploadedimages\ - это мой текущий путь к файлу, но его можно изменить в будущем. Что мне делать тогда?   -  person Tomas Turan    schedule 03.12.2014
comment
Запустите phpinfo(), он даст вам путь к вашей системе.   -  person Funk Forty Niner    schedule 03.12.2014


Ответы (2)


Вы можете использовать: $_SERVER['DOCUMENT_ROOT'], чтобы узнать, где вы находитесь.

А затем попробуйте что-то вроде этого:

$filename=$_SERVER['DOCUMENT_ROOT'].'uploadedimages/project-'.$item->id.'-'.$imgId;

Но сначала вам нужно убедиться, что путь существует.

person JuanSedano    schedule 03.12.2014

на Linux-сервере попробуйте изменить права доступа к файлам на 755, прежде чем использовать функцию file_exists

chmod 755 имя_файла.ext

person Ngurah Mantara    schedule 23.05.2016