#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