J’ai rencontré quelques cas d’installation de WordPress avec Bluehost où j’ai rencontré des erreurs avec mon thème WordPress parce que le dossier de téléchargement wp-content/uploads
n’é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.
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.
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.
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);
}