web-dev-qa-db-fra.com

Comment savoir si un dossier existe avant de le créer dans laravel?

J'ai besoin de savoir si un dossier existe avant de le créer, c'est parce que je stocke des photos à l'intérieur et je crains que les photos soient supprimées si elles écrasent le dossier. Le code que je dois créer un dossier est le suivant

$path = public_path().'/images';
File::makeDirectory($path, $mode = 0777, true, true);

comment puis-je le faire?

37
TuGordoBello

Voir: file_exists ()

Usage:

if (!file_exists($path)) {
    // path does not exist
}

À Laravel:

if(!File::exists($path)) {
    // path does not exist
}
57
mister martin

Avec Laravel vous pouvez utiliser:

$path = public_path().'/images';
File::isDirectory($path) or File::makeDirectory($path, 0777, true, true);

Soit dit en passant, vous pouvez également mettre des sous-dossiers en argument dans une fonction d'assistance de chemin Laravel, comme ceci:

$path = public_path('images/');
21
suarsenegger

La manière recommandée est d'utiliser

if (!File::exists($path))
{

}

Voir le code source

Si vous regardez le code, il appelle file_exists()

3
edi9999

Voie -1:

if(!is_dir($backupLoc)) {

    mkdir($backupLoc, 0755, true);
}

Voie -2:

if (!file_exists($backupLoc)) {

    mkdir($backupLoc, 0755, true);
}

Voie -3:

if(!File::exists($backupLoc)) {

    File::makeDirectory($backupLoc, 0755, true, true);
}

N'oubliez pas d'utiliser Illuminate\Support\Facades\File;

Voie -4:

if(!File::exists($backupLoc)) {

    Storage::makeDirectory($backupLoc, 0755, true, true);
}

De cette façon, vous devez d'abord mettre la configuration dans le dossier config filesystems.php. [Non recommandé sauf si vous utilisez des disques externes]

1
Atiqur

Je crée normalement des dossiers aléatoires à l'intérieur des images pour chaque fichier, cela aide un peu au cryptage des URL et donc le public aura du mal à voir vos fichiers en tapant simplement l'URL dans votre répertoire.

// Check if Logo is uploaded and file in random folder name -  
if (Input::hasFile('whatever_logo'))
            {
                $destinationPath = 'uploads/images/' .str_random(8).'/';
                $file = Input::file('whatever_logo');
                $filename = $file->getClientOriginalName();                
                $file->move($destinationPath, $filename);
                $savedPath = $destinationPath . $filename;
                $this->whatever->logo = $savedPath;
                $this->whatever->save();
            }

            // otherwise NULL the logo field in DB table.
            else 
            {
                $this->whatever->logo = NULL;    
                $this->whatever->save();    
            }            
0
Keith Mifsud