【问题标题】:Pull all images from a specified directory and then display them从指定目录拉取所有图像,然后显示它们
【发布时间】:2012-08-10 14:01:42
【问题描述】:

如何显示指定目录的图片?就像我想显示一个目录中的所有 png 图像一样,在我的情况下,我的目录是 media/images/iconized。

我试着环顾四周,但似乎没有一个适合我真正需要的。

但这是我的尝试。

$dirname = "media/images/iconized/";
$images = scandir($dirname);
$ignore = Array(".", "..");
foreach($images as $curimg){
    if(!in_array($curimg, $ignore)) {
        echo "<img src='media/images/iconized/$curimg' /><br>\n";
    }
}

希望这里有人可以提供帮助。我愿意接受任何想法、建议和建议,谢谢。

【问题讨论】:

  • 您的尝试有什么问题?您需要提供有关您遇到的问题的更多信息。
  • 这段代码对我有用。只能假设您的文件夹路径未正确解析。或者脚本无法读取文件夹。
  • 如果我们尝试显示带有计时器功能的图像会更好。

标签: php


【解决方案1】:

您也可以为此使用glob:

$dirname = "media/images/iconized/";
$images = glob($dirname."*.png");

foreach($images as $image) {
    echo '<img src="'.$image.'" /><br />';
}

【讨论】:

  • 多个图像扩展怎么样,而不是只有 png,我也想考虑 JPEG 或 gif 或我想要的。
  • 你可以这样写 glob("{$dirname}*.png, {$dirname}*.jpeg, {$dirname}*..gif")
  • @MightyLucene 您在评论中的建议不起作用。一种方法是这样的:$images = glob($dirname."*.{jpg,gif,png}",GLOB_BRACE); From glob manual : GLOB_BRACE - 扩展 {a,b,c} 以匹配 'a'、'b' 或 'c'
  • 多个扩展是这样的:$images = glob($dirname."*.[JjPp][PpNn][Gg]"); 所以只需用可能的组合来填充每个字符,以便快速而顺利地实现
  • 我建议对图像添加限制:echo "&lt;img src='$image' style='max-width:100px; max-height:100px;' /&gt; ";
【解决方案2】:

您可以使用简单的 php 脚本显示文件夹中的所有图像。假设文件夹名称为“images”并在此文件夹中放置一些图像,然后使用任何文本编辑器并粘贴此代码并运行此脚本。 这是php代码

    <?php
     $files = glob("images/*.*");
     for ($i=0; $i<count($files); $i++)
      {
        $image = $files[$i];
        $supported_file = array(
                'gif',
                'jpg',
                'jpeg',
                'png'
         );

         $ext = strtolower(pathinfo($image, PATHINFO_EXTENSION));
         if (in_array($ext, $supported_file)) {
            echo basename($image)."<br />"; // show only image name if you want to show full path then use this code // echo $image."<br />";
             echo '<img src="'.$image .'" alt="Random image" />'."<br /><br />";
            } else {
                continue;
            }
          }
       ?>

如果您不检查图像类型,请使用此代码

<?php
$files = glob("images/*.*");
for ($i = 0; $i < count($files); $i++) {
    $image = $files[$i];
    echo basename($image) . "<br />"; // show only image name if you want to show full path then use this code // echo $image."<br />";
    echo '<img src="' . $image . '" alt="Random image" />' . "<br /><br />";

}
?>

【讨论】:

  • 我相信这段代码假定 images 文件夹中的每个文件实际上都是一个图像。如果一个文本文件是错误的,那么它也会被显示出来。
  • 为什么在 for 循环中从 1 开始?那么第一个文件不是被遗忘了吗?
  • 我只是使用循环,所以我可以从 0 或 1 开始,我还使用 count(array),所以循环继续文件夹中的所有图像
  • 所有文件,而不是所有图像。如果您打算这样说,那么所有扩展都被接受。包括.pdf、.txt等
【解决方案3】:

您需要将循环从for ($i=1; $i&lt;count($files); $i++) 更改为for ($i=0; $i&lt;count($files); $i++):

所以正确的代码是

<?php
$files = glob("images/*.*");

for ($i=0; $i<count($files); $i++) {
    $image = $files[$i];
    print $image ."<br />";
    echo '<img src="'.$image .'" alt="Random image" />'."<br /><br />";
}

?>

【讨论】:

    【解决方案4】:

    如果有人正在寻找递归。

    <?php
    
    echo scanDirectoryImages("images");
    
    /**
     * Recursively search through directory for images and display them
     * 
     * @param  array  $exts
     * @param  string $directory
     * @return string
     */
    function scanDirectoryImages($directory, array $exts = array('jpeg', 'jpg', 'gif', 'png'))
    {
        if (substr($directory, -1) == '/') {
            $directory = substr($directory, 0, -1);
        }
        $html = '';
        if (
            is_readable($directory)
            && (file_exists($directory) || is_dir($directory))
        ) {
            $directoryList = opendir($directory);
            while($file = readdir($directoryList)) {
                if ($file != '.' && $file != '..') {
                    $path = $directory . '/' . $file;
                    if (is_readable($path)) {
                        if (is_dir($path)) {
                            return scanDirectoryImages($path, $exts);
                        }
                        if (
                            is_file($path)
                            && in_array(end(explode('.', end(explode('/', $path)))), $exts)
                        ) {
                            $html .= '<a href="' . $path . '"><img src="' . $path
                                . '" style="max-height:100px;max-width:100px" /></a>';
                        }
                    }
                }
            }
            closedir($directoryList);
        }
        return $html;
    }
    

    【讨论】:

    • 严格标准:只有变量应该通过引用传递。该: && in_array(end(explode('.', end(explode('/', $path)))), $exts) 部分。
    【解决方案5】:

    试试 SPL DirectoryIterator 类

    <?
    foreach ((new DirectoryIterator("mydir/")) as $fileinfo) {
       // Ignore .files (.htaccess, .DS_Store, etc)
       if (!$fileinfo->isDot()) {
          // Check if file is a PNG
          if ($fileinfo->getExtension() == 'png') {
             echo "This is a PNG image.";
          }
       }
    }
    

    【讨论】:

      【解决方案6】:

      严格标准:只有变量应该在 /home/aadarshi/public_html/----------/upload/view.php 第 32 行通过引用传递

      代码是:

      <?php
      
      echo scanDirectoryImages("uploads");
      
      /**
      * Recursively search through directory for images and display them
      * 
      * @param  array  $exts
      * @param  string $directory
      * @return string
      */
      function scanDirectoryImages($directory, array $exts = array('jpeg', 'jpg', 'gif', 'png'))
      {
      if (substr($directory, -1) == '/') {
          $directory = substr($directory, 0, -1);
      }
      $html = '';
      if (
          is_readable($directory)
          && (file_exists($directory) || is_dir($directory))
      ) {
          $directoryList = opendir($directory);
          while($file = readdir($directoryList)) {
              if ($file != '.' && $file != '..') {
                  $path = $directory . '/' . $file;
                  if (is_readable($path)) {
                      if (is_dir($path)) {
                          return scanDirectoryImages($path, $exts);
                      }
                      if (
                          is_file($path)
                          && in_array(end(explode('.', end(explode('/', $path)))),   $exts)
                      ) {
                          $html .= '<a href="' . $path . '"><img src="' . $path
                              . '" style="max-height:100px;max-width:100px" />  </a>';
                      }
                  }
              }
          }
          closedir($directoryList);
      }
      return $html;
      }
      

      【讨论】:

      • 您应该为您的答案添加更多解释,否则它可能会被删除。请同时修正你的格式。
      • 您能否解释一下您在代码中所做的更改,以免出错?
      • 代码没有修复任何东西,同样的错误信息产生“只有变量应该通过引用传递”
      猜你喜欢
      • 2012-03-26
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      相关资源
      最近更新 更多