Hallo, wenn man den Media Garbage Collector nutzt und die im Papierkorb befindlichen Dateien löschen möchte, bekommt man folgenden Hinweis:
Es werden alle Medien aus dem Papierkorb unwiederuflich gelöscht. Aus technischen Gründen kann nicht garantiert werden, dass diese Medien wirklich nicht mehr in Verwendung sind. Bitte prüfen Sie dies manuell, bevor Sie fortfahren.
Wie kann ich das denn Prüfen? Und werden über den Media Garbage Collector auch die unzähligen leeren Verzeichnisse unter /media/image gelöscht?
die Logik findest du ja hier: \Shopware\Bundle\MediaBundle\GarbageCollector::run
Prinzipiell ist das Vorgehen beim Aufräumen folgendes:
Finde alle benutzten Medien an den bekannten Stellen (vgl. \Shopware\Bundle\MediaBundle\GarbageCollectorFactory::getDefaultMediaPositions) und sammle diese in der s_media_used
Verschiebe alle Bilder in das Papierkorb-Album, die nicht in der s_media_used auftauchen und aktuell im Artikel-Album sind(*)
Beim Löschen dann:
Lösche alle Bilder aus dem Papierkorb
(aktuell im Artikel-Album sind(*) = zur Einführung des Features wurde es auf das Artikel-Album beschränkt, später soll das auch für andere Alben gelten)
Für deine Fragen bedeutet das:
Du kannst es eigentlich nur prüfen, indem du dir die Bilder im Papierkorb ansiehst und sicher stellst, dass du die nicht mehr brauchst
Nein, die Struktur in der /media/image wird nicht bereinigt
wir haben Probleme mit dem Speicherplatz auf dem Server. Das liegt vor allem an den Bildern unter media/images. Da sind die gleichen Bilder drin, teilweise 27 Mal drin. Ich bin davon ausgegangen, dass die Bilder tatsächlich gelöscht werden, wenn ich sie aus dem Papierkorb lösche. Jetzt lese ich hier, dass dies nicht der Fall ist. Wie kann ich dann die doppelten Bilder in media/images löschen? Ich weiß ja nicht, welches Bild verwendet wird?
Ich fände es besser, wenn die Bilder auf dem Server tatsächlich gelöscht werden, denn so sammelt sich im Laufe der Zeit hier unglaublich viel Müll an. Und die Datenmenge, die sich hier ansammelt ist nicht zu vernachlässigen.
Bei der Version 5.1.6 bei mir ist es nicht möglich die Bilder im Papierkorb zu löschen. (/backend/MediaManager/emptyTrash)
Ich erhalte die Fehlermeldung 503 Service Unavailable. Weiter Informationen werden nicht angezeigt.
Bei einem anderen 5.1.6 Testserver mit ähnlichen Einstellungen erhalte ich die Fehlermeldung 503 und dass die s_media_used - Tabelle fehlt.
Genau dieselbe Meldung erhalte ich auch bei Testserver 5.2.1!
In all den vorhandenen Installationen von 5.1 und 5.2, die wir im Testsystem haben, konnte ich keine s_media_used-Tabelle finden.
Ich habe den ganzen Code von dem Shopware-Installationspaket 5.1.6 und auch 5.2.1 nach s_media_used durchsuchen lassen und folgendes gefunden:
install_5.1.6\engine\Shopware\Bundle\MediaBundle\GarbageCollector.php (5 hits)
Line 100: $this->connection->exec("CREATE TEMPORARY TABLE IF NOT EXISTS s_media_used (id int auto_increment, mediaId int NOT NULL, PRIMARY KEY pkid (id))");
Line 108: $sql = "UPDATE s_media m SET albumID=-13 WHERE m.id NOT IN (SELECT mediaId FROM s_media_used) AND albumID = -1";
Line 224: 'INSERT INTO s_media_used
Line 266: $sql = 'INSERT INTO s_media_used SELECT DISTINCT NULL, m.id FROM s_media m WHERE m.path IN (:mediaPaths)';
Line 282: $sql = sprintf("INSERT INTO s_media_used (mediaId) VALUES %s", $idString);
install_5.1.6\engine\Shopware\Controllers\Backend\MediaManager.php (1 hit)
Line 1027: Shopware()->Db()->query("TRUNCATE TABLE `s_media_used`");
install_5.2.1\engine\Shopware\Bundle\MediaBundle\GarbageCollector.php (5 hits)
Line 100: $this->connection->exec("CREATE TEMPORARY TABLE IF NOT EXISTS s_media_used (id int auto_increment, mediaId int NOT NULL, PRIMARY KEY pkid (id))");
Line 108: $sql = "UPDATE s_media m SET albumID=-13 WHERE m.id NOT IN (SELECT mediaId FROM s_media_used) AND albumID = -1";
Line 224: 'INSERT INTO s_media_used
Line 266: $sql = 'INSERT INTO s_media_used SELECT DISTINCT NULL, m.id FROM s_media m WHERE m.path IN (:mediaPaths)';
Line 282: $sql = sprintf("INSERT INTO s_media_used (mediaId) VALUES %s",
install_5.2.1\engine\Shopware\Controllers\Backend\MediaManager.php (1 hit)
Line 1034: Shopware()->Db()->query("TRUNCATE TABLE `s_media_used`");
Dies heisst, dass die Tabelle nur temporär angelegt wird. Warum aber wird es nicht korrekt durchgeführt? Hier wird auch darüber gesprochen, aber der Warenkorb ist für micht erreichbar.
Wenn im Papierkorb keine Bilder sind, erhält man die Meldung, dass s_media_used fehlt, da sie (sozusagen) gar nicht erstellt werden muss. Somit kommt es zu diesem Fehler.
Wenn nur eine 503-Fehlermeldung kommt, aber kein weitere Beschreibung sichtbar ist, ist ein Bild nicht löschbar und dann kommt es zum Fehler.
Wenn das korrupte Bild via Datenbank gelöscht wird (leider nur so möglich) kann der Papierkorb wie gewohnt ohne Probleme geleert werden.
Finde alle benutzten Medien an den bekannten Stellen (vgl. \Shopware\Bundle\MediaBundle\GarbageCollectorFactory::getDefaultMediaPositions) und sammle diese in der s_media_useda
Hallo Daniel, bei der Prüfung, ob das Bild noch benutzt wird, wird aber nicht überprüft, ob es z.B. in Kategoriebeschreibungen oder Einkaufswelten referenziert wird? Gruß Matthias