From 0f712ff771c8c060d864d545eadf3f41cd3000c4 Mon Sep 17 00:00:00 2001 From: James Atkinson Date: Thu, 11 Jul 2002 18:33:29 +0000 Subject: [PATCH] Added a fix for smillies_pass function by Ashe See this topic for details: http://www.phpbb.com/phpBB/viewtopic.php?p=166905 Yeilds a very large performance increase on long topics git-svn-id: file:///svn/phpbb/branches/phpBB-2_0_0@2660 89ea8834-ac86-4346-8a33-228a782c2dd0 --- phpBB/includes/bbcode.php | 58 ++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php index fb027199f4..e308310f5c 100644 --- a/phpBB/includes/bbcode.php +++ b/phpBB/includes/bbcode.php @@ -736,42 +736,36 @@ function bbcode_array_pop(&$stack) // Smilies code ... would this be better tagged on to the end of bbcode.php? // Probably so and I'll move it before B2 // -function smilies_pass($message) -{ - global $db, $board_config; - static $smilies; +function smilies_pass($message) +{ + static $orig, $repl; - if( empty($smilies) ) - { - $sql = "SELECT code, smile_url - FROM " . SMILIES_TABLE; - if( !$result = $db->sql_query($sql) ) - { - message_die(GENERAL_ERROR, "Couldn't obtain smilies data", "", __LINE__, __FILE__, $sql); - } + if (!isset($orig)) + { + global $db, $board_config; + $orig = $repl = array(); - if( !$db->sql_numrows($result) ) - { - return $message; - } + $sql = 'SELECT code, smile_url FROM ' . SMILIES_TABLE; + if( !$result = $db->sql_query($sql) ) + { + message_die(GENERAL_ERROR, "Couldn't obtain smilies data", "", __LINE__, __FILE__, $sql); + } + $smilies = $db->sql_fetchrowset($result); - $smilies = $db->sql_fetchrowset($result); - } + usort($smilies, 'smiley_sort'); + for($i = 0; $i < count($smilies); $i++) + { + $orig[] = "/(?<=.\W|\W.|^\W)" . phpbb_preg_quote($smilies[$i]['code'], "/") . "(?=.\W|\W.|\W$)/"; + $repl[] = '' . $smilies[$i]['smile_url'] . ''; + } + } - usort($smilies, 'smiley_sort'); - for($i = 0; $i < count($smilies); $i++) - { - $orig[] = "/(?<=.\\W|\\W.|^\\W)" . phpbb_preg_quote($smilies[$i]['code'], "/") . "(?=.\\W|\\W.|\\W$)/"; - $repl[] = '' . $smilies[$i]['smile_url'] . ''; - } - - if( $i > 0 ) - { - $message = preg_replace($orig, $repl, ' ' . $message . ' '); - $message = substr($message, 1, -1); - } - - return $message; + if (count($orig)) + { + $message = preg_replace($orig, $repl, ' ' . $message . ' '); + $message = substr($message, 1, -1); + } + return $message; } function smiley_sort($a, $b)