Vytvorenie priečinka, ak ešte neexistuje

I've run into a few cases with WordPress installs with Bluehost where I've encountered errors with my WordPress theme because the uploads folder wp-content/uploads was not present.

Zrejme inštalátor WP v paneli cPanel spoločnosti Bluehost tento priečinok nevytvára, hoci HostGator áno.

Musím teda do svojej témy pridať kód, ktorý priečinok skontroluje a v opačnom prípade ho vytvorí.

Riešenie

Skúste toto:

if (!file_exists('path/to/directory')) {
    mkdir('path/to/directory', 0777, true);
}

Všimnite si, že 0777 je už predvolený režim pre adresáre a môže byť ešte upravený aktuálnym umask.

Komentáre (10)

Niečo univerzálnejšie, keďže sa to objavuje na Googli. Zatiaľ čo podrobnosti sú konkrétnejšie, názov tejto otázky je univerzálnejší.

/** 
 * recursively create a long directory path
 */
function createPath($path) {
    if (is_dir($path)) return true;
    $prev_path = substr($path, 0, strrpos($path, '/', -2) + 1 );
    $return = createPath($prev_path);
    return ($return && is_writable($prev_path)) ? mkdir($path) : false;
}

Toto vezme cestu, prípadne s dlhým reťazcom nevytvorených adresárov, a bude pokračovať o jeden adresár vyššie, kým sa nedostane do existujúceho adresára. Potom sa pokúsi vytvoriť ďalší adresár v tomto adresári a bude pokračovať, kým nevytvorí všetky adresáre. V prípade úspechu vráti true.

Mohlo by sa to vylepšiť poskytnutím úrovne zastavenia, takže by to jednoducho zlyhalo, ak to prekročí používateľský adresár alebo niečo podobné, a zahrnutím oprávnení.

Komentáre (3)

A čo tak takáto pomocná funkcia:

function makeDir($path)
{
     $ret = mkdir($path); // use @mkdir if you want to suppress warnings/errors
     return $ret === true || is_dir($path);
}

Vráti true, ak bol adresár úspešne vytvorený alebo už existuje, a false, ak sa adresár nepodarilo vytvoriť.

Lepšia** alternatíva je táto (nemala by dávať žiadne varovania):

function makeDir($path)
{
     return is_dir($path) || mkdir($path);
}
Komentáre (5)