PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   BRAINSTORMING PHP/SQL/HTML/JS/CSS (https://www.php-resource.de/forum/brainstorming-php-sql-html-js-css/)
-   -   [PHP5] unnötiges Bildmaterial Filtern - PHP und MySQL (https://www.php-resource.de/forum/brainstorming-php-sql-html-js-css/85652-php5-unnoetiges-bildmaterial-filtern-php-und-mysql.html)

web4free 22-07-2007 15:00

[PHP5] unnötiges Bildmaterial Filtern - PHP und MySQL
 
Hallo Leute,

Es ginge darum aus einen Verzeichnis jene Dateien heraus zu filtern,
die nicht gebraucht werden.
Jene Dateien die benötigt werden, stehen in der Datenbank.
Im Verzeichnis sollen nun genau nur diese Dateien drinnen bleiben die auch lt. Datenbank benötigt werden.

Klar - keine große Sache und wie ich dazu das Script schreibe ist auch klar.
ABER!!!!

Es handelt sich hier nicht um 300-3.000 Dateien sondern um über 800.000 - Tendenz steigend - welche in der Datenbank stehen.

Und genau da hab ich mein Problem, weil ich den Server nicht 5 Std. für dieses Script arbeiten lassen kann - nur damit er mir nacher abbricht.

Wie kann ich nun das vorhandene Bildmaterial mit jenen aus der Datenbank abgleichen, um dann den Scrott vom Server zu schmeißen??

Scheinbar ist das Wetter zu heiß um dass ich auf eine performante Lösung komme.

Bitte, bitte um Hilfe....
Vielen Dank

TobiaZ 22-07-2007 15:04

*move* nach Brainstorming, oder wirst du konkreter?

Was ist DEIN Ansatz? Ich denke es ist klar, wie du das Script machen würdest. Woran scheiterst du? Warum ist es nicht performant genug?

Wie regelmäßig muss das Script laufen?

web4free 22-07-2007 17:37

Hi,

Nun ja woran scheiter es?
Nun der Gedanke ist dass ich ein Array erzeuge mit allen Dateinamen.
Dieses Array gehe ich dann Datensatzweise durch und kopiere die vorhandenen Dateien in ein neues Verzeichnis.

Somit sollten sich im neuen Verzeichnis nur noch jene Dateien befinden die auch in der Datenbank zu finden sind.
Am Schluß kann würde ich dann das alte Verzeichnis löschen und das neue Verzeichnis umbenennen.


Folgende Versuche hatte ich bereits probiert:
.) Alle Dateinamen in ein Array zu schreiben.
.) Datensätze zeilenweise aus der Datenbank auslesen, was bis zu 6 Bilder pro Datensatz ergeben könnte was ich zugleich kopieren könnte.

Ich glaub mein Problem ist das Kopieren der relevanten Bilder ins neue Verzeichnis.
Denn genau daran hängt sich das ganze dann auf, weils Ewigkeiten braucht.
Ich gedenke dieses Script nur einmal in der Nacht pro Monat laufen zu lassen.

Auch hätte ich bereits mit einem Shellscript das ganze probiert, was mir eventuell lieber wäre als mit php.

Somit gleich mal zu meinen Möglichkieten:
Ich habe 2 Rootserver. Auf den einen ist die Datenbank plus das gesamte Projekt.
Auf dem 2. Server befindet sich das ganze Bildmaterial.

Somit würde dieses Script nur auf dem 2. Server seine Sklavenarbeit verrichten um den Produktionsserver nicht unnötig zu belasten.

Vielleicht würde es ja auch Sinn machen, zuerst die ganzen Dateinamen von der Produktionsdatenbank auf die Datenbank am 2. Server einzuspielen, damit dann der Vergleich gesamt am 2. Server ablaufen kann.

Sollte es von Nöten sein - zwecks Einsicht - kann ich ja mal das SH-Script als Anhang dazuhängen um hier meinen Ansatz zu zeigen.

Leider hab ich ja schon das Problem, dass ich nicht einmal die Anzahl der am Server befindlichen Dateien feststellen kann.
Und das mit diesem Script:
PHP-Code:

$a 0;
if (
$handle02 opendir($droot 'inserate/')) {
    while (
false !== ($file02 readdir($handle02))) {
        if (
$file != '.' && $file != '..' && $file != 'thumb')
        {
            
$a++;
        }
    }
}
echo 
$a

Bis vor 3 Monaten gab es dieses Problem noch nicht!
Da hatte ich grad mal an die 90.000 - 150.000 Bilder am Server.
Aber man will ja nicht stillstehen mit seinen Projekt und hat halt einige "Neuzugänge" bekommen :-)

TobiaZ 22-07-2007 17:59

also statt zu kopieren könntest du mal rename() benutzen, das sollte die performance schonmal steigern.

du solltest generell auf dem bildserver arbeiten, ansonsten hast du natürlich performance einbußen.

du solltest die bilder dann löschen, wenn sie nicht mehr gebraucht werden und nicht die leichen vor sich hin gammeln lassen.

fazit: ein script (nicht zwingend php) auf dem bildserver welches zuerst die whitelist holt und dann alle bilder löscht, die nicht darauf sind und die älter als 1 stunde sind (nur zum puffern).

web4free 22-07-2007 18:45

Kurz noch zur Erklärung warum es überhaupt zu Laichen komen kann.

Primär wird und soll und eigendlich tuts das auch! Das genannte Script läuft nur auf dem 2. Server.

Warum kann es jetzt zu solchen Laichen kommen?
Nun - ich habe etwas mehr als 2.000 aktive KFZ-Händler, welche Tag für Tag - und das kann auch mehrmals am Tag sein - deren Fahrzeugbestände importieren.

Als Beispiel nenne ich nur ein einziges ZIP-Archiv - nennen wir es "A"!

1.) Es wird ein temporärer Ordner erstellt, in dem das Archiv A eingespielt wird.
2.) A wird gelöscht.
3.) Fahrzeugbilder werden laut Datenbestand in den Bildordner kopiert.
4.) Datensätze werden in die DB eingespielt
5.) TEMP-Ordner wird gelöscht.

Wenn es bei Punkt 3 irgendeinen Fehler gibt, wird der Import zur Gänze abgebrochen für A und es geht mit dem nächsten Händler weiter - aber die Bilder sind schon mal im Bilderordner kopiert von A.

Sollte eigendlich sehr minimal sein.
Leider kann es dadurch vorkommen, dass ich wie schon einmal an die 40.000 - 50.000 Dateien unnötig drauf hatte.

Jene Bilder die nicht mehr gebraucht werden, weil die Anzeigen im Archiv schon über der Maximalzeit liegen, werden ja auch wieder gelöscht.
Das funktioniert eh super - es sind nur die Laichen welche beim Import passieren können.

Das Shell-Script welches ich geschrieben habe macht eigendlich auch nix anderes.
Zuerst die Whitelist holen und dann halt die Bilder in einen neuen Ordner kopieren, welche den whitelisteinträge entsprechen um am Schluß den alten Ordner zu löschen und den neuen umzubenennen.

Schöner wäre es und vielleicht soger eleganter und performanter anhand der Whitelist jene Dateien in diesem Ordner zu belassen und alle anderen zu löschen die eben nicht der Whitelist entsprechen.
Aber da steig ich leider föllig aus, weil ich mich mit der Shellprogrammierung und den Linuxbefehlen noch nicht soooo gut auskenne.

tontechniker 22-07-2007 22:34

Du weißt doch wenn bei 3) ein Fehler auftritt oder? Warum löscht du dann nicht gleich alle Dateien, du hast doch den Inhalt der Datei?

web4free 23-07-2007 02:24

Nun ja - ich hatte vorher schon manches mal Probleme mit gewissen Sonderzeichen, die Händler eingegeben haben und damit den Import mehr oder weniger vernichtet haben.
Das ist aber bereits mit den Schnittstellen alles abgeklärt und es kommen eh nur noch genormte Datensätze rüber - was zusätzliche Abfrage in der Schwakedatenbank für die deutschen und andere DB's für die anderen Länder erspart :-)

Mittlerweile ist es wirklich soweit sauber wie möglich und es sollten eigendlich keine "Laichen" mehr vorhanden sein.
Zur Kontrolle will ich aber schon so einmal im Monat über Nacht diesen Ordner säubern.

Auch wenn ich zur Zeit mit der 400GB HDD keine Platzprobleme habe - wer will schon unnötige GB's verbraten.

Ich wäre ja schon froh, wenn ich einfach nur die Summe der Dateien welche in diesem Ordner sind herausfinden könnte.

lg.
Werner

tontechniker 23-07-2007 22:24

Zitat:

Ich wäre ja schon froh, wenn ich einfach nur die Summe der Dateien welche in diesem Ordner sind herausfinden könnte.
Entweder durchgehen und zählen oder shell-Ausgabe parsen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:24 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG