Php 从文件夹中删除图像
当用户单击“删除”时,我正在尝试删除图像Php 从文件夹中删除图像,php,Php,当用户单击“删除”时,我正在尝试删除图像 if (isset($_GET['sid'])) { $sid = $_GET['sid']; } $getImageName = "SELECT * FROM header_image_arabic WHERE id='" . $sid . "'"; $QgetImageName = $db->query($getImageName) or die($db->error); if ($Fname = $QgetImageName
if (isset($_GET['sid'])) {
$sid = $_GET['sid'];
}
$getImageName = "SELECT * FROM header_image_arabic WHERE id='" . $sid . "'";
$QgetImageName = $db->query($getImageName) or die($db->error);
if ($Fname = $QgetImageName->fetch_object())
$myImageName = $Fname->image;
// delete image from dir function
$dir = "../images/backSlider_arabic/";
opendir($dir);
if (dir($dir)) {
$filename = $myImageName;
if (file_exists($filename)) {
unlink("../images/backSlider_arabic/" . $filename);
echo 'File' . $filename . 'has been deleted';
} else {
echo 'Could not delete ' . $filename . ',file does not exist';
echo "<br />" . dirname("../images/backSlider_arabic/") . ".<br />";
}
} else {
echo "Dir not there";
}
closedir();
if(isset($\u GET['sid'])){
$sid=$_GET['sid'];
}
$getImageName=“从标题_image_阿拉伯语中选择*,其中id=”$希德。"'";
$QgetImageName=$db->query($getImageName)或die($db->error);
如果($Fname=$QgetImageName->fetch_object())
$myImageName=$Fname->image;
//从dir函数中删除图像
$dir=“../images/backSlider_阿拉伯语/”;
opendir($dir);
if(dir($dir)){
$filename=$myImageName;
如果(文件_存在($filename)){
取消链接(“../images/backSlider\u arabic/”$filename);
回显“文件”。$filename。“已被删除”;
}否则{
echo“无法删除“.$filename.”,文件不存在”;
echo“
”.dirname(../images/backSlider_阿拉伯语/”)。
;
}
}否则{
回声“Dir不在那里”;
}
closedir();
每次我点击“删除”按钮时,都会出现“无法删除myfile.jpg,文件不存在”
编辑更安全的mySql
if(isset($_GET['sid'])){
$sid=$_GET['sid'];
}
$getName = $db->prepare("SELECT * FROM header_image_arabic WHERE id=?");
$getName->bind_param('s', $sid);
$getName->execute();
$result = $getName->get_result();
if($Fname=$result->fetch_object())
$myImageName=$Fname->image;
//delete image from dir function
$dir="../images/backSlider_arabic/";
opendir($dir);
if(dir($dir)){
$filename=$myImageName;
if(file_exists("../images/backSlider_arabic/".$filename)) {
unlink("../images/backSlider_arabic/".$filename);
echo'File'.$filename.'has been deleted';
}else{
echo 'Could not delete '.$filename.',file does not exist';
echo "<br />".dirname("../images/backSlider_arabic/").".<br />";
}
}else{echo"Dir not there";}
closedir();
if(isset($\u GET['sid'])){
$sid=$_GET['sid'];
}
$getName=$db->prepare(“从标题_image_阿拉伯语中选择*,其中id=?”;
$getName->bind_参数('s',$sid);
$getName->execute();
$result=$getName->get_result();
如果($Fname=$result->fetch_object())
$myImageName=$Fname->image;
//从dir函数中删除图像
$dir=“../images/backSlider_阿拉伯语/”;
opendir($dir);
if(dir($dir)){
$filename=$myImageName;
如果(文件存在(“../images/backSlider\u阿拉伯语/”$filename)){
取消链接(“../images/backSlider\u arabic/”$filename);
echo'File'.$filename'已被删除';
}否则{
echo“无法删除“.$filename.”,文件不存在”;
echo“
”.dirname(../images/backSlider_阿拉伯语/”)。
;
}
}否则{echo“Dir不在那里”;}
closedir();
我已经更新了我的代码,因为mySql查询的安全性非常差,我使用了准备好的语句来提高安全性。首先,您确实需要正确地检查和转义变量!你的剧本真是糟透了 但是,如果是为了学习,关于您的问题,可能存在以下错误:
if(file_exists($filename)) {
应该是哪一个
if (file_exists("../images/backSlider_arabic/".$filename)) {
但是,请调整并修复您的脚本,这样的人都可以删除任何他们喜欢的内容。我希望您检查比isset($\u GET['sid'))更多的内容。 出于调试目的,在尝试删除路径/映像之前,请使用echo或var_dump显示路径/映像
并检查您的服务器是否具有正确的权限(读/写)非常糟糕的方法!任何人都可以删除你的所有文件。问题是什么?它告诉你什么是错误的,给定的路径是无效的。我怎样才能用更好的方法来做呢?你的代码容易受到SQL注入的攻击;你应该继续读下去。@gpgekko,但我相信这条路是对的,我也想到了。。。但后来我看到了
opendir($dir)代码>以前导航到文件夹时是否需要完整路径?我不这么认为,但这更像是一个教育性的答案。我想说他应该检查并删除同一个文件。在他的脚本中,他检查一个文件,然后删除另一个文件。也就是说,如果他确实不需要文件_exists()中的路径,那么unlink()文件路径是错误的。反之亦然,如果他需要文件_exists()的路径,则该路径是错误的。这就是为什么我要指出,他应该检查并删除同一个文件。@kasipovic:你说得完全对,另外一个如果(!isset())没有意义,因为他随后继续执行