文件不删除表单文件夹PHP

时间:2018-01-11 15:05:48

标签: php mysqli

我正在尝试从上传文件夹中删除文件,但代码无效。

它正在删除数据库中的行,但不删除文件夹中的文件。

<?php
    extract($_REQUEST);
    include_once('include/dbcon.php');
    $dell= $_GET['del'];
    $sql1=mysqli_query($conn, "SELECT * FROM notes WHERE notes_id='$dell'");
    $row1=mysqli_fetch_array($sql1);
    $delfile= $row1["file_path"];
    unlink("uploads/".$delfile);
    mysqli_query($conn, "DELETE FROM notes WHERE notes_id='$dell'");
    header("location: deshboard.php");
?>

3 个答案:

答案 0 :(得分:3)

我假设数据库中的行是此处uploads文件夹中的相对文件路径。使用取消链接people sometimes时,请使用realpath函数获取绝对路径名。

您的代码将如下所示:

unlink(realpath('uploads/' . $delfile));

此外,您的代码容易受SQL Injection攻击,请在查询中使用变量时考虑使用prepared statements

答案 1 :(得分:1)

uploads文件夹中的读写权限可能是问题所在。

要检查文件权限,您可以使用以下内容检查文件是否可写:

//Make sure to always get the full file path from $delfile
$delfile = /* path to the uploads folder */ . $row1["file_path"];
if (is_writable($delfile)) {
    print 'YES!!!: I am writeable';
} else {
    print 'NO!!!: File not writable, please fix me';
}

要检查文件是否可读,只需将is_writable()is_readable()

交换

在处理文件/文件夹及其权限时,学习如何使用chmod对我帮助很大。

PHP documentation for chmod

答案 2 :(得分:0)

首先检索文件的完整路径:

$delfile = dirname(__FILE__) . $row1["file_path"];

然后确保文件权限设置为0777:

chmod($delfile , 0777);

最终结果:

<?php
extract($_REQUEST);
include_once('include/dbcon.php');
$dell= $_GET['del'];
$sql1=mysqli_query($conn, "SELECT * FROM notes WHERE notes_id='$dell'");
$row1=mysqli_fetch_array($sql1);
$delfile = dirname(__FILE__) . $row1["file_path"];


if (is_file($delfile )) {

   chmod($delfile , 0777);

   if (unlink($delfile )) {
      //'File deleted';
      mysqli_query($conn, "DELETE FROM notes WHERE notes_id='$dell'");
      header("location: deshboard.php");
   } else {
      //'Cannot remove that file';
   }

} else {
  //'File does not exist';
}

?>