Shopware 5 – ungenutze Bilder löschen

Von Christian am 6. Januar 2021

Ü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;
Hosting Pilot Support Telefon

Telefonische Beratung

+49 2131 77 69 59 5
Hosting Hilfe

Online Hilfe