我有两个文件: b.php 和 test.txt
<?php
$b = "test.txt";
unlink($b);
?>
错误是:警告:unlink(test.txt)[function.unlink]:权限被拒绝
为什么? b.php 和 test.txt 是 777 并且相同的组/登录
如果我在父目录上设置 777,我可以执行取消链接,但我必须设置 777 并返回到 755?
您(如在运行
b.php
的进程中,通过 CLI
或网络服务器)需要对文件所在目录的写访问权限。您正在更新目录内容,因此访问该文件是不够的。
请注意,如果您使用 PHP
chmod()
函数将文件或文件夹的模式设置为 777
,您应该使用 0777
来确保该数字被正确解释为八进制数。
您首先需要使用
fclose($handle);
关闭文件,它不会删除,因为文件正在使用中。所以先关闭文件然后再尝试。
除了其他朋友的所有答案之外,如果正在寻找这篇文章的人正在寻找删除“文件夹”而不是“文件”的方法,应该注意文件夹必须通过php rmdir( ) 函数,如果您想通过
unlink()
删除“文件夹”,您将遇到错误的警告消息,显示“权限被拒绝”
但是您可以通过
mkdir()
创建文件夹和文件,但是删除文件夹(rmdir()
)的方式与删除文件的方式不同(unlink()
)
最终成为事实:
在许多编程语言中,任何与权限相关的错误可能不会 直接意味着实际的权限问题
例如,如果您想要
readSync
一个不存在的文件 node fs module
,您将遇到错误的 EPERM
错误
// 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."; }
试试这个。希望有帮助。
文件权限没问题(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
这段小代码将发挥神奇作用,并从任何文件夹中删除您想要的任何选定文件,前提是实际文件路径是收集的。
在 Windows 和 PHP 7.3.0 版本之前,请在取消链接之前检查您的文件是否已关闭,
正如https://www.php.net/manual/en/function.unlink.php中所述:
在 Windows 上,现在可以使用正在使用的句柄 unlink() 文件,而以前会失败。但是,在关闭该文件的所有句柄之前,仍然无法重新创建未链接的文件。
举个例子:
$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));
这是对其他答案的一个小补充。 如果您的取消链接仍然失败,则可能是该文件具有对其的打开引用。理想情况下,您想要调查您的代码,找到该引用并正确关闭它。但如果出于某种原因你不能这样做,你可以在取消链接之前使用
gc_collect_cycles()
,它应该可以工作。