查找php中的目录中是否存在文件

时间:2014-10-27 18:47:35

标签: php html image

我已经筋疲力尽了我的大脑,似乎无法构建我的代码,我已经有效的解决方案,但我需要简化它。好吧,我有$ id = $ _GET [“id”];那个$ id = 352 ......现在,

方案

以下代码是用户选择要上传的图片的地方:

$query = mysql_query("SELECT * FROM properties WHERE id = '$_GET[id]'");

<input type="file" name="image1" id="image1" />

<?php if(isset($query) && file_exists("../uploads/properties/".mysql_result($query, 0, "id").".jpg")) { ?>

<img height="100" src="../uploads/properties/<?php echo mysql_result($query, 0, "id"); ?>.jpg" />

<a target="_blank" href="delete_script/deletepic.php?id=<?php echo mysql_result($query, 0, "id"); ?>">Delete image</a>

<?php } ?>

<input type="file" name="image2" id="image2" />

<?php if(isset($query) && file_exists("../uploads/properties/".mysql_result($query, 0, "id")."_2.jpg")) { ?>

<img height="100" src="../uploads/properties/<?php echo mysql_result($query, 0, "id"); ?>_2.jpg" />

<a target="_blank" href="delete_script/deletepic2.php?id=<?php echo mysql_result($query, 0, "id"); ?>">Delete image</a>

<?php } ?>

如果你看一下src标签上的 img ,两者之间的区别就是一张图片会上传为 352.jpg 而另一个将保存为 352_2.jpg 。我有10张用户可以上传的图像,因此图像将保存为:

1:352.jpg

2:352_2.jpg

3:352_3.jpg

4:352_4.jpg

5:352_5.jpg

6:352_6.jpg

7:352_7.jpg

8:352_8.jpg

9:352_9.jpg

10:352_10.jpg

现在是棘手的部分:

点击链接时,此页面deletepic.php将使用以下代码运行:

<?php
$id = $_GET["id"];
$file_path = "../uploads/properties/".$id."_".$i.".jpg";
for ($i = 2; $i < 11; $i++) { 
    $file_path = "../uploads/properties/".$id."_".$i.".jpg";
    return $file_path;
}
if (file_exists($file_path)) {
    echo "file remove requested";
}else{
    echo "no file was requested to be removed";
}
?>

我知道for循环不起作用,但基本上我需要脚本来查看$id."_".$i 然后,如果文件存在于单击的链接上,则必须删除该文件。

目前正在为我工​​作的解决方案是,如果我制作10个delete.php脚本并在每个脚本中运行此代码块,我将在脚本中更改以使其工作的唯一部分是{{ 1}}每次设置为$img下一个delete.php,$img = "../../uploads/properties/".$id.".jpg";的值将为$img等。

所以在 delete.php 内部代码看起来像这样:

$img = "../../uploads/properties/".$id."_2.jpg";

2 个答案:

答案 0 :(得分:0)

您的第一个代码示例存在一些问题,例如SQL注入。请注意,不推荐使用mysql_ *函数;你应该看一下使用PDO。但这不是问题所以......你的delete.php脚本应该是这样的:

<?php

$id = $_GET['id'];
$imageFolder = realpath('../../uploads/properties');

$imagePath = $imageFolder . '/' . $id . '.jpg';

if (file_exists($imagePath) && dirname(realpath($imagePath)) == $imageFolder) {
    unlink($imagePath);
    echo "file remove requested";
} else {
    echo "no file was requested to be removed";
}

答案 1 :(得分:0)

我找到了解决问题的方法,所以基本上删除循环并将(_2.jpg)的扩展名添加到deletepic2.php <a>标记链接中,如下所示:

<强> HTML

修复前的代码:

<a target="_blank" href="delete_script/deletepic2.php?id=<?php echo mysql_result($query, 0, "id"); ?>">Delete image</a>

修复后的代码:

<a target="_blank" href="delete_script/deletepic2.php?id=<?php echo mysql_result($query, 0, "id"); ?>_2.jpg">Delete image</a>

deletepic2.php 文件中,代码将执行如下:

<?php
    $id = $_GET["id"];
    $url = $_SERVER['REQUEST_URI'];
    $cleanLink = "delete_img.php";
    $url = str_replace($cleanLink, "properties_page.php", $url);
    $img = "../uploads/properties/".$id;
    unlink($img);
    header("Location:$url");
?>

所以从本质上来说无论我在目录中有多少文件,只需将_(任意数字可以在这里).jpg的唯一字符串值添加到html文件中的链接我能够运行php脚本并定位我希望用户在用户单击要删除的特定文件的链接时删除的特定文件。

@rjdown感谢您的帮助,我很感激。 (两个竖起大拇指)