Перечисление всех изображений в каталоге с использованием PHP - PullRequest
11 голосов
/ 17 сентября 2010

У меня есть код ниже, который перечисляет все изображения в папке, проблема в том, что он находит некоторые файлы (a. И a ..) , что я не уверен, что они есть, поэтому яне уверен, как предотвратить их появление.Я на машине с Windows XP , любая помощь будет отличной, спасибо.

Ошибки: Предупреждение: переименуйте (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 ]

22 голосов
/ 17 сентября 2010

Мне нравится функция PHP glob.

foreach(glob(IMAGEPATH.'*') as $filename){
    echo basename($filename) . "\n";
}
7 голосов
/ 16 августа 2017

glob () чувствителен к регистру, и подстановочный знак * вернет все файлы, поэтому я указал здесь расширение, чтобы вам не пришлось выполнять фильтрацию

$d = 'path/to/images/';
foreach(glob($d.'*.{jpg,JPG,jpeg,JPEG,png,PNG}',GLOB_BRACE) as $file){
    $imag[] =  basename($file);
}
4 голосов
/ 19 августа 2013

Используйте функцию glob.

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

У вас есть все изображения в формате массива

1 голос
/ 09 марта 2015

Чтобы получить все изображения 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 голос
/ 17 сентября 2010

Использование функции scan_dir от balphp: https://github.com/balupton/balphp/blob/765ee3cfc4814ab05bf3b5512b62b8b984fe0369/lib/core/functions/_scan_dir.funcs.php

scan_dir($dirPath, array('pattern'=>'image'));

Возвращает массив всех файлов, которые являются изображениями по этому пути и всех подкаталогов, используя структуру $path => $filename Чтобы отключить сканирование подкаталогов, установите для параметра recurse значение false

.
0 голосов
/ 11 июня 2018

Вы можете использовать OPP-ориентированный 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 голосов
/ 05 августа 2017

Пожалуйста, используйте следующий код для чтения изображений из папки.

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/

0 голосов
/ 17 сентября 2010
while (($file = readdir($handle)) !== false) {
    if (
        ($file == '.')||
        ($file == '..')
    ) {
        continue;
    }
    $newfile = str_replace(' ', '_', $file);
    rename(IMAGEPATH . $file, IMAGEPATH . $newfile);
    $directoryfiles[] = $newfile;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...