从指定目录拉取所有图像,然后显示它们
Posted
技术标签:
【中文标题】从指定目录拉取所有图像,然后显示它们【英文标题】: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";
希望这里有人可以提供帮助。我愿意接受任何想法、建议和建议,谢谢。
【问题讨论】:
您的尝试有什么问题?您需要提供有关您遇到的问题的更多信息。 这段代码对我有用。只能假设您的文件夹路径未正确解析。或者脚本无法读取文件夹。 如果我们尝试显示带有计时器功能的图像会更好。 【参考方案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 "<img src='$image' style='max-width:100px; max-height:100px;' /> ";
【参考方案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 .'" />'."<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 . '" />' . "<br /><br />";
?>
【讨论】:
我相信这段代码假定 images 文件夹中的每个文件实际上都是一个图像。如果一个文本文件是错误的,那么它也会被显示出来。 为什么在 for 循环中从 1 开始?那么第一个文件不是被遗忘了吗? 我只是使用循环,所以我可以从 0 或 1 开始,我还使用 count(array),所以循环继续文件夹中的所有图像 所有文件,而不是所有图像。如果您打算这样说,那么所有扩展都被接受。包括.pdf、.txt等【参考方案3】:您需要将循环从for ($i=1; $i<count($files); $i++)
更改为for ($i=0; $i<count($files); $i++)
:
所以正确的代码是
<?php
$files = glob("images/*.*");
for ($i=0; $i<count($files); $i++)
$image = $files[$i];
print $image ."<br />";
echo '<img src="'.$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;
【讨论】:
您应该为您的答案添加更多解释,否则它可能会被删除。请同时修正你的格式。 您能否解释一下您在代码中所做的更改,以免出错? 代码没有修复任何东西,同样的错误信息产生“只有变量应该通过引用传递”以上是关于从指定目录拉取所有图像,然后显示它们的主要内容,如果未能解决你的问题,请参考以下文章