PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : phpBB-Tags säubern


Spenser
31.03.2006, 19:04
Hier im Forum gabs mal einen Tipp zum säubern von phpBB-Tags nach dem Schema .
Leider kann ich das nicht mehr finden.
Hat jemand den Link für mich?

StGaensler
31.03.2006, 19:39
Ich kenne nur die Möglichkeit, Impex zu modifizieren, sodass diese Tags gesäubert werden, aber dafür ist es schon zu spät, oder? (Edit: Thread gefunden: 20885)

Das Problem ist, dass ich keine Möglichkeit kenne, das mit einem SQL-Query zu erledigen, denn dann bräuchte man Wildcards oder einen Regex-Ausdruck.

Viele Grüße,
Stefan

Spenser
31.03.2006, 19:41
Ich kenne nur die Möglichkeit, Impex zu modifizieren, sodass diese Tags gesäubert werden, aber dafür ist es schon zu spät, oder?

Das Problem ist, dass ich keine Möglichkeit kenne, das mit einem SQL-Query zu erledigen, denn dann bräuchte man Wildcards oder einen Regex-Ausdruck.

Viele Grüße,
Stefan
Ja, leider schon zu spät.

StGaensler
31.03.2006, 20:21
Hier mal vollkommen experimental ein kleines Script (in Anlehnung hieran (http://www.vbulletin-germany.com/forum/showpost.php?p=139118&postcount=4)).
Mache davor unbedingt ein Datenbank-Backup, und kontrolliere danach (am Besten gleich nach dem ersten Durchlauf des Scripts), ob es auch korrekt arbeitet. Es ersetzt [img:(beliebig viele Zahlen)] durch [img], und löscht ganz am Ende den Post-Cache. Ich habe es ein wenig kommentiert, damit man weiß, was welche Zeile macht.<?php

require_once('./global.php');

# führe Query aus, um alle Beiträge mit dem Tag zu finden
$result = $db->query_read("SELECT postid, pagetext FROM " . TABLE_PREFIX . "post WHERE pagetext LIKE '%[img:%'");

while ($dat = $db->fetch_array($result)){
# ersetze den Tag
$db->query_write('UPDATE ' . TABLE_PREFIX . 'post SET pagetext = \''. preg_replace("#\[img:[0-9]+\]#i","[img]",$dat['pagetext']) .'\' WHERE postid = ' . $dat['postid']);
# gib aus, welcher Beitrag bearbeitet wurde
echo 'Beitrag mit der ID '.$dat['postid'].' bearbeitet.<br />';
# sende den Text zum Browser des Clients (damit beim Client nicht nur die Fehlermeldung der Zeitüberschreitung ankommt)
flush();
}

# lösche den Post-Cache, damit die Änderungen gleich sichtbar werden
$db->query_write('TRUNCATE TABLE ' . TABLE_PREFIX . 'post_parsed;');
# sage dem User, dass wir fertig sind
echo 'Script erfolgreich ausgeführt.';

?>Speichere das Script, und rufe es im Browser oft auf, bis ganz am Ende die Zeile "Script erfolgreich ausgeführt." erscheint. Bei jedem Durchlauf sollten andere Beitrag-IDs im Browser erscheinen.
Auf meinem Test-Board hat es mit 4 Beiträgen ganz gut geklappt - da bin ich aber verständlicherweise nicht an das Limit der max_execution_time gestoßen.

Viele Grüße,
Stefan

Spenser
31.03.2006, 21:04
Super!
Danke!

Ich habs mittlerweile anders gemacht:
Die betreffenden Datensätze selektiert und exportiert, dann im vi geöffnet und mittels
:%s/list[a-z0-9:]*\]/list\]/g
ersetzt.

StGaensler
31.03.2006, 21:17
Ja gut, so geht es auch :)

Dann muss das Script irgendwann anders getestet werden :)

Viele Grüße,
Stefan