Intereting Posts

PHP file_exists ($ var) не работает

Я пытаюсь написать код на своем ноутбуке, и я использую среду 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. Не могли бы вы помочь мне выяснить, что здесь не так?

Цель 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); } } } 

Цитируя комментарий file_exists странице руководства php file_exists ,

Помните: если вы передадите относительный путь к file_exists, он вернет false, если путь не будет относиться к «текущему PHP-директору» (см. Chdir ()).

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

Это может быть слишком поздно, но только что нашел свое решение после того, как я ударил головой в течение последних 2 часов. Если вы используете окна, он скрывает расширение имени файла по умолчанию. Таким образом, a.txt будет отображаться как a и файл, который отображается как a.txt на самом деле является a.txt.txt . Чтобы просмотреть расширения файлов, перейдите в Панель управления -> Appereances And Personalization -> Folder Option -> View
и снимите флажок скрывать расширение имени файла . Теперь вы можете увидеть истинное имя, которое должно использоваться в file_exists ().

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

Вот решение:

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

Вам нужно будет процитировать косые черты, подобные этому, вплоть до картины 🙂

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

EDIT: на самом деле он по-прежнему привязан к последнему значению в вашей коллекции.

Вы собираетесь проверять 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); } } } 

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

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

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

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

 if file_exists(trim($Filename))