Shopware 5 – ungenutze Bilder löschen
Über verschiedene Prozesse können sich überflüssige Bilder sammeln, welche regelmäßig gelöscht werden sollten.
Shopware hat dafür einen SSH Befehl
php bin/console sw:media:cleanup
Oftmals reicht dieser aber nicht aus, wenn Bilder von ERP Systemen hochgeladen werden.
Hier findet ihr ein PHP Script für unsere Server. Führt dieses Script am besten via SSH aus.
Das Script ist für die Thumbnailgrößen 600×600, 1280×1280, 140×140 und 200×200 programmiert.
<?php
/*
** MediaCleanUp Shopware 5
** V10
** 11.07.2021
**
** support@hosting-pilot.com
*/
error_reporting(0);
// Variables
$mediaDir = "media/image/";
$dbconnect = 'HOSTNAME';
$username = 'USER';
$password = 'PASS';
$dbname = 'DATABASE';
// Dont change anymore
$mysqli = new mysqli($dbconnect, $username, $password, $dbname);
$result = $mysqli->query("SELECT name FROM `s_media` WHERE 1");
$fileListSql = [];
while($row = mysqli_fetch_array($result))
{
$fileListSql[] = $row["name"];
}
$files = scandir($mediaDir);
shuffle($files);
foreach ($files as $dir) {
if(
$dir == "." OR
$dir == ".." OR
$dir == ".gitkeep"
) {
continue;
}
$subdirs = scandir($mediaDir . "/" . $dir);
foreach ($subdirs as $subdir) {
if(
$subdir == "." OR
$subdir == ".." OR
$subdir == ".gitkeep"
) {
continue;
}
$fullList = scandir($mediaDir . "/" . $dir . "/" . $subdir);
$subdirs2 = scandir($mediaDir . "/" . $dir . "/" . $subdir);
foreach ($subdirs2 as $subdir2) {
if(
$subdir2 == "." OR
$subdir2 == ".." OR
$subdir2 == ".gitkeep"
) {
continue;
}
$files = scandir($mediaDir . "/" . $dir . "/" . $subdir. "/" . $subdir2);
if(
$subdir2 == "." OR
$subdir2 == ".." OR
$subdir2 == ".gitkeep"
) {
continue;
}
if(count($files) > 2) {
} else {
rmdir ($mediaDir . "/" . $dir . "/" . $subdir. "/" . $subdir2);
}
foreach ($files as $file) {
if(
$file == "." OR
$file == ".." OR
$file == ".gitkeep"
) {
continue;
}
if(
strpos($file, "_600x600")
) {
$filename = explode("_600x600", $file);
$filename = $filename[0];
} elseif(
strpos($file, "_1280x1280")
) {
$filename = explode("_1280x1280", $file);
$filename = $filename[0];
} elseif(
strpos($file, "_140x140")
) {
$filename = explode("_140x140", $file);
$filename = $filename[0];
} elseif(
strpos($file, "_200x200")
) {
$filename = explode("_200x200", $file);
$filename = $filename[0];
} elseif(
strpos($file, ".webp") OR
strpos($file, ".jpeg")
) {
$filename = substr($file, 0, -5);
} else {
$filename = substr($file, 0, -4);
}
$result = array_search($filename, $fileListSql);
if($result AND $result > -1) {
} else {
unlink($mediaDir . "/" . $dir . "/" . $subdir. "/" . $subdir2 .'/'.$file);
echo '\n\r<br>'.$mediaDir . "/" . $dir . "/" . $subdir. "/" . $subdir2 .'/'.$file.' Product not found and file deleted.';
}
}
}
}
}
echo 'done';
exit;

