0

我现在有一个脚本,它非常适合用于我公司资源的 FTP 类型站点。

它显示带有下载链接和文件名的图像。我想要做的是,如果文件不是图像(如 pdf),则显示占位符图像。

下面的代码不正确(if/else 语句),但您可以看到我的意图。

提前致谢。

<?php

        // Find all files in that folder
        $files = glob('files/*');
        //$image = 

        // Do a natural case insensitive sort, usually 1.jpg and 10.jpg would come next to each other with a regular sort
        natcasesort($files);

        if ($files = array("gif", "jpeg", "jpg", "png");) {
            $images = $file
        } else {
            $images = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
        }


        // Display images
        foreach($files as $file) {
           echo '<div class="one_half"><img src="' . $images . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>';
        }

    ?>
4

6 回答 6

3

这里有几个问题。

  1. 请注意您的比较运算符 - 您当前正在此行中重新分配 $files 数组:

    if ($files = array("gif", "jpeg", "jpg", "png");) {
    
  2. 您正在$files以毫无意义的方式将您的数组与另一个数组进行比较。您可能会构建一个单独的 $images 数组,就像您正在尝试做的那样,但这最好在 foreach 循环中完成,如下所示:

    foreach($files as $file) {
      $filepath = pathinfo($file);
      if (in_array($filepath['extension'], ('gif', 'jpeg', 'jpg', 'png')) {
        $image = $file;
      } else {
        $image = 'http://hg.exbabylon.net/find_fitter/placeholder.jpg';
      }
    
      echo '<div class="one_half"><img src="' . $images . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>';
    }
    
  3. 理想情况下,您应该查看 mime 类型而不是文件扩展名。在 PHP 5.3 中,这是按如下方式完成的:

    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    $mimetype = finfo_file($finfo, $file);
    finfo_close($finfo);
    

然后,您可以根据 (2) 中的 mime 类型进行比较。

于 2013-05-31T19:10:14.377 回答
1
<?php
    $allowed_extensions = array("gif", "jpeg", "jpg", "png");

    // use values as keys for lasier lookups
    $allowed_extensions = array_combine($allowed_extensions, $allowed_extensions);

    // Find all files in that folder
    $files = glob('files/*');

    // Do a natural case insensitive sort, usually 1.jpg and 10.jpg would come next to each other with a regular sort
    natcasesort($files);

    // Display images
    foreach($files as $file) {

       // split file name at "." and use last part as file extension
       $file_parts = explode('.', $file);
       $file_extension = array_pop($file_parts)

       // check if file extensions is allowed
       if($allowed_extensions[$file_extension]) {
           $images = $file;
       } else {
           $images = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
       }

       echo '<div class="one_half"><img src="' . $images . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>';
    }

?>
于 2013-05-31T18:58:30.827 回答
1
$allowed_extensions = array("gif", "jpeg", "jpg", "png");
$files = glob('files/*');

natcasesort($files);
foreach($files as $file){
    if(!in_array(end(explode(".",$file)),$allowed_extensions)){
        $image = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
    }else{
        $image = $file;
    }
    echo '<div class="one_half"><img src="' . $image . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>';
}
于 2013-05-31T18:58:47.530 回答
0

您可以使用正则表达式和preg_match函数:

if (preg_match("/.*\.gif|jpg|jpeg|png$/i", $files)) {
  $images = $file
} else {
  $images = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
}

另请参阅preg_match 文档

注意:最好检查 mime 类型(如果可能),因为文件名可以很容易地更改。

于 2013-05-31T19:03:00.877 回答
0

假设您的$files仅包含一个文件名+扩展名,即myimage.png

foreach($files as $file) {
   $split = explode(".", $file);
   $extension = array_pop($split);

   if (in_array($extension, array('gif', 'jpeg', 'jpg', 'png'))) {
      $images = $file;
   } else {
      $images = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
   }

   //display your image
   echo '<div ...';
}
于 2013-05-31T18:57:19.650 回答
0

把它改成这样

<?php

        // Find all files in that folder
        $files = glob('files/*');

        // Do a natural case insensitive sort, usually 1.jpg and 10.jpg would come next to each other with a regular sort
        natcasesort($files);

        $extensions = array("gif", "jpeg", "jpg", "png");

        // Display images
        foreach($files as $file) {
           $pi - pathinfo($file);
           if(!in_array($pi['extension'], $extensions)) {
              $file = "http://hg.exbabylon.net/find_fitter/placeholder.jpg";
           }

           echo '<div class="one_half"><img src="' . $file . '" class="images" /></br><h2>' .basename($file). '</h2><a class="download" href="fitter/download.php?file='.base64_encode($file).'"></a></div>';
        }

    ?>
于 2013-05-31T18:58:11.523 回答