2010-09-17 27 views
11

Tengo el siguiente código que enumera todas las imágenes en una carpeta, el problema es que se encuentra algunos archivos (a. Y una ..) que no estoy seguro de lo que así que no estoy seguro de cómo evitar que aparezcan. Estoy en una máquina de Windows XP , cualquier ayuda sería genial, gracias.listado todas las imágenes en un directorio usando PHP

Errores: Advertencia: cambiar el nombre (imágenes /, imágenes /..) [Function.rename]: No hay error en C: \ wamp \ www \ Prueba \ listPhotosA.php en la línea 14

Advertencia : cambiar el nombre (imágenes/.., imágenes/..) [function.rename]: No hay error en C: \ wamp \ www \ Prueba \ listPhotosA.php en la línea 14

Código:

<?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); ?> 

Respuesta

19

Me gusta la función glob de PHP.

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

agradable no saber que – balupton

+0

Gran! No me di cuenta de que PHP tenía un glob, que funcionó muy bien. Todavía no sé qué. y ... son eso que opendir estaba encontrando. ¿Algunas ideas? Solo tengo curiosidad por el futuro – Drewdin

+1

'.' es el directorio actual, y '..' es el directorio principal. No sé por qué opendir los estaba mostrando. –

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

Use la función global.

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

Usted tiene todas las imágenes en formato de matriz

+0

¿Funcionaría? con imagepath con paréntesis? – jscripter

1

Para obtener todas las imágenes jpg en todos los directorios y subdirectorios dentro de una carpeta:

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)); 
0

Utilice el código siguiente para leer las imágenes de la carpeta .

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); 
} 
} 

Por favor, haga clic aquí para una explicación más detallada. http://www.pearlbells.co.uk/code-snippets/read-images-folder-php/

5

glob() mayúsculas y minúsculas y el comodín * devolverá todos los archivos, por lo que especifica la extensión aquí, así que no tiene que hacer el trabajo de filtrado

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