Andreas Späth
Erfahrenes Mitglied
Hallo ihr Freunde von PHP,
wer mich kennt weis dass ich mit PHP irgendwie auf Kriegsfuß stehe, und zwar etwas PHP kann, aber nicht wirklich den Durchblick hab.
Und ich hoffe erstmal dassich sowas hier überhaupt posten/fragen darf, falls nicht werd ich die Steinigung wie ein Mann ohne Augenbinde über mich ergehen lassen
Ich habe folgendes Script, welches in einer Datenbank eines phpBB die bbcode_uids wiederherstellen soll.
Hier erstmal das Script
Ich versteh zum Großteil nicht wirklich viel von dem was da passiert, oder besser gesagt ich hab keine Ahnung wie ich dieses Ding dazu bring den Server nicht den Heldentot sterben zu lassen.
Gibt es eine möglichkeit dieses Script in irgendeiner Art einzuschränken, so dass es diese "Endlosschleife" zB nur 100 mal durchführt, und dann aufhört ?
Oder generell ein Weg das Serverschonender zu machen, zweimal den Apache abschiesen hat mir nämlich gereicht, auch wenn es ansonsten zu funktionieren scheint.
Ich wäre wirklich unheimlich dankbar wenn mir da Jemand helfen könnte, weil bei 84.000 Postings im Forum für jedes die bbcode_uid per Hand wiederstelen..
wer mich kennt weis dass ich mit PHP irgendwie auf Kriegsfuß stehe, und zwar etwas PHP kann, aber nicht wirklich den Durchblick hab.
Und ich hoffe erstmal dassich sowas hier überhaupt posten/fragen darf, falls nicht werd ich die Steinigung wie ein Mann ohne Augenbinde über mich ergehen lassen
Ich habe folgendes Script, welches in einer Datenbank eines phpBB die bbcode_uids wiederherstellen soll.
Hier erstmal das Script
PHP:
<?php
##
## ACHTUNG! Vor der Nutzung unbedingt ein Datenbankbackup machen
## Der Author übernimmt keine Haftung für etwaige Schäden am Board
## bei Nutzung dieses Scripts!
##
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . '/includes/bbcode.'.$phpEx);
//
// Set page ID for session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
// Erste Message ohne bbcode_uid suchen
$sql = "SELECT post_id, post_text FROM " . POSTS_TEXT_TABLE . "
WHERE bbcode_uid = ''
ORDER BY post_id ASC
LIMIT 1";
if ( !$result= $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Konnte erste Message ohne bbcode_uid's nicht holen", '', __LINE__, __FILE__, $sql);
}
if ( !$row = $db->sql_fetchrow($result) )
{
message_die(GENERAL_ERROR, "Konnte erste Message ohne bbcode_uid's nicht holen", '', __LINE__, __FILE__, $sql);
}
prep_message($row['post_id'], $row['post_text']);
// Alles fertig
message_die(GENERAL_MESSAGE, "Alle Messages verarbeitet.");
// Rekursive BBCode_uid Erzeuger-Funktion
function prep_message($post_id, $message)
{
global $db;
// Möglicherweise vorhandene uid's aus der Message löschen.
$message = preg_replace("#\[(.*?)(:.{10}(.*?))?\]#", "[\\1\\3]", $message);
// Zufällige BBCode_uid erzeugen
$bbcode_uid = make_bbcode_uid();
// Text des Postings parsen
$message = addslashes(bbencode_first_pass($message, $bbcode_uid));
// Den Eintrag des Postings in der DB updaten
$sql = "UPDATE " . POSTS_TEXT_TABLE . "
SET post_text = '$message', bbcode_uid = '$bbcode_uid'
WHERE post_id = $post_id";
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Updaten der Message fehlgeschlagen", '', __LINE__, __FILE__, $sql);
}
// Nächste Message ohne bbcode_uid suchen
unset ($row);
$sql = "SELECT post_id, post_text FROM " . POSTS_TEXT_TABLE . "
WHERE bbcode_uid = ''
ORDER BY post_id ASC
LIMIT 1";
if ( !$result= $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Konnte nächste Message ohne bbcode_uid's nicht holen", '', __LINE__, __FILE__, $sql);
}
if ( !$row = $db->sql_fetchrow($result) )
{
return;
}
if ( isset($row['post_id']) )
{
// Nächste Rekursion angehen
prep_message($row['post_id'], $row['post_text']);
}
return;
}
Ich versteh zum Großteil nicht wirklich viel von dem was da passiert, oder besser gesagt ich hab keine Ahnung wie ich dieses Ding dazu bring den Server nicht den Heldentot sterben zu lassen.
Gibt es eine möglichkeit dieses Script in irgendeiner Art einzuschränken, so dass es diese "Endlosschleife" zB nur 100 mal durchführt, und dann aufhört ?
Oder generell ein Weg das Serverschonender zu machen, zweimal den Apache abschiesen hat mir nämlich gereicht, auch wenn es ansonsten zu funktionieren scheint.
Ich wäre wirklich unheimlich dankbar wenn mir da Jemand helfen könnte, weil bei 84.000 Postings im Forum für jedes die bbcode_uid per Hand wiederstelen..