C'è un modo per ottenere solo immagini con estensioni jpeg
, png
, gif
ecc durante l'utilizzo diCome ottenere solo immagini usando scandir in PHP?
$dir = '/tmp';
$files1 = scandir($dir);
C'è un modo per ottenere solo immagini con estensioni jpeg
, png
, gif
ecc durante l'utilizzo diCome ottenere solo immagini usando scandir in PHP?
$dir = '/tmp';
$files1 = scandir($dir);
È possibile utilizzare glob
$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE);
Se avete bisogno di questo per essere tra maiuscole e minuscole, è possibile utilizzare una DirectoryIterator
in combinazione con un RegexIterator
o passare il risultato di scandir
-array_map
e utilizzare un callback che filtra eventuali estensioni indesiderate. Se si utilizza strpos
, fnmatch
o pathinfo
per ottenere l'estensione dipende da voi.
È possibile cercare la matrice risultante in seguito ed eliminare file non corrispondente ai criteri.
scandir
non ha la funzionalità che si cerca.
lo farei scorrere i file e guardare le loro estensioni:
$dir = '/tmp';
$dh = opendir($dir);
while (false !== ($fileName = readdir($dh))) {
$ext = substr($fileName, strrpos($fileName, '.') + 1);
if(in_array($ext, array("jpg","jpeg","png","gif")))
$files1[] = $fileName;
}
Ecco un modo semplice per ottenere solo immagini. Funziona con la versione PHP> = 5.2. La collezione di estensioni è in minuscolo, quindi rendere l'estensione del file in loop in minuscolo renderla non sensibile al maiuscolo/minuscolo.
// image extensions
$extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp');
// init result
$result = array();
// directory to scan
$directory = new DirectoryIterator('/dir/to/scan/');
// iterate
foreach ($directory as $fileinfo) {
// must be a file
if ($fileinfo->isFile()) {
// file extension
$extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION));
// check if extension match
if (in_array($extension, $extensions)) {
// add to result
$result[] = $fileinfo->getFilename();
}
}
}
// print result
print_r($result);
Spero che questo sia utile se si desidera che le estensioni non siano sensibili alla distinzione tra maiuscole e minuscole.
Funziona perfettamente! –
La domanda vera stava usando scandir e le risposte finiscono in glob. C'è un'enorme differenza in entrambi i casi in cui Blob considerevolmente pesante. Lo stesso filtraggio può essere fatto con scandir usando il seguente codice:
$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));
Spero che questo possa aiutare qualcuno.
Se si desidera eseguire la scansione di una directory e restituire i nomi di file solo è possibile utilizzare questo:
$fileNames = array_map(
function($filePath) {
return basename($filePath);
},
glob('./includes/*.{php}', GLOB_BRACE)
);
scandir()
sarà tornare .
e ..
così come i file, in modo che il codice di cui sopra è più pulita se avete solo bisogno nomi di file o ti piacerebbe fare altre cose con i percorsi di file effettivi
grazie. –
Che ... non usa più 'scandir()'. Ma è altrimenti corretto. Quindi non dovrebbe essere "no, con' glob' "? – Borealid
@ nitpicker borealid: D – Gordon
Ora rendi il case insensibile. > :) – salathe