Advanced search  

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]

Pages: [1]   Go Down

Author Topic: Gallery muss auf anderen Server umziehen - Problem zu viele Dateien im Ordner  (Read 6162 times)

0 Members and 1 Guest are viewing this topic.

Chris99

  • Coppermine novice
  • *
  • Offline Offline
  • Posts: 26

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

 
 
Logged

Αndré

  • Administrator
  • Coppermine addict
  • ****
  • Country: de
  • Offline Offline
  • Gender: Male
  • Posts: 15764

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.


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.


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.
Logged

Chris99

  • Coppermine novice
  • *
  • Offline Offline
  • Posts: 26

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... ?

Logged

Αndré

  • Administrator
  • Coppermine addict
  • ****
  • Country: de
  • Offline Offline
  • Gender: Male
  • Posts: 15764

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.


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?
Logged

Αndré

  • Administrator
  • Coppermine addict
  • ****
  • Country: de
  • Offline Offline
  • Gender: Male
  • Posts: 15764

sowas wollte ich aber schon seit längerer Zeit mal programmieren

Hier ein Script, welches bei meinen Tests fehlerfrei funktioniert hat:
Code: [Select]
<?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
Code: [Select]
$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.
Logged

Chris99

  • Coppermine novice
  • *
  • Offline Offline
  • Posts: 26

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...
Logged

Αndré

  • Administrator
  • Coppermine addict
  • ****
  • Country: de
  • Offline Offline
  • Gender: Male
  • Posts: 15764

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.


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").


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.
Logged

Chris99

  • Coppermine novice
  • *
  • Offline Offline
  • Posts: 26

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

Αndré

  • Administrator
  • Coppermine addict
  • ****
  • Country: de
  • Offline Offline
  • Gender: Male
  • Posts: 15764

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.
Logged
Pages: [1]   Go Up
 

Page created in 0.025 seconds with 21 queries.