PHP file_exists ($ var) не работает - PullRequest
3 голосов
/ 28 мая 2011

Я пытаюсь написать код на своем ноутбуке и использую среду xampp.У меня есть следующий фрагмент кода:

class A {
...
  foreach ($blocks as $block) {
    $block = 'dir/dir2/' . $block;
  }
  if (file_exists($block) == true) {
    $var .= file_get_contents($block);
  }
}

Когда я повторяю переменную $ block в цикле foreach, она возвращает путь к файлам.Однако функция file_exists всегда возвращает false.Не могли бы вы помочь мне выяснить, что здесь не так?

Ответы [ 8 ]

8 голосов
/ 28 мая 2011

file_exists Цель - проверить, существует ли предоставленный файл. Это возвращает ложь. Это означает, что ваш файл не существует там, где ищет php. PHP может искать в другой области, чем вы ожидаете. Похоже, пришло время для некоторой отладки.

Запустите это, чтобы выяснить, где ищет php.

echo "current working directory is -> ". getcwd();

Это где вы хотите, чтобы php посмотрел? Если нет, то измените каталог, который ищет php с помощью функции chdir.

$searchdirectory = "c:\path\to\your\directory"; //use unix style paths if necessary
chdir($searchdirectory);

Затем запустите вашу функцию (примечание: я перевернул косую черту в обратную косую черту, чтобы соответствовать путям в стиле Windows.)

class A {
...
  //change working directory
  $searchdirectory = "c:\path\to\your\directory"; //use unix style paths if necessary
  chdir($searchdirectory);

  foreach ($blocks as $block) {
    $block = 'dir\dir2\' . $block;

    if (file_exists($block) == true) {
      $var .= file_get_contents($block);
    }
  }
}
1 голос
/ 20 апреля 2013

Вы смешиваете косые черты, этот сводил меня с ума.

Вот решение:

echo getcwd();
$searchimg = getcwd().'\\public\\images\\pics\\'.$value['name'].'.'.$value['ext'];

Вам понадобится процитировать такие слеши вплоть до картинки:)

1 голос
/ 16 марта 2012

Возможно, уже слишком поздно, но я нашел свое решение после того, как ударил меня по голове последние 2 часа.Если вы используете Windows, по умолчанию скрывается расширение имени файла.Таким образом, a.txt будет отображаться как a, а файл, который отображается как a.txt, фактически равен a.txt.txt.Для просмотра расширений файлов перейдите в Панель управления -> Внешний вид и персонализация -> Параметр папки -> Просмотр
и снимите флажок скрыть расширение имени файла .Теперь вы можете увидеть истинное имя, которое будет использоваться в file_exists ().

1 голос
/ 28 мая 2011

При цитировании чьего-либо комментария на странице руководства php file_exists,

Имейте в виду: если вы пройдете относительный путь к file_exists, он вернет false если путь не окажется относительным к текущему каталогу PHP (см. chdir () ).

Другими словами, если ваш путь относительно текущего каталога файлов, вы должны добавить dirname(__FILE__) к вашим относительным путям, или, начиная с PHP 5.3, вы можете просто использовать __DIR__.

0 голосов
/ 27 июня 2014

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

if file_exists(trim($Filename))
0 голосов
/ 28 мая 2011

Я полагаю, что проверка file_exists немного отличается от открытия с file_get_contents.так что, возможно, это может быть одной из следующих проблем:

  • file_exists: возвращает FALSE, если недоступен из-за ограничений безопасного режима
  • file_exists: для проверки используется реальный UID / GID, а недействующие права
  • file_get_contents: использует протокол с file_exists, не знает ..

возможно, это поможет вам в дальнейшем!удачи

0 голосов
/ 28 мая 2011

Вы намереваетесь проверить file_exists() внутри цикла foreach?

class A {
  ...
  foreach ($blocks as $block) {
    $block = 'dir/dir2/' . $block;

    // Inside the loop      
    if (file_exists($block) == true) {
      $var .= file_get_contents($block);
    }
  }
}
0 голосов
/ 28 мая 2011

Насколько я вижу, вы используете file_exists вне цикла foreach.Следовательно, переменная $block не привязана в то время.

РЕДАКТИРОВАТЬ: фактически она все еще привязана к последнему значению в вашей коллекции.

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