PHP取消链接错误


PHP unlink error

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

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

示例:我有两个表,modelImagesModel。在Model中,我保存一个主映像的路径,但在modelImage中将有很多主映像。这些表通过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/...

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

不要使用相对路径,除非a)您绝对确定当前工作目录是什么(请参阅getcwd()),或者b)路径是相对于不同的工作目录定位的(如在支持工作目录的CLI工具中)。始终使用或创建绝对路径

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

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