Position actuelle: Accueil> Derniers articles> Résoudre le problème d'autorisation de FTP_MKDIR n'a pas réussi à créer un répertoire

Résoudre le problème d'autorisation de FTP_MKDIR n'a pas réussi à créer un répertoire

gitbox 2025-05-31

Description du problème

Supposons que vous essayez de créer un répertoire en utilisant le code suivant:

<code> $ ftp_server = "ftp.gitbox.net"; $ ftp_user = "Votre_Username"; $ ftp_pass = "your_password";

$ Conn_id = ftp_connect ($ ftp_server);
$ login_result = ftp_login ($ Conn_id, $ ftp_user, $ ftp_pass);

if (ftp_mkdir ($ conn_id, "/ public_html / uploads / newdir")) {
Echo "La création du catalogue a réussi!";
} autre {
Écho "La création de catalogue a échoué.";
}

ftp_close ($ Conn_id);
</code>

Après l'exécution, la sortie est "la création de catalogue a échoué". Pour le moment, vous pouvez penser que vous ne savez pas s'il s'agit d'un problème de chemin, d'un problème de connexion ou autre chose.


Analyse de cause commune

1. Autorisations insuffisantes

La raison la plus courante pour laquelle les utilisateurs FTP n'ont pas d'autorisations d'écriture sur le répertoire cible. Par exemple, si un utilisateur FTP est limité à / public_html / uploads / et que vous essayez de créer un dossier dans son répertoire supérieur, cette opération échouera naturellement.

2. Le chemin cible n'a pas de répertoire intermédiaire

FTP ne crée pas automatiquement des répertoires intermédiaires. Si votre chemin est / public_html / uploads / newdir / test mais que newdir n'existe pas encore, l'exécution échouera.

3. Problèmes de méthode de mode passif et de connexion

Certains serveurs nécessitent l'activation du mode passif. S'il n'est pas activé, certaines opérations peuvent échouer en raison de l'établissement réussi du canal de transmission.

<code> // Activer le mode passif ftp_pasv ($ Conn_id, true); </code>

Solution

Méthode 1: Vérifiez et modifiez les autorisations des utilisateurs FTP

Connectez-vous à votre panneau de configuration d'hôte (comme CPanel) pour confirmer si l'utilisateur FTP a des autorisations d'écriture au répertoire cible. Sinon, il doit ajuster son répertoire domestique ou donner des autorisations plus élevées dans les paramètres du compte FTP.

Si vous utilisez un hôte virtuel, vous ne pourrez peut-être pas modifier les autorisations et vous devez contacter le fournisseur de services hôte pour le moment.


Méthode 2: Créez un répertoire étape par étape

Afin d'éviter les échecs en raison de la non-existence des répertoires intermédiaires, vous pouvez créer des répertoires étape par étape: boucle:

<code> Fonction ftp_mksubdirs ($ ftp_stream, $ base_dir, $ cible_dir) {$ dir = exploit ('/', $ cible_dir); $ path = $ base_dir; foreach ($ dir as $ dir) {if (! $ dir) continuer; $ path. = "/ $ dir"; if (! @ftp_chdir ($ ftp_stream, $ path)) {if (! @ftp_mkdir ($ ftp_stream, $ path)) {return false; }}} return true; }

$ ftp_server = "ftp.gitbox.net";
$ ftp_user = "Votre_Username";
$ ftp_pass = "your_password";

$ Conn_id = ftp_connect ($ ftp_server);
$ login_result = ftp_login ($ Conn_id, $ ftp_user, $ ftp_pass);
ftp_pasv ($ Conn_id, true);

$ base = "/ public_html";
$ cible = "uploads / newdir / test";

if (ftp_mksubdirs ($ Conn_id, $ base, $ cible)) {
écho "La structure du répertoire a été créée avec succès.";
} autre {
Écho "La création de catalogue a échoué, veuillez vérifier les autorisations.";
}

ftp_close ($ Conn_id);
</code>

Cette approche garantit que la structure du répertoire requise est créée de manière récursive sur FTP distant.


Méthode 3: Utilisez FTP_CHDIR pour les tests d'autorisation

Vous pouvez essayer ftp_chdir () pour entrer le répertoire cible avant de créer le répertoire. S'il échoue, il se peut que les autorisations puissent être insuffisantes ou que le chemin est mauvais:

<code> if (@ftp_chdir ($ Conn_id, "/ public_html / uploads")) {echo "Le répertoire est accessible."; } else {echo "L'accès du répertoire a échoué, il peut s'agir d'un problème d'autorisation."; } </code>

Cette étape aide à déterminer rapidement si vous avez la permission de saisir le répertoire.