我在删除上传的图片方面遇到了问题。
它会在数据库中插入并上传罚款,但不会删除。
示例:我有两个表, 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/...
结论:如果我同时使用这两个查询,取消关联将无效。
答案 0 :(得分:1)
不要使用相对路径,除非a)您完全确定,当前工作目录是什么(请参阅getcwd()
),或b)意图是路径相对于差异工作目录(比如在工作目录感知的CLI工具中。始终使用或创建绝对路径
"/path/to/img/".$makerID."/".$modelID."/";
__DIR__ . "/../path/to/img/".$makerID."/".$modelID."/";
我更喜欢第二种,因为它更便携。