我正在尝试从上传文件夹中删除文件,但代码无效。
它正在删除数据库中的行,但不删除文件夹中的文件。
<?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");
?>
答案 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对我帮助很大。
答案 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';
}
?>