简体   繁体   中英

Showing files from multiple directories which all have different file names and display in table PHP

I'm trying to display a list of files in 3 separate directories. I have it working if all the file names are the same in each folder it works fine. However, if the filename is different in the first folder, the images don't display in the other two. So all filenames have to be the same but I need it so it doesn't matter if the filenames are the same or not.

Here's what I have so far.

<?php
date_default_timezone_set('Europe/London');
$dirname = "dir1";
$dirnameTwo = "dir2";
$dirnameThree = "dir3";
?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>

<head>
    <meta http-equiv='refresh' content='10'>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <meta http-equiv='cache-control' content='max-age=0' />
    <meta http-equiv='cache-control' content='no-cache' />
    <meta http-equiv='expires' content='0' />
    <meta http-equiv='expires' content='Tue, 01 Jan 1980 1:00:00 GMT' />
    <meta http-equiv='pragma' content='no-cache' />
</head>
<html>

<body>
<style type="text/css">
    .pi-title {
        padding: 1rem;
    }
</style>
<div class="container">
    <div class="row">
        <div class="pi-title">
            <h3>Test</h3>
        </div>
        <div class="table-container col-md-12">
            <table class="table" border='1' cellpadding='5' cellspacing='0' bordercolor='#ccc'>
                <thead class="thead-dark">
                <tr>
                    <th scope="col">ID</th>
                    <th scope="col">File Name</th>
                    <th scope="col">PI 1</th>
                    <th scope="col">PI 2</th>
                    <th scope="col">PI 3</th>
                </tr>
                </thead>
                <tbody>
                <tr></tr>
                <tr>
                    <?php
                    array_multisort(array_map('filemtime', ($files = glob("*.*"))), SORT_DESC, $files);
                    $directories = implode(',', [ $dirname, $dirnameTwo, $dirnameThree]);
                    $files = glob("./{{$directories}}/*", GLOB_BRACE);
                    $i = 1;
                    foreach($files as $filename) {
                      if (file_exists($filename)) {
                            echo "</tr>";
                            echo "<td><font face='Arial' size='6'>$i</font></td>";
                            echo "<td><font face='Arial' size='6' color='red'>" . date ("F d Y H:i", filemtime($filename));
                            echo "</font></td>";
                        }
                        print("

                           <td><img src='$filename' height='180' width='220'></td>
                           <td><img src='$filename' height='180' width='220'></td>
                           <td><img src='$filename' height='180' width='220'></td>

                           ");
                        $i++;
                        if($i==13) break;
                    }
                    ?>
                </tr>
                </tbody>
            </table>
        </div>
    </div>
</div>

You can use the GLOB_BRACE flag:

$directories = implode(',', [ $dirname, $dirnameTwo, $dirnameThree]);
$files = glob("./{{$directories}}/*", GLOB_BRACE);

glob('{dir1,dir2}/*', GLOB_BRACE) gives you a list of all files in both folders, dir1 and dir2 . In string interpolations curly braces around variables have a special meaning, thus you need double braces which result in single braces after interpolation.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM