вопрос php DirectoryIterator — неправильный путь?

#php #path #iterator #directory

#php #путь #итератор #каталог

Вопрос:

эй, ребята, что я здесь неправильно понимаю?

 $dir = get_bloginfo('template_url').'/images/headers/';
echo $dir;
//ouput: myblog.com/wp-content/themes/mytheme/images/headers



$dir = new DirectoryIterator(get_bloginfo('template_url').'/images/headers/');
echo $dir;
//output: nothing at all! blank page!
  

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

[26 апреля 2011] Неустранимая ошибка PHP: Неперехваченное исключение ‘RuntimeException’ с сообщением ‘DirectoryIterator::__construct(http://myblog.com/wp-content/themes/mytheme/images/headers /) [directoryiterator.—construct]: не удалось открыть каталог: не реализовано’ в /Users/myname/htdocs/myblog.com/wp-content/themes /mytheme/inc/header-image.php:трассировка стека 3:

0 /Users/myname/htdocs/myblog.com/wp-content/themes/mytheme/inc/header-image.php (3):

DirectoryIterator->__construct(‘http://oberperf …’)

1 /Users/myname/htdocs/myblog.com/wp-content/themes/mytheme/header.php (69):

включить(‘/Users/myname …’)

2 /Users/myname/htdocs/myblog.com/wp-includes/theme.php (1112):

require_once(‘/Users/myname …’)

3 /Users/myname/htdocs/myblog.com/wp-includes/theme.php (1088):

load_template(‘/Users/myname…’, true)

4 /Users/myname/htdocs/myblog.com/wp-includes/general-template.php (34):

locate_template(массив, true)

5 /Users/мое имя в /Users/myname/htdocs/myblog.com/wp-content/themes/mytheme/inc/header-image.php

в строке 3

есть идеи, что здесь идет не так?

Ответ №1:

Похоже, вы передаете URL вместо пути:

 DirectoryIterator->__construct('http://oberperf...')
  

Вы должны передать конструктору полный локальный путь к каталогу.

Комментарии:

1. хорошо, это правда. Однако это тоже не работает: $dir = new DirectoryIterator('/Users/myname/htdocs/myblog.com/wp-content/themes/mytheme/images/headers/'); echo $dir; <- это выводит просто точку «.»!

2. DirectoryIterator возвращает объект, а не строку. Вам нужно выполнить итерацию по нему: foreach ($dir как $item) { echo $item->GetFileName(); }

Ответ №2:

Я почти уверен, что путь должен быть абсолютным от корня документа, а не URL.

Попробуйте get_template_directory() вместо:

 $dir = new DirectoryIterator( get_template_directory() . '/images/headers/');
echo $dir;
  

Комментарии:

1. спасибо, это имеет смысл. Однако это не работает! Если я попробую ваш точный код, в $ dir будет только точка «.»! там нет пути. Ошибок не выдается. Если я выполняю echo get_template_directory() . '/images/headers/' , это работает нормально, однако DirectoryIterator по какой-то причине не принимает это значение!

2. переменная, возвращаемая конструктором DirectoryIterator, является ОБЪЕКТОМ DirectoryIterator, вы не сможете просто отобразить ее на экране. взгляните на документацию DirectoryIterator для получения дополнительной информации о том, как ее использовать us.php.net/manual/en/class.directoryiterator.php