Je souhaite générer automatiquement une liste de toutes les images de mon dossier public, mais je n'arrive pas à trouver d'objet qui puisse m'aider à le faire.
La classe Storage
semble être un bon candidat pour le travail, mais elle me permet uniquement de rechercher des fichiers dans le dossier de stockage, qui se trouve en dehors du dossier public.
Vous pouvez créer un autre disque pour la classe Storage. Ce serait la meilleure solution pour vous à mon avis.
Dans config/filesystems.php dans le tableau de disques, ajoutez le dossier souhaité. Le dossier public dans ce cas.
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path().'/app',
],
'public' => [
'driver' => 'local',
'root' => public_path(),
],
's3' => '....'
Ensuite, vous pouvez utiliser la classe Storage pour travailler dans votre dossier public de la manière suivante:
$exists = Storage::disk('public')->exists('file.jpg');
La variable $ existe vous dira si file.jpg existe dans le dossier public car le disque Storage 'public' pointe vers le dossier public du projet.
Vous pouvez utiliser toutes les méthodes Session de la documentation avec votre disque personnalisé. Ajoutez simplement la partie disque ('publique').
Storage::disk('public')-> // any method you want from
Pensez à utiliser glob. Pas besoin de trop compliquer les barebones PHP avec les classes/méthodes d'assistance dans Laravel 5.
<?php
foreach (glob("/location/for/public/images/*.png") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
}
?>
Pour lister toutes les images de votre répertoire public, essayez ceci: Voyez ici btw http://php.net/manual/en/class.splfileinfo.php
function getImageRelativePathsWfilenames(){
$result = [];
$dirs = File::directories(public_path());
foreach($dirs as $dir){
var_dump($dir); //actually string: /home/mylinuxiser/myproject/public"
$files = File::files($dir);
foreach($files as $f){
var_dump($f); //actually object SplFileInfo
//object(Symfony\Component\Finder\SplFileInfo)#628 (4) {
//["relativePath":"Symfony\Component\Finder\SplFileInfo":private]=>
//string(0) ""
//["relativePathname":"Symfony\Component\Finder\SplFileInfo":private]=>
//string(14) "text1_logo.png"
//["pathName":"SplFileInfo":private]=>
//string(82) "/home/mylinuxiser/myproject/public/img/text1_logo.png"
//["fileName":"SplFileInfo":private]=>
//string(14) "text1_logo.png"
//}
if(ends_with($f, ['.png', '.jpg', '.jpeg', '.gif'])){
$result[] = $f->getRelativePathname(); //prefix your public folder here if you want
}
}
}
return $result; //will be in this case ['img/text1_logo.png']
}
Pour lister tous les fichiers du répertoire, utilisez cette commande
$dir_path = public_path() . '/dirname';
$dir = new DirectoryIterator($dir_path);
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
}
else {
}
}