当前位置: 首页 > 知识库问答 >
问题:

从PHP服务器删除文件-权限被拒绝取消链接

越景天
2023-03-14

我想从本地服务器上删除beaglebone上运行的文件。

我已经创建了一个显示所有文件的页面,并允许您选择要删除的文件。(如下所示)

该网页以数组的形式将要删除的文件名返回给php脚本unlink。php

Unlink.php的代码是:

<?php

$files = $_POST['file'];

print_r($files);

if (empty($files)) {
    echo "No files were selected. Go back to 192.168.7.2 and refresh the page." ;
} else {
    $N = count($files);
    for ($i = 0; $i < $N; $i++) {
        $path = '/Logs/';
        print_r($path);
        #chown($path, 666);
        if (unlink($path . $_GET['$files[$i]'])) {
            echo ": Deleted";
        } else {
            echo "fail";
        }
    }
}
?>

但是,每当我尝试删除一个文件时:它都会失败。

解除关联()PHP函数没有正确实现,我不知道为什么。我该怎么做才是正确的?

索引。html页面位于/var/www/html中,日志位于/var/www/html/logs/中。本地服务器的地址是192.168。7.2

表格代码:

<?php

$url = $_SERVER['DOCUMENT_ROOT'];
$path = "/var/www/html/Logs";
$dh = opendir($path);
$k = 0;
$foo = True;

while (($file = readdir($dh)) !== false) {
    
    if ($file != "." && $file != "..") {
        
        if ($k == 0 || $k % 6 == 0) {
            $col .= "<tr><td><input type='checkbox' name='file[]' value='$file'>  <a href='Logs/$file'>$file</a><br /></td>";
        } else if ($k % 6 == 5) {
            $col .= "<td><input type='checkbox' name='file[]' value='$file'>  <a href='Logs/$file'>$file</a><br /></td></tr>";
        } else {
            $col .= "<td><input type='checkbox' name='file[]' value='$file'>  <a href='Logs/$file'>$file</a><br /></td>";
        }

        $k++;
    }
}
echo "<form action='unlink.php' method='post'><table>$col</table><br/><center><input type='submit' name='formSubmit' value='Delete' /></center></form>";

closedir($dh);
?> 

编辑:PHP显示错误

警告:chmod():不允许在/var/www/html/unlink中进行操作。第17行的phpchmod($path.$files[$i],0755)

警告:解除关联(/var/www/html/Logs/2017.01.24--13.43.43--0.log):第18行 /var/www/html/unlink.php拒绝权限失败if(解除关联($path.$file[$i])

但是当我检查ls-la的/log时-


共有2个答案

别永年
2023-03-14
  1. 确保您试图传递给unlink()/delete的文件未被打开。如果文件是。exe或etc请同时签入Windows任务管理器-

确定文件未打开1后,让我们尝试以下代码:

// Check existence of file
if (file_exists($cekFile1)) {
    // make sure you have permission to delete file
    if(chmod($fileDir, 0777)){
        if(!unlink($cekFile1)){
            echo "unlink is fail !";
        }
    }else{
        echo "chmod is fail";
    }
    // owner have read, write, execute rights.
    // owner's user group only have read rights.
    // everybody else only have read rights.
    chmod($fileDir, 0744);

}

有关chmod()的更多信息,请查看此参考:

php。网

php cmod函数。

毋宸
2023-03-14
<?php

$files = $_POST['file'];
$path = "/var/www/html/Logs/";
print_r($files);

if (empty($files)) {
    echo "No files were selected. Go back to 192.168.7.2 and refresh the page." ;
} else {
    foreach ($files as $file) {
        if (unlink($path . $file)) {
            echo $path. $file ." : Deleted";
        } else {
            echo $path. $file . " : fail";
        }
    }
}
?>

这应该可以做到,$path是错误的,即使您使用了与其他代码相同的代码,它也缺少斜杠。尽管如此,这段代码不会阻止恶意用户操作。如何避免PHP中的UNLINK安全风险?

从您更新的问题中,我可以看到日志文件夹是指向/media/card/Logs的符号链接。ls-la/media/card的输出是什么?

有些进一步案文如下:

  • https://en.wikipedia.org/wiki/Symbolic_link
  • http://php.net/manual/en/control-structures.foreach.php

 类似资料:
  • 问题内容: 我有两个文件:b.php和test.txt 错误是:警告:unlink(test.txt)[function.unlink]:权限被拒绝 为什么?b.php和test.txt是777,并且相同的组/登录名 如果我在父目录上设置了777,则可以执行取消链接,但必须将777设置回755? 问题答案: 您(在运行过程中,无论您是通过网络服务器还是通过网络服务器)都需要对文件所在目录的写权限。

  • 问题内容: 我无法使用带有command的react.js启动我的项目。得到错误: npm 5.0.3。节点8.1.4。纱线0.24.5 macOS Sierra 10.12.4 当我再次启动命令时,它将安装软件包,但是在命令后,它将显示以下内容: 我试图通过添加Sharp ,但收到相同的错误。EACCES:权限被拒绝 问题答案: 首先,您需要通过运行以下命令来检查权限: 我收到了下一个答复: 比

  • 问题内容: max@serv$ whoami max max@serv$ ls -la ./defines.php -rwxrwxrwx 1 max max 1985 2011-11-16 02:01 ./defines.php max@serv$ chmod 0777 ./defines.php max@serv$ rm ./defines.php rm: cannot remove `./de

  • 我尝试在3台机器上作为集群运行kafka,我已经在所有机器上配置了Zookeeper。现在我尝试在第一台机器上启动kafka服务器,使用 它给出的错误是 kafka安装在路径 /tmp/kafka/kafka_2.11-1.1.0/中,kafka日志在路径 /var/lib/kafka中。我已经以root用户身份登录。但我仍然收到这些错误。我检查了kafka目录bin中. sh文件的权限。所有这些

  • 这是我面临这个问题的一天。我不知道这是因为托管服务器还是我在joomla中的配置。 我正在尝试使用Akeba备份将我的joomla网站上传到ftp。首先,我上传了kickstart。php和Akeba文件的网站,它是成功的。 现在,我做了安装使用akeeba和最后一部分,它显示了一个模式,显示一个按钮"查看您的网站前端"。而不是去网站前端它下载一个index.php文件...我输入http://m

  • 我可以添加“shell命令安装'code'命令”。测试它是有效的,但是如果我关闭VS Code,或者在添加命令几个小时后,它就不起作用了。终端显示“zsh:命令未找到:代码”,在VS上,当点击“shell命令安装代码命令”时,会弹出“EACCES:权限被拒绝,解除关联'usr/本地/bin/代码'”。我该怎么做呢?如果这很重要,我用的是macbook 2020