Pourquoi ai-je la permission refusée & # 8220; & # 8221; en PHP lors de la tentative de renommer un répertoire?

StackOverflow https://stackoverflow.com/questions/196114

  •  10-07-2019
  •  | 
  •  

Question

J'ai chmodé le répertoire à 777, comme avec le contenu du répertoire. Néanmoins, je reçois une autorisation "autorisation refusée". Erreur. PHP génère-t-il cette erreur si Apache n’est pas le groupe / propriétaire, quelles que soient les autorisations du fichier? Voici l'appel qui échoue:

rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
Était-ce utile?

La solution

Vous éditez le répertoire de niveau supérieur, l'utilisateur PHP doit donc avoir un accès en écriture à ce répertoire.

Autres conseils

C'est probablement parce qu'apache n'est pas le propriétaire du répertoire parent. Renommer (ou déplacer) un fichier revient en gros à créer un nouveau fichier.

pour clarifier, php ne peut renommer que les répertoires dont il est le propriétaire:

-rwxrwxrwx user   user   temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user   user   script.php

supposons que script.php tente de renommer ces deux répertoires:

// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions    
rename('temp', 'temp.bak');

// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak'); 

Essayez d'exécuter le script suivant:

print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));

Et voyez ce qui revient.

Une autre chose qui pourrait aider ce genre de situation est d’essayer de réduire les autorisations. J'ai vu des occasions où Apache refuse à une application l'autorisation de faire quelque chose parce que ses autorisations sont définies trop élevé . J'imagine que c'est pour encourager de bonnes pratiques de sécurité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top