php - 使用 PHP 删除 Foreach 循环中的文件名数组
问题描述
如果他们想删除他们的所有详细信息,我正在为网站用户创建一个“删除帐户”功能。
从数据库中删除相关记录非常简单。但是,我想删除他们保存在站点图像文件夹中的图像。
下面是我正在尝试的代码,其中一部分基于@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();
}
}
上面代码的关键部分是下面的这段代码:
// -- 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);
}
}
}
我最初收到与PHP Notice: Undefined index: file_extension in /Applications/MAMP/htdocs/site/profile-edit.php
上面声明$pattern
变量的第 3 行 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; ?>"
关于如何从图像目录中删除特定于用户的图像的任何帮助或帮助都会很棒。
解决方案
无需将文件名和扩展名存储在单独的数组中,甚至根本不需要存储在数组中。只需在循环中获取每个图像文件名和扩展名,将其组装成一个模式(例如images/6146972e2dc73_1632016174-{500,750,1000,1500}.jpeg
,然后glob()
找到每个匹配文件并取消链接的模式:
while ($row = $s->fetch()) {
$pattern = $imagesLibrary . $row['filename'] . '-{500,750,1000,1500}.' . $row['file_extension'];
foreach (glob($pattern, GLOB_BRACE) as $filename) {
unlink($filename);
}
}
推荐阅读
- python - 在 python 3 中格式化非常大的数字
- java - 使用 Spark Java 比较两个 Spark 数据帧的 Spark SQL 查询
- javascript - 在循环内从数组的开头删除项目而不改变原始数组
- go - 如何通过 io.Reader 转换 HTML 实体
- python-3.x - Python:从每个项目的最高出现频率创建 DataFrame
- html - 列出一对多关系
- assembly - NASM printf 打印 64 位双段错误
- swift - 再次调用同一个视图,以便可以在 UITableViewController 中选择另一个选项
- image - 来自状态属性的图像源
- swiftui - 如何在 swiftUI 中将 VStack 蒙版中的对象设置为不同的全屏尺寸渐变?