Tout d'abord, quelle est la valeur réelle de $username
? Avez-vous vérifié que ce n'est pas vide? Traiter le système de fichiers comme ceci peut entraîner plusieurs problèmes différents. J'aime mettre beaucoup de contrôles supplémentaires, donc si quelque chose échoue, j'ai plus de facilité à savoir pourquoi. J'aime aussi traiter les noms de répertoire absolus lorsque c'est possible, donc je ne rencontre pas de problèmes avec les chemins relatifs.
$filesDir = '/path/to/files';
if (!file_exists($filesDir) || !is_dir($filesDir)) {
throw new Exception("Files directory $filesDir does not exist or is not a directory");
} else if (!is_writable($filesDir)) {
throw new Exception("Files directory $filesDir is not writable");
}
if (empty($username)) {
throw new Exception("Username is empty!");
}
$userDir = $filesDir . '/' . $username;
if (file_exists($userDir)) {
// $userDir should be all ready to go; nothing to do.
// You could put in checks here to make sure it's
// really a directory and it's writable, though.
} else if (!mkdir($userDir)) {
throw new Exception("Creating user dir $userDir failed for unknown reasons.");
}
mkdir()
a quelques options vraiment utiles pour définir des autorisations et de faire des dossiers multiples niveaux de profondeur. Découvrez PHP's mkdir page si vous ne l'avez pas encore. Par mesure de sécurité, assurez-vous que vos exceptions ne révèlent pas les chemins d'accès système à l'utilisateur final. Vous souhaiterez peut-être supprimer les chemins d'accès aux dossiers de vos messages d'erreur lorsque votre code va sur un serveur public. Ou configurez les choses pour que vos exceptions soient enregistrées mais pas affichées sur la page Web.
peut-être le dossier existe déjà, vous voulez vérifier cela en premier? – Ibu
ce n'est pas! Ive essayé avec diff noms d'utilisateur, et chaque fois qu'il n'existe pas – Primm
On dirait que vous devriez ajouter une vérification autour du mkdir si le répertoire existe, ou peut-être supprimer les erreurs/avertissements – ernie