PHP取消链接错误

时间:2013-02-19 23:51:25

标签: php unlink

我在删除上传的图片方面遇到了问题。

它会在数据库中插入并上传罚款,但不会删除。

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

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

(第一个 - 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/...

结论:如果我同时使用这两个查询,取消关联将无效。

1 个答案:

答案 0 :(得分:1)

不要使用相对路径,除非a)您完全确定,当前工作目录是什么(请参阅getcwd()),或b)意图是路径相对于差异工作目录(比如在工作目录感知的CLI工具中。始终使用或创建绝对路径

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

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