wake-up-neo.net

erlaubnis verweigert - PHP-Unlink

Ich habe zwei Dateien: B.php und test.txt

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

und der Fehler ist: Warnung: unlink (test.txt) [function.unlink]: Berechtigung verweigert

warum? b.php und test.txt sind 777 und dieselbe Gruppe/Anmeldung

wenn ich 777 im übergeordneten Verzeichnis setze, kann ich unlink ausführen, aber ich muss 777 und zurück auf 755 setzen. 

24
eugui

Sie (wie bei b.php, entweder über CLI oder einen Webserver) benötigen Schreibzugriff auf das Verzeichnis, in dem sich die Dateien befinden. Sie aktualisieren den Verzeichnisinhalt, sodass der Zugriff auf die Datei nicht ausreicht.

Wenn Sie die Funktion PHP chmod() verwenden, um den Modus einer Datei oder eines Ordners auf 777 zu setzen, sollten Sie 0777 verwenden, um sicherzustellen, dass die Zahl korrekt als Oktalzahl interpretiert wird.

24
Arjan

Sie müssen zuerst die Datei mit fclose($handle); schließen, da sie nicht gelöscht wird, da die Datei verwendet wird. Schließen Sie also zuerst die Datei und versuchen Sie es dann.

18
Ashwin Pathak

zusätzlich zu allen Antworten, die andere Freunde haben, wenn jemand, der diesen Beitrag sucht, nach einem Weg sucht, einen "Ordner" und nicht eine "Datei" zu löschen, sollte er darauf achten, dass Ordner von php gelöscht werden rmdir () function und wenn Sie einen "Ordner" von unlink() löschen möchten, wird eine falsche Warnmeldung angezeigt, die besagt, dass die Berechtigung verweigert wurde.

sie können jedoch Ordner und Dateien mit mkdir() erstellen, aber die Art und Weise, wie Sie Ordner (rmdir()) löschen, unterscheidet sich von der Art und Weise, wie Sie Dateien löschen (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."; } 

Versuche dies. Ich hoffe es hilft.

3
Ardi

Die Dateiberechtigung ist in Ordnung (0777), aber ich denke, dass Sie sich auf dem gemeinsam genutzten Server befinden, um Ihre Datei korrekt zu löschen;. Erstellen Sie einen korrekten Pfad zu Ihrer Datei

// 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

Dieser kleine Code bewirkt, dass alle gewünschten Dateien aus einem beliebigen Ordner entfernt werden, sofern der tatsächliche Dateipfad gesammelt wird. 

0
dean