PHP显示图像if else语句

时间:2013-05-31 18:49:24

标签: php image

我现在有一个脚本,适用于公司资源的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>';
        }

    ?>

6 个答案:

答案 0 :(得分: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);
    
  4. 然后,您可以根据(2)中的mime类型进行比较。

答案 1 :(得分: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>';
    }

?>

答案 2 :(得分: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>';
}

答案 3 :(得分: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 ...';
}

答案 4 :(得分: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>';
        }

    ?>

答案 5 :(得分: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 documentation

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