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

时间:2014-08-25 09:20:44

标签: php image sorting directory

您好我有以下脚本来显示目录中的图像并制作拇指,但我想知道如何将图像从最新到最旧排序以及如何在此脚本中实现它 非常感谢!

<?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>

1 个答案:

答案 0 :(得分:0)

您可以使用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>