Ik heb een bijzonder probleem. Een klant heeft een website met een zelfgeschreven cms systeem. Het functioneert maar daar is ook alles mee gezegd.
Nu is het zo omdat het een verhuurbedrijf is, er enorm veel fotos op staan. Hiervan wordt een groot deel niet gebruikt. Deze wil de klant verwijderd hebben uit het systeem.
Omdat het echt om 1800 bestanden gaan ofzo is dit echt een monsterklus om allemaal handmatig uit te zoeken welke fotos er op de site worden gebruikt en welke niet.
Is er toevallig iemand hier die hier een handige oplossing of truc in weet om dit wat makkelijker te maken?
- Manier om niet gebruikte fotos te filteren
-
17-08-2023, 00:28 #1
- Berichten
- 208
- Lid sinds
- 14 Jaar
Manier om niet gebruikte fotos te filteren
-
In de schijnwerper
-
17-08-2023, 07:17 #2Particulier
- Berichten
- 911
- Lid sinds
- 9 Jaar
Re: Manier om niet gebruikte fotos te filteren
Wat mij als eerste te binnen schiet is iets creatiefs met een SEO tool of ander soort crawler de site laten scannen/crawlen.
-
17-08-2023, 07:28 #3Particulier
- Berichten
- 474
- Lid sinds
- 14 Jaar
Re: Manier om niet gebruikte fotos te filteren
Om te controleren of bestanden in een map worden gebruikt in één of meerdere tabellen in uw database, hebt u een script nodig dat zowel door bestanden op de schijf gaat als de relevante database-tabellen doorzoekt. Hieronder geef ik een eenvoudig voorbeeld van hoe u dit kunt doen met PHP en MySQL:
PHP Code:<?php
$host = 'localhost';
$db = 'jouw_database';
$user = 'jouw_gebruiker';
$pass = 'jouw_wachtwoord';
$charset = 'utf8mb4';
// PDO instantiatie en foutafhandeling
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $options);
$folderPath = 'pad_naar_je_folder';
// Bestanden in de folder ophalen
$files = array_diff(scandir($folderPath), array('..', '.'));
foreach ($files as $file) {
$isFileUsed = false;
// Query om te controleren of het bestand wordt gebruikt in de tabel
// Dit is slechts een voorbeeld. U moet dit aanpassen aan uw specifieke behoeften.
$stmt = $pdo->prepare("SELECT COUNT(*) as count FROM jouw_tabel WHERE kolom_naam LIKE :fileName");
$stmt->execute(['fileName' => "%$file%"]);
$result = $stmt->fetch();
if ($result['count'] > 0) {
$isFileUsed = true;
}
// Output de resultaten
if ($isFileUsed) {
echo "Het bestand $file wordt gebruikt in de database.<br>";
} else {
echo "Het bestand $file wordt niet gebruikt in de database.<br>";
}
}
?>
$host, $db, $user, en $pass moeten worden ingesteld op uw databasegegevens.
$folderPath moet worden ingesteld op het pad naar uw map.
De SQL-query moet worden aangepast aan de structuur van uw database (de tabelnaam, kolomnaam, etc.).
Let op: Dit script is zeer basaal en is bedoeld als uitgangspunt. Afhankelijk van uw exacte vereisten, de structuur van uw database, en hoe de bestandsnamen worden opgeslagen in de tabel(len), moet u mogelijk aanvullende aanpassingen doen. Ook is het belangrijk om te beseffen dat het gebruik van LIKE in SQL-query's inefficiënt kan zijn voor grote datasets. Het is dus cruciaal om dit script te testen en te optimaliseren voor gebruik in een productieomgeving.
-
17-08-2023, 07:52 #4
- Berichten
- 146
- Lid sinds
- 9 Jaar
Re: Manier om niet gebruikte fotos te filteren
Ik zou in ieder geval de foto's in eerste instantie verplaatsen, niet verwijderen. Als je daarna zorgt dat de cache ververst is en je bekijkt je website, dan zie je of je te veel hebt verwijderd / verplaatst.
Misschien is andersom makkelijker? Dus alles verplaatsen en dan terug zetten wat wél wordt gebruikt?
-
17-08-2023, 09:17 #5
- Berichten
- 208
- Lid sinds
- 14 Jaar
Re: Manier om niet gebruikte fotos te filteren
Dank! Dit lijkt effectief te zijn. Ik zal de klant vragen naar de gegevens zodat ik hem kan proberen.
En anders vrees ik toch de optie van @IJsbrand, reversed gaan werken. En stuk voor stuk weer terugzetten.
Thanks!
-
17-08-2023, 09:46 #6
- Berichten
- 1.269
- Lid sinds
- 16 Jaar
Re: Manier om niet gebruikte fotos te filteren
1. Er zijn tools waarmee je orphan files kunt vinden, zoals seo screaming frog.
2. Serverlogs gebruiken om te filteren.
3. oplossing zoals aangedragen op: https://stackoverflow.com/questions/...-the-sql-datab
-
19-08-2023, 20:08 #7
- Berichten
- 523
- Lid sinds
- 17 Jaar
Re: Manier om niet gebruikte fotos te filteren
Denk dat dit een oplossing is:
1.
Run een scriptje die alle foto's in de mappen ophaalt en sla deze op in de db.
2.
Zorg er middels htaccess voor dat alle foto's niet meer direct gereturned worden door de server, maar dat het via een php bestand gaat. In dat php bestand sla je in de database op dat de betreffende foto is opgevraagd, eventueel met een +1 als je een counter wil gebruiken zodat je achteraf kunt zien welke images het meeste worden opgevraagd. Daarna return je middels php de foto: https://www.quora.com/How-do-I-echo-an-image-with-PHP
In de database zie je na een maand welke foto's allemaal gebruikt worden.
In chatgp gegooid.
Script 1:
PHP Code:<?php
$host = 'localhost';$db = 'mijn_db';$user = 'mijn_user';$pass = 'mijn_pass';$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";$options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false,];try { $pdo = new PDO($dsn, $user, $pass, $options);} catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode());}
$directory = '/pad/naar/je/foto/mappen/';$allowed_extensions = ['jpg', 'jpeg', 'png', 'gif'];
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory), RecursiveIteratorIterator::SELF_FIRST);foreach($files as $file) { if ($file->isFile() && in_array(strtolower($file->getExtension()), $allowed_extensions)) { $file_path = $file->getPathname(); $file_name = $file->getFilename();
$stmt = $pdo->prepare("INSERT INTO foto_tabel (naam, pad) VALUES (?, ?)"); $stmt->execute([$file_name, $file_path]); }}
- Vervang de databasenaam, gebruikersnaam, wachtwoord en andere variabelen aan het begin van het script met je eigen waarden.
- Maak een tabel genaamd foto_tabel (of een andere naam naar keuze) met kolommen voor de bestandsnaam (naam) en het bestandspad (pad). Pas dit aan als je een andere structuur voor je tabel wilt.
- Vervang '/pad/naar/je/foto/mappen/' met het daadwerkelijke pad naar je fotomappen.
- Als je andere bestandstypen wilt toestaan, voeg deze dan toe aan de allowed_extensions-array.
2.
htaccess:
RewriteEngine On
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|png|gif)$
RewriteRule ^(.*)$ image.php?image=$1 [L,QSA]
image.php:
PHP Code:<?php$imagePath = $_GET['image'];
// Verbind met de database$conn = new mysqli("host", "username", "password", "database");
// Check verbindingif ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);}
// Sla op in de database (eventueel met +1 voor een counter)$sql = "INSERT INTO image_requests (image_name, request_count) VALUES ('$imagePath', 1) ON DUPLICATE KEY UPDATE request_count = request_count + 1";
$conn->query($sql);$conn->close();
// Lees en retourneer de afbeelding$imageInfo = getimagesize($imagePath);header('Content-Type: ' . $imageInfo['mime']);readfile($imagePath);
CREATE TABLE image_requests (
image_name VARCHAR(255) PRIMARY KEY,
request_count INT NOT NULL DEFAULT 0
);
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic