使用PHP列出目录中所有图片

16
我有以下代码,它列出文件夹中的所有图像,但问题是它找到了一些文件(一个 . 和一个 ..),我不确定它们是什么,因此不知道如何防止它们显示出来。我在windows XP机器上,任何帮助都将非常感谢,谢谢。

错误:警告:rename(images /。, images /。)[function.rename]:无错误 在C:\ wamp \ www \ Testing \ listPhotosA.php的第14行

警告:重命名(images /..,images /..)[function.rename]:无错误 在C:\ wamp \ www \ Testing \ listPhotosA.php的第14行

代码:

<?php
define('IMAGEPATH', 'images/');

if (is_dir(IMAGEPATH)){
    $handle = opendir(IMAGEPATH);
}
else{
    echo 'No image directory';
}

$directoryfiles = array();
while (($file = readdir($handle)) !== false) {
    $newfile = str_replace(' ', '_', $file);
    rename(IMAGEPATH . $file, IMAGEPATH . $newfile);
    $directoryfiles[] = $newfile;
}

foreach($directoryfiles as $directoryfile){
    if(strlen($directoryfile) > 3){
    echo '<img src="' . IMAGEPATH . $directoryfile . '" alt="' . $directoryfile . '" /> <br>';
    }
}

closedir($handle); ?>
8个回答

32

我喜欢 PHP 的 glob 函数。

foreach(glob(IMAGEPATH.'*') as $filename){
    echo basename($filename) . "\n";
}

1
“.” 是当前目录,“..” 是父目录。我不知道为什么 opendir 显示它们。 - gen_Eric
如果图像路径包含括号,例如[byUser],该怎么办? - jscripter
@BubuDaba: 不确定。试一试吧。 - gen_Eric
1
@RocketHazmat,它不起作用是因为glob将字符串解析为正则表达式模式,因此正则表达式字符会破坏它。我尝试使用preg_quote进行转义,但它也不起作用。我不知道为什么,我不是专家。 - jscripter
@BubuDaba:你可能想把这个问题作为你自己的问题来问,看看别人有什么说法。 - gen_Eric
显示剩余3条评论

12

glob() 函数区分大小写,通配符 * 将返回所有文件,因此我在这里指定了扩展名,以便您无需进行过滤工作。

$d = 'path/to/images/';
foreach(glob($d.'*.{jpg,JPG,jpeg,JPEG,png,PNG}',GLOB_BRACE) as $file){
    $imag[] =  basename($file);
}

$images = glob('public/'.$folder.'//{jpg,JPG,jpeg,JPEG,png,PNG}', GLOB_BRACE); 对于子目录来说更好。 - undefined

6
使用 glob 函数。
<?php
define('IMAGEPATH', 'images/');
foreach(glob(IMAGEPATH.'*') as $filename){
    $imag[] =  basename($filename);
}
print_r($imag);
?>

你已经获得了所有图像的数组格式。

2

获取文件夹内所有目录及子目录中的jpg图片:

function getAllDirs($directory, $directory_seperator) {
  $dirs = array_map(function ($item) use ($directory_seperator) {
    return $item . $directory_seperator;
  }, array_filter(glob($directory . '*'), 'is_dir'));
  foreach ($dirs AS $dir) {
    $dirs = array_merge($dirs, getAllDirs($dir, $directory_seperator));
  }
  return $dirs;
}

function getAllImgs($directory) {
  $resizedFilePath = array();
  foreach ($directory AS $dir) {
    foreach (glob($dir . '*.jpg') as $filename) {
        array_push($resizedFilePath, $filename);
    }
  }
  return $resizedFilePath;
}

$directory = "C:/xampp/htdocs/images/";
$directory_seperator = "/";
$allimages = getAllImgs(getAllDirs($directory, $directory_seperator));

1

0

你可以使用面向对象编程的DirectoryIterator类。

foreach (new DirectoryIterator(IMAGEPATH) as $fileInfo) {
    // Removing dots
    if($fileInfo->isDot()) {
        continue;
    }

    // You have all necessary data in $fileInfo
    echo $fileInfo->getFilename() . "<br>\n";
}

0
请使用以下代码从文件夹中读取图像。
function readDataFromImageFolder() {

$imageFolderName = 14;
$base = dirname(__FILE__);
$dirname = $base.DS.'images'.DS.$imageFolderName.DS;
$files = array();

if (!file_exists($dirname)) {
    echo "The directory $dirname not exists.".PHP_EOL;
    exit;
} else {
    echo "The directory $dirname exists.".PHP_EOL;
    $dh  = opendir( $dirname );

    while (false !== ($filename = readdir($dh))) {
        if ($filename === '.' || $filename === '..') continue;
        $files[] = $dirname.$filename;
    }
    uploadImages( $files );
}
}

请点击此处获取详细说明。 http://www.pearlbells.co.uk/code-snippets/read-images-folder-php/


-1
while (($file = readdir($handle)) !== false) {
    if (
        ($file == '.')||
        ($file == '..')
    ) {
        continue;
    }
    $newfile = str_replace(' ', '_', $file);
    rename(IMAGEPATH . $file, IMAGEPATH . $newfile);
    $directoryfiles[] = $newfile;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接