Я пытаюсь написать код на своем ноутбуке, и я использую среду 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. так что, возможно, это может быть одна из этих проблем:
возможно, это поможет вам дальше! удачи
Если вы используете переменную для своего файла, убедитесь, что в конце нет пробела. Я сошел с ума, пока не нашел решение: удаление пустого с отделкой (). Смотри ниже.
if file_exists(trim($Filename))