【问题标题】:PHP permission Denied using unlink and rmdir使用 unlink 和 rmdir 拒绝 PHP 权限
【发布时间】:2023-05-10 05:09:02
【问题描述】:

我一直在试图弄清楚为什么我的 PHP 代码给了我一个恼人的错误。我已经尝试了上一篇文章中的无数功能,但它给出的错误是“权限被拒绝”。据我了解,要么我必须有特殊的权限才能删除文件等。我尝试了多种解决方案,但仍然出现此错误。如果有人能指出我正确的方向,那就太好了。我在下面发布了我的代码的 sn-p.. 谢谢

      $first_sub = "my_dir";        
        if(is_dir($first_sub)){
            $read_sub1 = opendir($first_sub);
            while(false !== ($files = readdir($read_sub1))){
                if($files!="." && $files!=".."){
                    unlink($first_sub ."/". $files);
                }
            }
            closedir($read_sub1);

【问题讨论】:

  • 什么函数给你permission denied具体?只有一个或所有与文件相关的函数?
  • 是通过命令行执行php还是通过加载网页来实现的?
  • @GiamPy 我目前已经尝试过 unlink(),而 rmdir dosent 确实为我提供了我需要的功能。 rmdir 给我一个错误,告诉我它不能删除文件,因为 dir 不是空的,这是有道理的。
  • @Grzegorz 它发生在我加载网页时。

标签: php unlink opendir rmdir


【解决方案1】:

对于那些登陆此页面的人来说,这可能就像不将$files 设置为现有文件一样简单。

很不幸,但我发现消息:Warning: move_uploaded_file(): Unable to move 也可以表示file not found

这不太可能是这个 OP 问题的原因,但肯定值得验证您传递的变量所代表的文件是否确实存在于目录中。

【讨论】:

    【解决方案2】:

    我收到取消链接权限被拒绝的错误。 但我修好了。错误显示如下 unlink(../foldername/) Permission denied。

    我的错误代码是这样的:

    $image = select_table('webpage', 'wp_name', '$id');
    $update = "UPDATE webpage SET wp_image = NULL, wp_modifiedby = '{$position}', wp_datemodified = '{$date_now}' WHERE wp_name = '{$id}'";
    
        if ( unlink('../webpage/'.$image_dir) && $qry_update = mysqli_query($connection, $update) ) {
            // success
        } else {
            // failed
        }
    

    现在我修复它 我正确的代码是这样的:

    $image = select_table('webpage', 'wp_name', $id);
    
        $update = "UPDATE webpage SET wp_image = NULL, wp_modifiedby = '{$position}', wp_datemodified = '{$date_now}' WHERE wp_name = '{$id}'";
    
        if ( unlink('../webpage/'.$image['wp_image']) && $qry_update = mysqli_query($connection, $update) ) {
            // success
    
        } else {
            // failed
    
        }
    

    【讨论】:

      【解决方案3】:

      您应该为您的服务器目录设置适当的权限: 访问:http://bd1.php.net/chmod

      <?php
      // Read and write for owner, nothing for everybody else
      chmod($first_sub ."/". $files, 0600);
      
      // Read and write for owner, read for everybody else
      chmod($first_sub ."/". $files, 0644);
      
      // Everything for owner, read and execute for others
      chmod($first_sub ."/". $files, 0755);
      
      // Everything for owner, read and execute for owner's group
      chmod($first_sub ."/". $files, 0750);
      ?>
      

      就在unlink之前你可以调用这个函数。

      【讨论】:

      • @Reza Mamun.. 谢谢,但错误仍然存​​在,
      • 其实我很抱歉它确实有效,我为所有者选择了错误的模式......谢谢