自动图库插入

时间:2011-09-01 23:54:03

标签: php image automation

我已将此代码设置为插入上传到我的“images”文件夹的任何图像,直接进入我拥有的图库....我的问题是它随机插入它们...我想设置它最近插入最近上传的图片到画廊“行”的末尾,任何建议?感谢

<?php

    $image_dir = 'uploads/images/';
    $per_column = 10;       

    if ($handle = opendir($image_dir)) {
        while (false !== ($file = readdir($handle))) 
        {
            if ($file != '.' && $file != '..') 
            {
                if(strstr($file,'.png'))
                {
                    $files[] = $file;
                }
                if(strstr($file,'.jpg'))
                {
                    $files[] = $file;
                }
                if(strstr($file,'.gif'))
                {
                    $files[] = $file;
                }
                if(strstr($file,'.jpeg'))
                {
                    $files[] = $file;
                }
            }
        }
        closedir($handle);
    }

    if(count($files))
    {
        foreach($files as $file)
        {
            $count++;
            echo '<li><img src="',$image_dir,$file,'" width="20" height="20" title="',$file,'"/></li>';
            if($count % $per_column == 0) { echo '<div class="clear"></div>'; }
        }
    }
    else
    {
        echo 'no pictures yet...';
    }

?>

2 个答案:

答案 0 :(得分:4)

<?php

    $image_dir = 'uploads/images/';
    $per_column = 10;       

    $validExt = array(
        'png' => 'image/png',
        'jpeg' => 'image/jpeg',
        'jpg' => 'image/jpg',
        'gif' => 'image/gif',
    );

    if ($handle = opendir($image_dir)) {
        while (false !== ($file = readdir($handle))) 
        {
            $ext = strtolower(substr($file, -3));
            if (isset($validExt[$ext])) 
            {
                $stats = stat($image_dir.$file);
                $files[$stats['mtime']] = $file;
            }
        }
        closedir($handle);
    }

    $count = 0;
    krsort($files);

    $cnt = count($files);

    if($cnt)
    {
        foreach($files as $file)
        {
            $count++;
           echo '<li><img src="' . $image_dir . $file . '" width="20" height="20" title="' . substr($file, 0, -4) . '"/></li>'.chr(10);
            if($count % $per_column == 0) { echo '<div class="clear"></div>'; }
        }
    }
    else
    {
        echo 'no pictures yet...';
    }

答案 1 :(得分:0)

我不确定您的文件格式是什么,但在上传时尝试使用time()将文件名设置为当前时间。

列出图片时,请尝试使用glob()代替readdir。

您的代码可能会如下(未经测试):

$image_dir = 'uploads/images/';
$per_column = 10;       

$files = glob($image_dir . "*.jpg|png|gif|jpeg");

if(count($files))
{
    foreach($files as $file)
    {
        $count++;
        echo '<li><img src="',$image_dir,$file,'" width="20" height="20" title="',$file,'"/></li>';
        if($count % $per_column == 0) { echo '<div class="clear"></div>'; }
    }
}
else
{
    echo 'no pictures yet...';
}

将上传文件与当前时间的文件名相关联,这应该按照最近的顺序排列您的图像。

这里最重要的一行是$files = glob($image_dir . "*.jpg|png|gif|jpeg");。这将扫描目录中以*.jpg.png.gif结尾的任何文件(.jpeg)。您无需担心...;表达式过滤掉了。