Seite 1 von 1

Mehrere Foren updaten

Verfasst: 17.12.2008 20:27
von Lucan
Hallo, hat jemand von euch zufälliger weise ein Script was folgendes kann:

Ich hoste kostenlos mehrere Foren (mitlerweile ~50), welche ich auch update etc..
Dafür habe ich zur Zeit folgende Methode:
Ich mache ein "richtiges" update bei einem Testforum (alle Foren bestehen mehr oder weniger aus einem "fertig Image" welches ich erstellt hab, sprich sie sind alle gleich), teste ob alles funktioniert und wenn ja, dann nehme ich die geänderten Datein sowie die database_update.php und lade die in jedes einzelne Forum hoch, rufe einmal kurz http://meinedomain.de/forum1/install/da ... update.php auf und lösche wieder den install Ordner.
Und das ganze mache ich für jedes der Foren, was auf dauer wie ihr euch sicherlich vorstellen könnt ziemlich mühselig ist.

Deswegen suche ich ein Script, was folgendes kann:

Meine FTP Strucktur sieht wie folgt aus:
htdocs (also das root verzeichniss des Webverzeichnisses)
in diesem htdocs Ordner sind ~50 Foren in folgender Strucktur:
/forum1/
/forum2/
/forum3/
etc.

Dann würde ich noch einen Ordner namens /update/ im Web-rootverzeichniss anlegen, wo ich die geänderten Datein vom Backup sowie die /install/database_update.php hinlege.

Das Script sollte dann den Inhalt vom /update/ Ordner in jedes der einzelnen Foren kopieren, die database_update.php aufrufen und dann wieder jeden /install/ Ordner im Forum löschen.


Ich hoffe ich habe verständlich ausgedrückt was ich möchte =)

Falls niemans soetwas bereits im Einsatz hat, werde ich das ganze wohl mal in der Jobbörse posten.


Grüße

Verfasst: 17.12.2008 21:48
von gn#36
Wie einfach du dir sowas machen kannst hängt sehr davon ab wie viel Zugriff du auf deinen Server hast, recht einfach automatisieren kann man zumindest den Dateiupload z.B. per Shellskript. Im Prinzip kannst du so ein Skript natürlich auch auf deinem PC ausführen und das Skript dann FTP Befehle ausführen lassen (so mache ich das z.B. im Moment, das setzt aber ein Linux Betriebssystem voraus oder einen Windows Interpreter für bash inklusive des benötigten Kommandozeilen FTP Programms (ich nutze nicht das standard ftp Programm). Außerdem nutzt das System SVN (legt eine lokale Kopie an und schaut gewissermaßen im Log welche Dateien sich geändert haben und läd die dann hoch). Das kann man natürlich so umbauen dass das Skript die Dateien an 50 verschiedene Stellen hochläd. Anschließend läd man dann noch 50 verschiedene URLs per wget oder so und fertig.

Am einfachsten wird es dann, wenn du ein SVN System oder ähnliches einsetzt und deinen eigenen (v)Root hast. Dann brauchst du nur noch ein kleines Skript das nacheinander in alle Ordner geht und svn update ausführt und dann per wget o.ä. die URLs aufruft (und den Output nach /dev/null ins Nirvana verschwinden lässt).

Verfasst: 17.12.2008 21:59
von piero
nicht weiter schwierig, mach doch einfach ne schleife, in der du alles erledigst...
die database_update.php mit [php:fsockopen] aufrufen...

Code: Alles auswählen

<?php
//datei sollte im hauptverzeichnis sein...

$source = 'update'; //pfad zu den zu kopierenden dateien
$dest = 'forum'; // pfad zum foren hauptverzeichnis (ohne zahl hintendran)

// hier kommen noch 2 funktionen hin... (siehe (*1) und (*2) )


for($i = 1; $i <= 50; $i++) {

// dateien rekursiv kopieren (*1)
copyFolder($source, $dest . $i, null, true) ? null: print('Fehler beim kopieren der Dateien.');

//nun die database_update.php aufrufen....
$fp = fsockopen("deinedomain.tld", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET /forum$i/install/database_update.php HTTP/1.1\r\n";
    $out .= "Host: deinedomain.tld\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    fclose($fp);
}

// install-verzeichnis löschen... (*2)
$del = $dest.$i.'/install';
switch(rec_rmdir($del)) {
case -1:
echo "Fehler beim löschen: $del ist kein Verzeichnis";
break;
case -2:
echo "Unbekannter Fehler beim Löschen";
break;
case -3:
echo "Ein Eintrag eines Verzeichnisses ist keine Datei, kein Verzeichnis und kein Link.";
break;
}

}
?>
(*1): die funktion copyFolder() von hier kopieren und ins script einbinden
(*2): die funktion rec_dir() von hier kopieren und ins script einbinden


der code ist nicht getestet, also bitte vorher ein datenbankbackup machen ;) (wenn dus nicht schon machst^^)

Verfasst: 17.12.2008 22:04
von Lucan
Hallo, danke euch erstmal vielmals.
Werde das Script mal testen bzw mir das ganze angucken, hab aber grade zu wenig Zeit dafür und sowieso nicht wirklich ahnung von php.


Laufen tut das ganze auf nem VPS mit debian etch.
Ab Freitag allerdings auf nem Leistungsstärkeren RootDS.
Sprich root zugang ist vorhanden =)



Grüße

Verfasst: 17.12.2008 22:48
von gn#36
In dem Fall empfehle ich dir wirklich einen Blick auf SVN zu werfen. Damit kannst du dann im Prinzip gleich alles auf einmal automatisieren wenn du willst (inklusive Upload von deinem PC auf den Server), wobei ich empfehlen würde weiterhin nur ein Shell Skript zu nutzen (mit SVN ist das in ein paar Minuten geschrieben).

Dafür musst du aber einen SVN Server auf deinem Server installieren.

Verfasst: 17.12.2008 22:51
von Lucan
Danke dir, werd mich da mal einlesen.

Falls ich nicht weiter komme und/oder was nicht genau verstehe bin ich einfach so frei und melde mich hier wieder =)


Grüße