Izveidot mapi, ja tā vēl nepastāv

Es'Es'esmu palaist uz dažiem gadījumiem ar WordPress instalē ar Bluehost, kur es esmu sastapties kļūdas ar manu WordPress tēmu, jo augšupielādes mape wp-content/uploads nebija klāt.

Acīmredzot Bluehost cPanel WP instalētājs šo mapi neveido, lai gan HostGator to dara.

Tāpēc man ir jāpievieno kods savai tēmai, kas pārbauda, vai ir šī mape, un citādi to izveido.

Risinājums

Izmēģiniet šo:

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

Ņemiet vērā, ka 0777 jau ir noklusējuma režīms direktorijiem, un to joprojām var mainīt pašreizējā umaska.

Komentāri (10)

Kaut kas universālāks, jo tas parādās google. Lai gan sīkāka informācija ir specifiskāka, šī jautājuma nosaukums ir universālāks.

/** 
 * 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;
}

Tas ņems ceļu, iespējams, ar garu neizveidotu direktoriju ķēdi, un turpinās virzīties augšup pa direktoriju, līdz nonāks līdz esošajam direktorijam. Tad mēģinās izveidot nākamo direktoriju šajā direktorijā un turpinās, līdz būs izveidoti visi direktoriji. Ja tas izdodas, atgriež true.

Varētu uzlabot, nodrošinot apstāšanās līmeni, lai tas vienkārši neizdodas, ja tas pārsniedz lietotāja mapi vai kaut ko tamlīdzīgu, un iekļaujot atļaujas.

Komentāri (3)

Kā rīkoties ar šādu palīgfunkciju:

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

Tā atgriezīs true, ja direktorijs ir veiksmīgi izveidots vai jau eksistē, un false, ja direktoriju neizdosies izveidot.

Labāka** alternatīva ir šāda (nevajadzētu dot brīdinājumus):

function makeDir($path)
{
     return is_dir($path) || mkdir($path);
}
Komentāri (5)