2011-09-01 87 views
1

我有这个代码设置插入任何图像上传到我的“图像”文件夹,右进入我有一个画廊....我的问题是,它的种类随机插入..我想将其设置为将最近上传的图片插入图库“行”的末尾,有什么建议?由于自动图片库插入

<?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...'; 
    } 

?> 

回答

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...'; 
    } 
+0

这太好了,但是相反的,最新的图片插入前台,我希望它从最后一个点开始,从左到右,你的代码插入第一个点并将其余部分往下碰。 – tcd

+0

使用kso​​rt(krsort是反向)。这个想法是使用数组的密钥作为上传的时间。然后你按键排列数组。 –

+0

啊完美,谢谢! – tcd

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结尾的文件(*)。您无需担心...;表达式过滤掉了。

+0

非常有帮助,但我希望能够将图像名称作为图像“title”属性,并且它将成为每幅图片的悬停名称...如果我给每个当前时间的名称它不会像那样工作... – tcd

+0

在这种情况下,请在上传文件名前加上时间戳,例如:12345678 {|} My lovely picture.png'。 '{|}'只是一个分隔符的例子,您可以使用它来将字符串中的时间戳从字符串中分离出来。 – Bojangles

+0

谢谢你,我会试验 – tcd