PHP:通过FTP文件夹迭代并创建一个HTML表

时间:2015-06-16 15:40:00

标签: php html ftp

我是PHP的新手,为了简单起见,我会说我正在尝试创建一个粗略的网站,我想制作一个HTML表来检查FTP文件夹的内容并添加一个点到如果找到目标则为表格,如果没有则为空单元格(w / a& nbsp)。

这是我的代码和文件夹结构:

<table border=1 >
<?php
foreach ($demolist as &$value) {

    if($value != "." && $value != ".." && $value!=".DS_Store" ){
        ?> <tr> <?php
        echo '<td> <a href="./layouts/'.$value.'/index.html'.'">'.$value.'</a </td>';

        $png = $prezLayouts.$value;

        echo $png.'<br>';

        $sizeList = ftp_nlist($connection, $png);
        natsort($sizeList);

        foreach($sizeList as $target) {

            if($target != "." && 
               $target != ".." && 
               $target !=".DS_Store" && 
               $target != "index.html") {

                echo $target."<br>";

                if ($target == '640.png') { ?> <td> <?php echo "&#8226";  ?> </td> <?php  }

                elseif ($target == '768.png') { ?> <td> <?php echo "&#8226";  ?> </td> <?php }

                elseif ($target == '1000.png') { ?> <td> <?php echo "&#8226";  ?> </td> <?php }

                elseif ($target == '1200.png') { ?> <td> <?php echo "&#8226";  ?> </td> <?php }

                else { ?> <td> <?php echo "&nbsp"; ?> </td> <?php } ?>

                <?php 
            }

        }   
    ?> </tr> <?php
    }
}       
?> </table>

来自循环回声

的输出
/domains/~~/html/demo/layouts/about
1000.png
1200.png
/domains/~~/html/demo/layouts/buy
640.png
768.png
/domains/~~/html/demo/layouts/contact
640.png
768.png
1000.png
1200.png
/domains/~~/html/demo/layouts/homepage
640.png
1000.png
1200.png
/domains/~~/html/demo/layouts/social
640.png

现在,我的问题是获取每个文件夹中的文件列表不会让我检查文件夹中不存在的文件。 (doi)我能想到的唯一原始解决方案是使用[640.png,768.png,1000.png,1200.png]创建一个静态数组并使用它来检查文件夹中的文件,但我是积极的是有更优雅的解决方案。

1 个答案:

答案 0 :(得分:1)

可以尝试下面的代码。如果可能的话,最好不要进出PHP和HTML。

<?php
// Start HTML Table wrapper
$table = "<table border=1>\r\n";

foreach ($demolist as &$value) {
    if($value != "." && $value != ".." && $value != ".DS_Store"){
        // Start Table Row wrapper
        $table .= "<tr>\r\n";
        // First Cell
        $table .= "<td><a href='./layouts/$value/index.html'>$value</a></td>";
        $png = $prezLayouts.$value;
        // Second Cell
        table .= "<td>$png</td>";
        // This section does not make sense... your HTML table could result in uneven columns.
        $sizeList = ftp_nlist($connection, $png);
        natsort($sizeList);

        foreach($sizeList as $target) {
            // We have already ruled out 3 conditions above, so we only need to rule out index.html
            if($target != "index.html") {
                $table .= "<td>" . (strripos($target, ".png")?"&#8226;":"&nbsp;") . "</td>";
            }
        }   
    }
    // Close Table Row wrappper
    $table .= "</tr>\r\n";
}
// Close Table wrapper
$table .= "</table>\r\n";
echo $table;
?>

我可以建议一个改进,如果你知道PNG文件的总数或所有可能的标题,可以使用它。可以是for()循环,也可以创建可能的文件名数组。

$imageNames = array("640.png", "768.png", "1000.png", "1200.png");
$imageExists = array();
$sizeList = ftp_nlist($connection, $png);
natsort($sizeList);

foreach($imageNames as $n) {
    foreach($sizeList as $target){
        $imageExists[$n] = true;
    }
}
foreach($imageExists as $e){
    $table .= "<td>" . ($e)?"$#8226;":"&nbsp;" . "</td>";
}

由于我们正在寻找4个特定文件名,因此我们迭代所有可能的值,查找每个文件名。这将确保您为每个可能的文件名都有一个值。并使每列的列数相同。

也许更好:

foreach($imageNames as $n) {
    $table .= "<td>" . (array_search($n, $sizeList)?"&#8226;":"&nbsp;") . "</td>"
}