【问题标题】:permission denied - php unlink权限被拒绝 - php取消链接
【发布时间】:2012-11-15 16:53:08
【问题描述】:

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

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

错误是:Warning: unlink(test.txt) [function.unlink]: Permission denied

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

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

【问题讨论】:

  • 他们在同一个目录吗?
  • 可能是您需要对它们所在目录的写入权限才能运行 php 代码的进程。
  • 这是网站的一部分吗?如果是这样,您需要确保网络服务器的进程对目录和/或文件具有权限。
  • 检查父目录的权限。尝试在父目录上设置 777 看看是否有任何改变
  • 如果我在父目录上设置 777 那么我可以执行 unlink 但我必须设置 777 并返回到 755?

标签: php permissions unlink


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    最终成为事实:

    在许多编程语言中,任何与权限相关的错误都可能不会 直接表示实际的权限问题

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

    【讨论】:

      【解决方案4】:
      // 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."; } 
      

      试试这个。希望对您有所帮助。

      【讨论】:

      • chown() [function.chown]:不允许操作
      • 这可能是因为您无权更改文件的所有权。您可以尝试更改文件的权限以查看它是否更改? (例如 chmod("test.txt", 0666)。您可以尝试在 666 上取消链接以查看会发生什么情况。无论如何可以看到拥有该文件的用户吗?
      【解决方案5】:

      文件权限没问题(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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-23
        • 2011-08-07
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多