排序图像从最新到最旧的PHP


Sort images from newest to oldest PHP

嗨,我有以下脚本显示从目录和拇指图像,但我想知道如何排序从最新到最旧的图像,以及如何在这个脚本中实现它提前感谢!

<?php
    # SETTINGS
    $max_width = 800;
    $max_height = 600;
    $per_page = 10;
    $page = $_GET['page'];
    $has_previous = false;
    $has_next = false;
$images = array();
$times = array();
// read the images folder for jpg, jpeg, png and gif images using glob() - see http://php.net/glob for info
foreach(glob('images/*.{jpg,jpeg,png,gif}', GLOB_BRACE) as $image)
{
    // add the file to the images array
    $images[] = $image;
    // get the files creation/last modification timestamp add it to the times array. 
    // This array will be used later to sort the images array
    $times[] = filemtime($image);
   // generate the image thumbnail if needed
   if(!file_exists('thumbs/' . $image))
   {
       // calling your makeThumb function, pass it the file extension for the image
       makeThumb(basename($image), pathinfo($image, PATHINFO_EXTENSION));
   }
}
// using the times array, to sort the images newest to oldest
array_multisort($times , SORT_DESC, 
                $images);

    function getPictures() {
        global $page, $per_page, $has_previous, $has_next;
        if ( $handle = opendir(".") ) {
            $lightbox = rand();
            echo '<ul id="pictures">';
            $count = 0;
            $skip = $page * $per_page;
            if ( $skip != 0 )
                $has_previous = true;
            while ( $count < $skip && ($file = readdir($handle)) !== false ) {
                if ( !is_dir($file) && ($type = getPictureType($file)) != '' )
                    $count++;
            }
            $count = 0;
            while ( $count < $per_page && ($file = readdir($handle)) !== false ) {
    if ( !is_dir($file) && ($type = getPictureType($file)) != '' ) {
        // make the thumbs directory if it doesn't already exist
        if ( ! is_dir('thumbs') ) {
            mkdir('thumbs');
        }
        // make a thumbnail if it doesn't already exist
        if ( ! file_exists('thumbs/'.$file) ) {
            makeThumb( $file, $type );
        }
        // create a link to $file, add the thumbnail
        echo '<li><a href="' . $file . '">';
        echo '<img src="thumbs/'.$file.'" alt="" /></a></li>';
        $count++;
echo substr($file,strlen($folder),strpos($file, '.')-strlen($folder));
    }
}
            echo '</ul>';
            while ( ($file = readdir($handle)) !== false ) {
                if ( !is_dir($file) && ($type = getPictureType($file)) != '' ) {
                    $has_next = true;
                    break;
                }
            }
        }
    }
    function getPictureType($file) {
        $split = explode('.', $file); 
        $ext = $split[count($split) - 1];
        if ( preg_match('/jpg|jpeg/i', $ext) ) {
            return 'jpg';
        } else if ( preg_match('/png/i', $ext) ) {
            return 'png';
        } else if ( preg_match('/gif/i', $ext) ) {
            return 'gif';
        } else {
            return '';
        }
    }
    function makeThumb( $file, $type ) {
        global $max_width, $max_height;
        if ( $type == 'jpg' ) {
            $src = imagecreatefromjpeg($file);
        } else if ( $type == 'png' ) {
            $src = imagecreatefrompng($file);
        } else if ( $type == 'gif' ) {
            $src = imagecreatefromgif($file);
        }
        if ( ($oldW = imagesx($src)) < ($oldH = imagesy($src)) ) {
            $newW = $oldW * ($max_width / $oldH);
            $newH = $max_height;
        } else {
            $newW = $max_width;
            $newH = $oldH * ($max_height / $oldW);
        }
        $new = imagecreatetruecolor($newW, $newH);
        imagecopyresampled($new, $src, 0, 0, 0, 0, $newW, $newH, $oldW, $oldH);
        if ( $type == 'jpg' ) {
            imagejpeg($new, 'thumbs/'.$file);
        } else if ( $type == 'png' ) {
            imagepng($new, 'thumbs/'.$file);
        } else if ( $type == 'gif' ) {
            imagegif($new, 'thumbs/'.$file);
        }
        imagedestroy($new);
        imagedestroy($src);
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UFT-8" />
<title>Pictures</title>
<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
<style type="text/css">
body {
    width:780px;
    margin:0 auto;
}
#pictures li {
    float:left;
    height:<?php echo ($max_height + 10); ?>px;
    list-style:none outside;
    width:<?php echo ($max_width + 10); ?>px;
    text-align:center;
}
img {
    border:0;
    outline:none;
}
.prev {
    float:left;
}
.next {
    float:right;
}
</style>
</head>
<body>
<?php getPictures(); ?>
<div style="clear:both"></div>
<?php
    if ( $has_previous )
        echo '<p class="prev"><a href="?page='.($page - 1).'">&larr; Previous Page</a></p>';
    if ( $has_next )
        echo '<p class="next"><a href="?page='.($page + 1).'">Next Page &rarr;</a></p>';
?>
<div style="clear:both"></div>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="js/lightbox.js"></script>
</body>
</html>

您可以使用filemtime($file);获取文件的最后修改日期。您可以将文件存储在数组中,并使用时间戳作为键。您可以使用php轻松地按键对数组内容进行排序,只需遍历排序后的数组并像这样输出。另一个建议:你应该把你的文件路径,扩展名,上传/修改日期和文件大小存储在数据库中,这将为你节省很多工作。我希望我的回答对你有所帮助。代码:

<?php
function sort_images($basedir){
  $dir = scandir($basedir);
  $files = array();
  foreach($dir as $filename){
    $mimetype = mime_content_type($filename);
    if(explode('/', $mimetype)[0] == 'image'){
      $mod_time = filemtime(basedir.'/'.$filename;
      $files[$mod_time] = $basedir.'/'.$filename;
    }
  }
  $sorted = ksort($files);
  return $sorted;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1   /DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UFT-8" />
<title>Pictures</title>
</head>
<body>
<?php foreach(sort_images('foo/bar') as $image): ?>
<div class="image"><img src="<?php echo $image; ?>" />
<?php endforeach; ?>
</body>
</html>