web-dev-qa-db-fra.com

permission refusée - php unlink

J'ai deux fichiers: B.php et test.txt

<?php 
$b = "test.txt";
unlink($b);
?>

et l'erreur est la suivante: avertissement: unlink (test.txt) [function.unlink]: autorisation refusée

pourquoi? b.php et test.txt sont 777 et le même groupe/login

si je mets 777 sur le répertoire parent, je peux exécuter unlink mais je dois mettre 777 et revenir à 755? 

24
eugui

Vous (comme dans le processus qui exécute b.php, vous avez besoin de CLI ou d’un serveur Web) avez besoin d’un accès en écriture au répertoire dans lequel se trouvent les fichiers. Vous mettez à jour le contenu du répertoire, l'accès au fichier n'est donc pas suffisant.

Notez que si vous utilisez la fonction PHP chmod() pour définir le mode d’un fichier ou d’un dossier sur 777, vous devez utiliser 0777 pour vous assurer que le numéro est interprété correctement comme un nombre octal.

24
Arjan

Vous devrez d’abord fermer le fichier à l’aide de fclose($handle);. Il ne supprime pas car le fichier est en cours d’utilisation. Alors, fermez d'abord le fichier puis essayez.

18
Ashwin Pathak

en plus de toutes les réponses des autres amis, si quelqu'un qui regarde ce post cherche un moyen de supprimer un "dossier" et non un "fichier", veillez à ce que les dossiers soient supprimés par php Fonction rmdir () et si vous voulez supprimer un "dossier" de unlink(), vous rencontrerez un message d'avertissement erroné indiquant "permission refusée"

cependant, vous pouvez créer des dossiers et des fichiers avec mkdir(), mais la manière dont vous supprimez les dossiers (rmdir()) est différente de la façon dont vous supprimez les fichiers (unlink()).

7
// Path relative to where the php file is or absolute server path
chdir($FilePath); // Comment this out if you are on the same folder
chown($FileName,465); //Insert an Invalid UserId to set to Nobody Owner; for instance 465
$do = unlink($FileName);

if($do=="1"){ 
    echo "The file was deleted successfully."; 
} else { echo "There was an error trying to delete the file."; } 

Essaye ça. J'espère que ça aide.

3
Ardi

La permission de fichier est correcte (0777) mais je pense que votre sur le serveur partagé, donc pour supprimer votre fichier correctement utilisez; créer un chemin correct vers votre fichier

// delete from folder
$filename = 'test.txt';
$ifile = '/newy/made/link/uploads/'. $filename; // this is the actual path to the file you want to delete.
unlink($_SERVER['DOCUMENT_ROOT'] .$ifile); // use server document root
// your file will be removed from the folder

Ce petit code fera la magie et supprimera tout fichier sélectionné de n'importe quel dossier à condition que le chemin du fichier soit collecté. 

0
dean