Créez un dossier s'il n'existe pas encore.

J&#8217ai rencontré quelques cas d&#8217installation de WordPress avec Bluehost où j&#8217ai rencontré des erreurs avec mon thème WordPress parce que le dossier de téléchargement wp-content/uploads n&#8217était pas présent.

Apparemment, le programme d'installation de WP dans le cPanel de Bluehost ne crée pas ce dossier, alors que HostGator le fait.

Je dois donc ajouter un code à mon thème qui vérifie la présence du dossier et le crée sinon.

Solution

Essayez ça :

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

Notez que 0777 est déjà le mode par défaut pour les répertoires et peut encore être modifié par l'umask actuel.

Commentaires (10)

Quelque chose d'un peu plus universel puisque cela apparaît sur Google. Si les détails sont plus spécifiques, le titre de cette question est plus universel.

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

Cela prendra un chemin, éventuellement avec une longue chaîne de répertoires non créés, et continuera à monter d'un répertoire jusqu'à ce qu'il arrive à un répertoire existant. Elle tente alors de créer le répertoire suivant dans ce répertoire, et continue jusqu'à ce qu'elle ait créé tous les répertoires. Elle renvoie true si elle réussit.

Elle pourrait être améliorée en fournissant un niveau d'arrêt de sorte qu'elle échoue si elle dépasse le dossier de l'utilisateur ou quelque chose du genre et en incluant les permissions.

Commentaires (3)

Que diriez-vous d'une fonction d'aide comme celle-ci :

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

Elle retournera true si le répertoire a été créé avec succès ou s'il existe déjà, et false si le répertoire n'a pas pu être créé.

Une alternative meilleure est la suivante (qui ne devrait pas donner d'avertissement) :

function makeDir($path)
{
     return is_dir($path) || mkdir($path);
}
Commentaires (5)