Gallery muss auf anderen Server umziehen - Problem zu viele Dateien im Ordner Gallery muss auf anderen Server umziehen - Problem zu viele Dateien im Ordner
 

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Main Menu

Gallery muss auf anderen Server umziehen - Problem zu viele Dateien im Ordner

Started by Chris99, January 11, 2015, 05:59:11 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

Chris99

Hallo zusammen,

wir haben eine große Coppermine Gallery mit ca. 250.000 Bildern - diese muss auf einen anderen Server umziehen, da unser Provider (1und1) ein Limit von 256.000 Dateien pro Paket hat.  :(

Gibt es eine Möglichkeit einen Teil der Bilder auszulagern und der Coppermine Datenbank  z.B. zu sagen die einen Bilder liegen auf dem Server, die anderen Bilder auf dem Server?
Der Bilderordner ist auch mit ca. 250.000 so unhandlich, dass ich bisher nicht geschafft habe per ftp zu sichern. 

Wer hat mit einer so großen Gallery schon mal einen Umzug gemacht, und kann mir Tipps geben?

Bin über jeden Tipp dankbar.

vielen Dank im voraus und viele Grüße

Christian Mair


 

Αndré

Quote from: Chris99 on January 11, 2015, 05:59:11 PM
wir haben eine große Coppermine Gallery mit ca. 250.000 Bildern - diese muss auf einen anderen Server umziehen, da unser Provider (1und1) ein Limit von 256.000 Dateien pro Paket hat.  :(

Interessant, da du mit 250000 Bildern ja schon mindestens 500000 Dateien hast (Bild + Thumbnail + ggf. Bild in Zwischengröße + ggf. Original ohne Wasserzeichen). Aber darum geht es hier ja nicht.


Quote from: Chris99 on January 11, 2015, 05:59:11 PM
Gibt es eine Möglichkeit einen Teil der Bilder auszulagern und der Coppermine Datenbank  z.B. zu sagen die einen Bilder liegen auf dem Server, die anderen Bilder auf dem Server?

Das könnte mit Sicherheit irgendwie funktionieren, ist aber garantiert eine ziemliche Bastellösung und davon würde ich erstmal abraten.


Quote from: Chris99 on January 11, 2015, 05:59:11 PM
Der Bilderordner ist auch mit ca. 250.000 so unhandlich, dass ich bisher nicht geschafft habe per ftp zu sichern. 
Vermutlich liegen alle Dateien in demselben Ordner (also ohne Unterordner)? Ich habe bzgl. dieser Problematik mal etwas auf stackoverflow gelesen, habe den Artikel aber nicht parat. Im Grunde ging es dort darum, dass die üblichen Werkzeuge zum Dateien auflisten/anzeigen/suchen alle bei solch großen Mengen scheitern, weil alle dieselbe Bibliothek benutzen. Ein Nutzer hatte dort dann eine Lösung erarbeitet, dies erfordert jedoch mehr als FTP-Zugriff auf deinen Server (mindestens Shell-Zugriff, evtl. mit root-Rechten). Steht dir das denn zur Verfügung? Wenn nicht, kommst du vermutlich nicht dran vorbei 1und1 zu kontaktieren und um Hilfe zu bitten.

Chris99

Oh, danke :) - ich habe sie nicht gezählt, dann sind es ca. 125.000 Fotos....

Ja so wie es aussieht, sind alle in einem Verzeichnis ohne Unterordner... Nachträglich kann man die Dateien nicht in Unterordern machen, mit einem Plugin oder ähnlichem? Habe vorhin gesehen, dass es das Plug in "Mass Upload" gibt, das Ordner-Strukturen übernimmt... ?


Αndré

Quote from: Chris99 on January 11, 2015, 07:50:27 PM
Habe vorhin gesehen, dass es das Plug in "Mass Upload" gibt, das Ordner-Strukturen übernimmt... ?

Ja gibt es, bringt in deinem Fall aber nichts, da du ja keine Ordnerstrukturen hast und die vorhandenen Dateien nicht mal sichern kannst.


Quote from: Chris99 on January 11, 2015, 07:50:27 PM
Nachträglich kann man die Dateien nicht in Unterordern machen, mit einem Plugin oder ähnlichem?

Das ist prinzipiell möglich. Wenn man vorhandene Dateien verschiebt, muss man auch den entsprechenden Datensatz in der Datenbank aktualisieren, damit Coppermine weiß, wo sich die Dateien nach dem Verschieben befinden. Soweit ich weiß, gibt es dafür noch kein Script oder Plugin, sowas wollte ich aber schon seit längerer Zeit mal programmieren. Ist natürlich recht riskant das Script in deiner Galerie anzuwenden, da du kein Backup hast/machen kannst, falls irgendetwas schief läuft.

Wo liegen deine Dateien denn derzeit? Unter "userpics/"? Wie sieht es mit dem Zugriff per Shell aus?

Αndré

Quote from: Αndré on January 11, 2015, 07:56:44 PM
sowas wollte ich aber schon seit längerer Zeit mal programmieren

Hier ein Script, welches bei meinen Tests fehlerfrei funktioniert hat:
<?php
define
('IN_COPPERMINE'true);
define('DB_INPUT_PHP'true);
require(
'include/init.inc.php');

if (!
GALLERY_ADMIN_MODE) {
    
cpg_die(ERROR$lang_errors['access_denied']);
}

$limit 50;
$result cpg_db_query("SELECT pid, aid, filepath, filename FROM {$CONFIG['TABLE_PICTURES']} WHERE filepath LIKE '{$CONFIG['userpics']}%' AND filepath NOT LIKE CONCAT('%/', aid, '/') LIMIT $limit");

if (
mysql_num_rows($result)) {
    
pageheader('Moving''<meta http-equiv="refresh" content="1; URL='.$CPG_PHP_SELF.'">');
    echo 
'<table width="100%"><tr><td class="tableh1" width="50%">File</td><td class="tableh1" width="50%">Moved to</td></tr>';
} else {
    
pageheader('Done');
    echo 
'<table width="100%"><tr><td>Done.</td></tr>';
}

while (
$row mysql_fetch_assoc($result)) {
    
$dest_dir_sql $row['filepath'].$row['aid'].'/';
    
$dest_dir $CONFIG['fullpath'].$dest_dir_sql;
    
$src_dir $CONFIG['fullpath'].$row['filepath'];
    
$images = array($row['filename'], $CONFIG['normal_pfx'].$row['filename'], $CONFIG['thumb_pfx'].$row['filename'], $CONFIG['orig_pfx'].$row['filename']);

    if (!
is_dir($dest_dir)) {
        
mkdir($dest_diroctdec($CONFIG['default_dir_mode']));
        if (!
is_dir($dest_dir)) {
            
cpg_die(CRITICAL_ERRORsprintf($lang_db_input_php['err_mkdir'], $dest_dir), __FILE____LINE__);
        }
        @
chmod($dest_diroctdec($CONFIG['default_dir_mode'])); //silence the output in case chmod is disabled
        
$fp fopen($dest_dir '/index.php''w');
        
fwrite($fp' ');
        
fclose($fp);
    }

    foreach (
$images as $image) {
        if (!
file_exists($src_dir.$image)) {
            continue;
        }
        if (!
rename($src_dir.$image$dest_dir.$image)) {
            
cpg_die(CRITICAL_ERRORsprintf($lang_db_input_php['err_move'], $src_dir.$image$dest_dir), __FILE____LINE__);
        } else {
            echo 
'<tr><td>'.$src_dir.$image.'</td><td>'.$dest_dir.'</td></tr>';
        }
    }

    
cpg_db_query("UPDATE {$CONFIG['TABLE_PICTURES']} SET filepath = '$dest_dir_sql' WHERE pid = {$row['pid']}");
}

echo 
'</table>';
pagefooter();


Kopiere den Inhalt in eine neue Datei im Wurzelverzeichnis deiner Galerie und rufe es als Admin auf. Es fängt sofort an Unterordner zu erstellen und die Dateien dort hinein zu schieben. In der Zeile
$limit = 50;
kannst du einstellen, wieviele Dateien auf einmal verschoben werden sollen (Achtung, zu diesen Dateien kommen jeweile noch Vorschaubild, ggf. Zwischengröße und ggf. Backup ohne Wasserzeichen). Im Browser wird dir derweil angezeigt, was gerade verschoben wurde.

Achtung: falls du benutzerdefinierte Vorschaubilder benutzt (z.B. für Videos), werden diese bisher NICHT mit verschoben.

Chris99

Ja super, vielen herzlichen Dank,  :) das werde ich gerne ausprobierten. d.h. das Script legt für jedes Album einen Unterordner an und schiebt dann die jeweiligen Fotos da rein..?  :D
Sollte ich vorher noch eine Sicherung anlegen, wenn ja von was genau?
Was genau heisst das mit den benutzerdefinierte Vorschaubilder? Vorschaubilder der Alben?

Ich habe nachgesehen beim Provider, Shell zugang hätte ich (hab aber keinen Plan was ich wie machen kann)

Danke, danke für die Hilfe...

Αndré

Quote from: Chris99 on January 18, 2015, 12:19:18 PM
das Script legt für jedes Album einen Unterordner an und schiebt dann die jeweiligen Fotos da rein..?

Genau. Dann solltest du mit deinem FTP-Client auch keine Probleme mehr beim Sichern haben.


Quote from: Chris99 on January 18, 2015, 12:19:18 PM
Sollte ich vorher noch eine Sicherung anlegen, wenn ja von was genau?

Ich dachte das geht nicht mehr? Ansonsten wäre eine Sicherung von der MySQL-Datenbank und dem "albums"-Ordner angebracht. Falls du über deinen Provider irgendwie ein Backup machen kannst, dann würde ich das an deiner Stelle zuerst einmal Herunterladen und lokal testen, ob überhaupt alle Dateien gesichert wurden. Und wenn du es dann bereits auf deinem Rechner hast, kannst du auch gleich testweise mein Script drüber laufen lassen, bevor du es auf deinem Server anwendest. Nachdem es einmal komplett durchgelaufen ist, sollte im Ordner "albums/userpics" nur noch Ordner mit den Album-IDs sein (und die Dateien "index.php" und "no_FTP-uploads_into_this_folder!.txt").


Quote from: Chris99 on January 18, 2015, 12:19:18 PM
Was genau heisst das mit den benutzerdefinierte Vorschaubilder?

Nicht-Bilder (also z.B. Videos, PDF-Dokumente, etc.) haben standardmäßig kein Vorschaubild, da Coppermine dies nicht erzeugen kann. Jedoch gibt es in Coppermine die Möglichkeit für eben genau solche Dateien trotzdem Vorschaubilder hochzuladen. Wenn du nur Bilddateien in deiner Galerie hast, brauchst du dir darüber keine Gedanken zu machen.

Chris99

Vielen herzlichen Dank, das Script hat super funktioniert  :) :) :) - jetzt kann ich den Umzug machen..

Αndré

Zur Info: ich habe in SVN-Revision 8762 ein Plugin namens "userpics_to_subdir" übermittelt. Aus Kompatibilitätsgründen verschiebt es erst einmal nur jpg-Dateien. Unterstützung für andere Dateiformate (vor allem auch nicht-Bilddateien, inkl. benutzerdefiniertem Vorschaubild, falls vorhanden) füge ich ggf. später hinzu.