Leggere contenuto di una cartella e relative sottocartelle

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
Buonasera. Utilizzo la funzione glob() per leggere i file in una directory. Ho bisogno però di leggere il contenuto di una cartella con le relative sottocartelle e tirare fuori solo le immagini.
Come posso fare?
grazie a tutti
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
se non ho capito male tu hai es una cartella che contiene delle immagini e delle altre cartelle che a loro volta contengono delle immagini e vuoi estrarre tutte le immagini?
se è così potresti provare prima ad estrrare tutte le sottocartelle
PHP:
<?php
//....
$cart="principale";
$immagini=glob($cart."/*.jpg");//estrai tutte le immagini che hai nella cartella principale
$sotto_cart=glob($cart."/*",GLOB_ONLYDIR);//estrai i nomi delle sottocartelle
//cicli
foreach($sotto_cart as $sc){
	$path=$cart."/".$sc."/";
	$immagini=array_merge($immagini,glob($path."*.jpg"));//estrai le immagini dalle sottocartelle
}
echo "<pre>";
var_dump($immagini);
echo "</pre>";
//...
?>
eventualmento provalo perchè l'ho buttato giù di brutto sensa pensarci molto
 

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
Grazie per la risposta. Ho provato ma non funziona, allora ho trovato questo che funziona:

PHP:
$directory = './foto/gallery';
$it = new RecursiveDirectoryIterator("$directory");
foreach(new RecursiveIteratorIterator($it) as $file)
{
	$items[] = preg_replace("#\\\#", "/", $file);
	
}
sort($items);
foreach($items as $item)
{
	echo $item."<br>";
}
Il problema è che lui mi estrae anche il percorso cosi:

foto/gallery/.
foto/gallery/..
foto/gallery/foto.jpg
...

Sto cercando come fare per non fargli scrivere le prime due righe o comunque ho provato a inserire una condizione che se è presente /. e /.. nella stringa non aggiunge in array ma non funziona.

suggerimenti?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
puoi provare così cercando l'estensione dell'immagine
PHP:
<?php
$directory = './foto/gallery';
$it = new RecursiveDirectoryIterator("$directory");
foreach(new RecursiveIteratorIterator($it) as $file)
{
    if(stripos($file, ".jpg")>0){//poi se hai anche gif e png metti gli or
		$items[] = preg_replace("#\\\#", "/", $file);
    }
}
sort($items);
foreach($items as $item)
{
    echo $item."<br>";
}  
?>
 

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
Eccomi. Grazie per la risposta. Potrebbero esserci più estensioni e non saprei come gestirlo. Allora ho fatto questa modifica:
PHP:
$directory = './foto/gallery';
$it = new RecursiveDirectoryIterator("$directory");
foreach(new RecursiveIteratorIterator($it) as $file)
{
	$posizione1 = strpos("$file","\.");
	$posizione2 = strpos("$file","\..");
	if(!$posizione1 || !$posizione1)
		$items[] = preg_replace("#\\\#", "/", $file);
}
sort($items);
foreach($items as $item)
{
	echo $item."<br>";
}
in base alla condizione se strpos trova \. o \.. non aggiunge nell'array. Non so se è valida come soluzione ma funziona...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
non funzia
perche avevo fatto un errore io
PHP:
<?php
//....
foreach($sotto_cart as $sc){
	$path=$sc."/";//non dovevo aggiungere il percosro
	var_dump($path);
    $immagini=array_merge($immagini,glob($path."*.jpg"));//estrai le immagini dalle sottocartelle
}
//...
?>
 

giamma

Utente Attivo
4 Mag 2005
111
0
0
e scusate perchè non stampare due cicli foreach?
Si risparmia stress funziona e stampa tranquillamente il contenuto della cartella principale e della sottocartella:
PHP:
foreach(glob('*.jpg') as $img)
	{
	
		echo "Nome del file: " . $img . "<br/>";
 }	
 
foreach(glob('*/*.jpg') as $sot_img)
	{
		echo "Nome del file: " . $sot_img . "<br/>";
	}