Как мне перебрать подкаталоги? - PullRequest
3 голосов
/ 20 сентября 2011

Эй, ребята, быстрый фон. Использование php в основном на 000webhost.com. Очень новичок / новичок. Большую часть того, что я знаю, я узнал от youtube и developphp.com

Хорошо, так мой вопрос. Я пытаюсь построить динамическую страницу галереи без использования Flash. Оно должно быть динамичным, потому что я хочу, чтобы пользователь мог загрузить изображение, а затем показать его на странице галереи. Все идет нормально. Я ищу какой-то вызов foreach (is_dir (/ Albums /)) для циклического просмотра каталога моих альбомов, поиска всех папок и добавления их на страницу. Прямо сейчас я должен все вручную ввести. Вот как это выглядит.

<table width="100%"><tr><td width="78%"><span class="textbg">Miller Albums</span></td><td width="22%"><?php echo $toplinks; ?></td></tr></table><span class="textsm"></span><p class="desc"></p><p><span class="textreg">Click an album to see the pictures</span><br><a href="http://miller.netai.net/member_profile.php?id=<?php echo $id; ?>">Home</a>
</p><hr size="1">
<table style="text-align: center">
<tbody>
<tr>
<td>
<a href="/Albums/CRFA"><img width="150" height="150" border="0" align="middle" title="CRFA" src="/Albums/CRFA/thumbnail.jpg"></a>
</td>
<td>
<a href="/Albums/Internet%20Pics"><img width="150" height="150" border="0" align="middle" title="Internet Pics" src="/Albums/Internet%20Pics/thumbnail.jpg"></a>
</td>
<td>
<a href="/Albums/Dads%20Wedding"><img width="150" height="150" border="0" align="middle" title="Dads Wedding" src="/Albums/Dads Wedding/thumbnail.jpg"></a>
</td>
<td>
<a href="/Albums/Dads%20Wedding%20(cont.)"><img width="150" height="150" border="0" align="middle" title="Dads Wedding (cont.)" src="/Albums/Dads Wedding (cont.)/thumbnail.jpg"></a>
</td>
</tr>
<tr>
<td>
<label><font size="3">Ben's Fire Academy</font></label>
</td>
<td>
<label><font size="3">Internet Pics</font></label>
</td>
<td>
<label><font size="3">Dad's Wedding</font></label>
</td>
<td>
<label><font size="3">Dad's Weding (cont.)</font></label>
</td>
</tr></tbody></table>
<map name="Map">
<area href="frameset.htm" coords="95,1,129,44" shape="rect">
</map>
</body>

Я бы хотел, чтобы в теле было что-то вроде ...

 <table style="text-align: center">
        <tbody>
        <tr>
<?php
foreach(is_dir(/Albums/))
    <td>
    <a href="/Albums/%dir%">
    <img width="150 height="150" border="0" align="middle" title="%dir%" src="/Albums/%dir%/thumbnail.jpg"></a>
    </td>

IF no_more_dir
    exit();
?>
        </tr> 

Есть ли что-нибудь, чтобы сделать это, или я в пути над головой? Любая помощь приветствуется.

Ответы [ 3 ]

8 голосов
/ 20 сентября 2011

Вы можете использовать DirectoryIterator для этого

foreach (new DirectoryIterator('/path/to/directory') as $fileInfo) {
    if($fileInfo->isDir() && !$fileInfo->isDot()) {
        // Do whatever
    }
}
5 голосов
/ 20 сентября 2011

Вы на правильном пути!

Это делает то, что вам нужно: http://php.net/manual/en/class.recursivedirectoryiterator.php

$album_dir = new RecursiveDirectoryIterator('path/to/album_root');
foreach (new RecursiveIteratorIterator($album_dir) as $filename => $file) {
    // echo img tag
}
4 голосов
/ 21 сентября 2011

Хотелось бы защищать итераторы, другой вариант - получить массив папок с

.
glob('path/to/albums/*', GLOB_DIR)

Если вы хотите пойти по пути итератора, тогда вам может пригодиться ParentIterator, чтобы легко перебирать только каталоги.

$dirs = new ParentIterator(new RecursiveDirectoryIterator('path/to/albums'););
$it  = new RecursiveIteratorIterator($dirs, RecursiveIteratorIterator::SELF_FIRST);

// Optionally, limit the depth of recursion with $it->setMaxDepth($number)

foreach ($it as $dir) {
    // Output your HTML here
}
...