【发布时间】:2021-11-13 07:13:17
【问题描述】:
如果网站用户想删除所有详细信息,我正在为他们创建“删除帐户”功能。
从数据库中删除相关记录非常简单。但是,我想删除他们保存在站点图像文件夹中的图像。
以下是我正在尝试的代码,其中一部分是基于@kmoser 的建议。
// $db_image_id, $db_image_ext, $db_image_filename are fetched in a previous code block for when images are outputted on the page.
if(isset($_POST['delete-account'])) {
$loggedInUser = $_SESSION['logged_in'];
$imagesLibrary = 'images-lib/';
$imagesDownload = 'images-download/';
try {
$s = $connection->prepare("SELECT filename FROM `imageposts` WHERE user_id = :user_id");
$s->bindParam(':user_id', $loggedInUser);
$s->execute();
// -- DELETE THE USER'S IMAGE FILES FROM 'IMAGES-LIB' FOLDER
while ($row = $s->fetch()) {
if (isset($pattern)) {
$pattern = $imagesLibrary . $row['filename'] . '-{500,750,1000,1500}' . '.' . $row['file_extension'];
foreach (glob($pattern, GLOB_BRACE) as $filenames) {
unlink($filenames);
}
}
}
header("Location: index.php");
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
}
上面代码的关键是下面这个sn-p:
// -- DELETE IMAGE FILES FROM 'IMAGES-LIB' FOLDER
while ($row = $s->fetch()) {
if (isset($pattern)) {
$pattern = $imagesLibrary . $row['filename'] . '-{500,750,1000,1500}' . '.' . $row['file_extension'];
foreach (glob($pattern, GLOB_BRACE) as $filenames) {
unlink($filenames);
}
}
}
我最初收到与上面声明$pattern 变量的第3 行PHP 代码有关的错误PHP Notice: Undefined index: file_extension in /Applications/MAMP/htdocs/site/profile-edit.php。我已经设法通过将代码包装在现在存在的if(isset($pattern)) if 语句中来解决这个问题。我现在没有收到任何错误日志,但文件并未从“images-lib”目录中删除。
一个典型的文件名示例是6146972e2dc73_1632016174-500.jpeg
以下是文件在数据库中的外观示例:
当以<img> 标记输出到页面时,大小例如-500 文件名的一部分与src 属性内的字符串连接。
src="<?php echo '/images-lib/' . $db_image_filename . '-500' . '.' . $db_image_ext; ?>"
任何有关如何从图像目录中删除特定于用户的图像的帮助或帮助都会很棒。
【问题讨论】:
-
对于存储在
imageposts表中的文件名,每个文件系统中是否存储了多个大小,还是只有一个? -
@kmoser 数据库表中的每个图像只有一个。当输出到 img 标记中的页面时,src 属性将大小连接为字符串值。
-
if (isset($pattern))不是修复“未定义索引:file_extension”错误的正确方法。您需要将SELECT filename FROM `imageposts`更改为SELECT filename, file_extension FROM `imageposts`。