I've naleteli na nekaj primerov z WordPress namesti z Bluehost, kjer I've naleteli na napake z mojo temo WordPress, ker mape za nalaganje wp-content/uploads
ni bilo prisotno.
Očitno Bluehostov namestitveni program WP v cPanelu ne ustvari te mape, čeprav jo HostGator ustvari.
Zato moram v svojo temo dodati kodo, ki preveri, ali je mapa vzpostavljena, in jo v nasprotnem primeru ustvari.
Poskusite to:
if (!file_exists('path/to/directory')) {
mkdir('path/to/directory', 0777, true);
}
Upoštevajte, da je 0777
že privzeti način za imenike in ga lahko še vedno spremenite s trenutno umasko.
Nekaj bolj univerzalnega, saj se to pojavlja na Googlu. Medtem ko so podrobnosti bolj specifične, je naslov tega vprašanja bolj univerzalen.
/**
* 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;
}
To bo vzelo pot, po možnosti z dolgo verigo nerazvitih imenikov, in se povzpelo za en imenik, dokler ne bo prišlo do obstoječega imenika. Nato bo poskušal ustvariti naslednji imenik v tem imeniku in nadaljeval, dokler ne bo ustvaril vseh imenikov. Če je uspešno, vrne true.
Izboljšali bi ga lahko z določitvijo stopnje zaustavitve, tako da bi bil neuspešen, če bi presegel uporabniško mapo ali kaj podobnega, in z vključitvijo dovoljenj.
Kaj pa pomožna funkcija, kot je ta:
function makeDir($path)
{
$ret = mkdir($path); // use @mkdir if you want to suppress warnings/errors
return $ret === true || is_dir($path);
}
Vrnila bo true
, če je bil imenik uspešno ustvarjen ali že obstaja, in false
, če imenika ni bilo mogoče ustvariti.
Boljša** alternativa je ta (ne bi smela dajati nobenih opozoril):
function makeDir($path)
{
return is_dir($path) || mkdir($path);
}