31

我有两个文件:b.php 和 test.txt

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

错误是:警告:unlink(test.txt)[function.unlink]:权限被拒绝

为什么?b.php 和 test.txt 是 777 和相同的组/登录

如果我在父目录上设置 777 我可以执行 unlink 但我必须设置 777 并返回到 755?

4

5 回答 5

35

您(如在运行的进程中b.php,通过您CLI或网络服务器)需要对文件所在目录的写入权限。您正在更新目录内容,因此访问该文件是不够的。

请注意,如果您使用 PHPchmod()函数将文件或文件夹的模式设置为777您应该使用0777以确保该数字被正确解释为八进制数。

于 2012-11-27T23:26:26.910 回答
21

您首先需要关闭该文件fclose($handle);,因为该文件正在使用中,因此它不会被删除。所以先关闭文件再试试。

于 2014-04-24T04:24:09.887 回答
10

除了其他朋友的所有答案之外,如果正在查看此帖子的人正在寻找删除“文件夹”而不是“文件”的方法,则应注意文件夹必须通过php rmdir() 函数删除,如果你想删除一个“文件夹” unlink(),你会遇到一个错误的警告消息,上面写着“权限被拒绝”

但是您可以创建文件夹和文件,mkdir()但是rmdir()您删除文件夹的方式()与删除文件的方式()unlink()不同

最终成为事实:

在许多编程语言中,任何与权限相关的错误可能并不直接意味着实际的权限问题

例如,如果你想要readSync一个不存在的文件,node fs module你会遇到一个错误的EPERM错误

于 2018-03-07T11:04:54.363 回答
2
// 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."; } 

试试这个。希望能帮助到你。

于 2012-11-27T23:33:24.073 回答
1

文件权限没问题(0777),但我认为你在共享服务器上,所以要正确删除你的文件;1.创建文件的正确路径

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

如果收集了实际文件路径,那么该小代码将发挥作用并从任何文件夹中删除您想要的任何选定文件。

于 2017-06-02T15:02:32.283 回答