eugui
eugui

Reputation: 471

permission denied - php unlink

I have two files: b.php and test.txt

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

and the error is: Warning: unlink(test.txt) [function.unlink]: Permission denied

why? b.php and test.txt is 777 and the same group/login

if I set 777 on the parent directory I can execute unlink but i have to set 777 and back to 755?

Upvotes: 34

Views: 129134

Answers (7)

Edson Horacio Junior
Edson Horacio Junior

Reputation: 3143

This is a small addition to the other answers. In case your unlink is still failing, it could be that file has an open reference to it. Ideally, you want to investigate your code, find that reference and close it properly. But if for any reason you can't do that, you can use gc_collect_cycles() before doing the unlink and it should work.

Upvotes: 0

lionelto
lionelto

Reputation: 101

In Windows and before PHP version 7.3.0, check that your file has been closed before unlinking it,
as said in https://www.php.net/manual/en/function.unlink.php :

On Windows, it is now possible to unlink() files with handles in use, while formerly that would fail. However, it is still not possible to re-create the unlinked file, until all handles to it have been closed.

As an exemple :

$fullFilePath = 'C:\Users\MyUserName\www\myApp\public\test.txt';
$handle = fopen($fullFilePath , 'w+');

fopen($filePath, 'w+');
fputs($handle, 'Some text in the file');
fclose($handle);

unlink(realpath($insertedLinesFilePath));

Upvotes: 0

in addition to all the answers that other friends have , if somebody who is looking this post is looking for a way to delete a "Folder" not a "file" , should take care that Folders must delete by php rmdir() function and if u want to delete a "Folder" by unlink() , u will encounter with a wrong Warning message that says "permission denied"

however u can make folders & files by mkdir() but the way u delete folders (rmdir()) is different from the way you delete files(unlink())

eventually as a fact:

in many programming languages, any permission related error may not directly means an actual permission issue

for example, if you want to readSync a file that doesn't exist with node fs module you will encounter a wrong EPERM error

Upvotes: 10

user7182340
user7182340

Reputation:

The file permission is okay (0777) but i think your on the shared server, so to delete your file correctly use; 1. create a correct path to your file

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

That small code will do the magic and remove any selected file you want from any folder provided the actual file path is collect.

Upvotes: 1

A P
A P

Reputation: 376

You'll first require to close the file using fclose($handle); it's not deleting because the file is in use. So first close the file and then try.

Upvotes: 20

Arjan
Arjan

Reputation: 9874

You (as in the process that runs b.php, either you through CLI or a webserver) need write access to the directory in which the files are located. You are updating the directory content, so access to the file is not enough.

Note that if you use the PHP chmod() function to set the mode of a file or folder to 777 you should use 0777 to make sure the number is correctly interpreted as an octal number.

Upvotes: 39

Ardi
Ardi

Reputation: 336

// 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."; } 

Try this. Hope it helps.

Upvotes: 2

Related Questions