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

时间:2017-02-07 15:53:17

标签: php html server unlink

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

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

enter image description here

网页以数组的形式将要删除的文件名称返回给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";
        }
    }
}
?>

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

unlink()php函数没有正确实现,我不知道为什么。 我该怎么做正确的方法?

index.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():第17行的/var/www/html/unlink.php中不允许进行操作  chmod($path . $files[$i], 0755);

警告:取消链接(/var/www/html/Logs/2017.01.24--13.43.43--0.log):第18行/var/www/html/unlink.php中的权限被拒绝  if (unlink($path . $files[$i]))

但当我检查ls -la / Logs时 - >它显示为属于www-data。如何更改此权限?

权限: enter image description here

2 个答案:

答案 0 :(得分:0)

<?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是错误的,即使你使用了与其他代码相同的内容,它也缺少斜杠。 尽管如此,此代码不会阻止恶意用户操作。 How to avoid UNLINK security risks in PHP?

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

进一步阅读:

答案 1 :(得分:0)

  1. 确保您要传递给unlink() / delete的文件没有打开。如果文件是.exe等,请同时签入 Windows任务管理器->进程,然后将其杀死。
  2. 更改文件的权限状态。也许您无权删除该文件(执行权限)。

确定未打开文件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.net

php-cmod-function