1

我在删除上传的图像时遇到问题。

它插入数据库并上传就好了,但不会删除。

示例:我有两个表,modelImagesModel。在模型中我保存了一个主图像的路径,但在模型图像中可能有很多。这些表通过modelID链接。

这是路径的示例:img/1/1/someImageName.png

(第一个 1 - makerID,第二个 1 - modelID)。

include('connect.php'); //connect to database
$modelID=$_GET['modelID'];
$makerID=$_GET['makerID'];
$path="img/".$makerID."/".$modelID."/";

if ($stmt = $mysqli->prepare("SELECT images FROM modelImages WHERE modelID='$modelID'")) {

    $stmt->execute();    
    $stmt->bind_result($images);

    while ($stmt->fetch()) {
        if($images!=$path){
            unlink($images);
        }
    }

    $stmt->close();

}
else {
    printf("Prepared Statement Error: %s\n", $mysqli->error);
}

if ($stmt = $mysqli->prepare("SELECT mainImage FROM model WHERE makerID='$makerID' AND modelID='$modelID'")) {    

    $stmt->execute();
    $stmt->bind_result($mainImage);

    while ($stmt->fetch()) {
        if($mainImage!=$path){
            unlink($mainImage);
        }
    }

    $stmt->close();

}
else {
    printf("Prepared Statement Error: %s\n", $mysqli->error);
}

当我只使用第一个代码时,它会从modelImages表中删除所有图像,如果我只使用第二个代码,它会从模型表中删除一个图像。

但是如果我一起使用它们,我会得到unlink()错误:

Warning: unlink(img/1/1/image1.png) [function.unlink]: No such file or directory in /home/...
Warning: unlink(img/1/1/image2.png) [function.unlink]: No such file or directory in /home/...
Warning: unlink(img/1/1/image3.png) [function.unlink]: No such file or directory in /home/...
Warning: unlink(img/1/1/image4.png) [function.unlink]: No such file or directory in /home/...

结论:如果我同时使用这两个查询,则取消链接将不起作用。

4

1 回答 1

1

不要使用相对路径,除非 a) 您绝对确定当前工作目录是什么(请参阅getcwd()参考资料),或 b) 预期该路径相对于不同的工作目录(如工作目录感知 CLI-tools )。始终使用或创建绝对路径

"/path/to/img/".$makerID."/".$modelID."/";
__DIR__ . "/../path/to/img/".$makerID."/".$modelID."/";

我更喜欢第二个,因为它更便携。

于 2013-02-19T23:57:55.727 回答