[2.0.x] Tweaks for large forums

The 2.0.x discussion forum has been locked; this will remain read-only. The 3.0.x discussion forum has been renamed phpBB Discussion.
Locked
dbee
Registered User
Posts: 27
Joined: Wed Apr 06, 2005 5:23 am

Post by dbee »

wow ... this is one long post ... I've just finished reading it and I've found it extremely useful. Kudos to everyone involved -especially lanzer who If you'll permit me to say - has rasied the bar for everyone here.

I do have a question though - pls move the thread if it's considered too off-topic :-) It concerns tweaking forums, but from perhaps - a different angle.

How would you go about designing a setup that would potentially host up to 1000 phpbb forums on the same server or servers ?
Running perhaps, simultaneously, although that would depend to a larger extent on the hardware config and software tweaking of course

The suggestions on this forum were great ...

indexing posts,
overhauling search,
running a mysql/php cacher,
installing worker threads and mod_deflate on apache,
reworking mysql.cnf and apache.conf,
switching between db tables Innodb, MyIASM, Heap

I'm probably missing a ton here, so pls feel free to add to the list...

This system however would take an input string - stringcmp it to /var/lib/mysql (edit: I'll probably be running linux ubuntu or maybe gentoo) and then if it wasn't there already, it would create a new database/forum under that string (or something like it !).

What would immediately come to mind would be running a RAID 0 config, with x number of tables spread over five SATA drives. Each partition would contain a certain grouping of the mysql tables on optimized drive formats eg. put all the user tables on hda1, user_posts on hda2 etc, sessions on their own heap etc.... and distributing these prudently to get a good balance of Read/Write queries per drive/partition. I hope I'm making sense here :D .
I rate my mysql/php skills as fair, and I sure would appreciate getting the views of the members of this board/thread.

I'm interested in any aspects of running a server of 'parallel forums' ... for want of a better description. I hope too that when/if I get it all up and running I'll be able to post back here with various tests/results for those who'd be interested to know about it.

Thanks,
dbee :D
Lady Serena
Registered User
Posts: 76
Joined: Thu May 26, 2005 12:31 am
Location: Smithsburg, MD
Contact:

Post by Lady Serena »

Welcome, dbee

While Varus Online simply isn't large enough to warrant expanding to multiple database servers, we will be introducing a new feature by the end of the year (actually, two new features released simultaneously). One of the new upcoming features is Varus Clans. Varus Clans will be like a separate forum from the main forum on the site, using the same database (biggest reason - members and sessions need to be consistent throughout the site). If there's anything you need to know about the implementation of various features on Varus Online, feel free to ask.

Gaia Online does have multiple servers, and Gaia Guilds seem to run as a separate forum, but since I don't know the specifics of their implementation, I am unable to tell you about it. The only problem I know of with Gaia Guilds, is the sessions management does seem to be ported properly. One can post in a guild, but according to the guild forums, everybody's always offline, when the main Gaia forum shows them as online. For any real details, you'd have to ask Lanzer or wait until he comes on phpBB.com and sees your post.
Varus Online :: Discover Imagination
http://www.varusonline.com/
Lady Serena
Registered User
Posts: 76
Joined: Thu May 26, 2005 12:31 am
Location: Smithsburg, MD
Contact:

Post by Lady Serena »

Lanzer, one quick question, are you still using the replacement code for generate_pagination() that was posted on page 2 or has that been replaced more recently? And I hope this won't break anything related to the Profile Control Panel

Edited by moderator - Removed size 1 text ... - Techie-Micheal
Varus Online :: Discover Imagination
http://www.varusonline.com/
NBishop
Registered User
Posts: 119
Joined: Sun Feb 13, 2005 9:11 am
Location: Johnstown, PA (USA)
Name: Nate
Contact:

Post by NBishop »

Lady Serena wrote: Lanzer, one quick question, are you still using the replacement code for generate_pagination() that was posted on page 2 or has that been replaced more recently? And I hope this won't break anything related to the Profile Control Panel


On the forums of GAIA there was a point in I believe Lanzer's Work Diary, or perhaps even Jakobo's Journal where they made note after the Forum Re-coding that Pagination was one of the thing in which was relatively re-done (in complete?) I think.

Judging how the Pagination was originally, and how you mentioned with the PCP, its most likely changed from what he originally posted, but I would imagine that it wouldn't be to hard to implement in use with the PCP?
America's ArmysT Projects
- nate / synapt -
Lady Serena
Registered User
Posts: 76
Joined: Thu May 26, 2005 12:31 am
Location: Smithsburg, MD
Contact:

Post by Lady Serena »

NBishop wrote:
Lady Serena wrote:Lanzer, one quick question, are you still using the replacement code for generate_pagination() that was posted on page 2 or has that been replaced more recently? And I hope this won't break anything related to the Profile Control Panel


On the forums of GAIA there was a point in I believe Lanzer's Work Diary, or perhaps even Jakobo's Journal where they made note after the Forum Re-coding that Pagination was one of the thing in which was relatively re-done (in complete?) I think.

Judging how the Pagination was originally, and how you mentioned with the PCP, its most likely changed from what he originally posted, but I would imagine that it wouldn't be to hard to implement in use with the PCP?

Just a little bit of code I'd have to re-implement into it. Not much, just a few additions here and there. :o
Varus Online :: Discover Imagination
http://www.varusonline.com/
lanzer
Registered User
Posts: 152
Joined: Wed Oct 10, 2001 10:00 am
Contact:

Late night chatter

Post by lanzer »

younghistorians> Yes, we had considered the Google search appliance, and unfortunately the cheaper model cannot handle our traffic load, and the high end model is out of our budget.

XxDawgxX> Thank you for your flattering post. ^^; I just tried to carry the same spirit of what everyone in the community share, and that is the spirit of giving. It makes a good break between the insane work schedules. :)

dbee> Building a site to host a thousand forums is not far fetched. It's all about knowing which components expand at what rate and know which unique DB field is used to determine how each component should be split into their "buckets" for scaling horizontally. Though right off the bat the idea would involve at least a series of web servers, a load balancer, and at least 5 database servers. Due to the nature of how information is stored and fetched, it is extremely inefficient to store all different types of data in the same database, and expect a faster server to handle all load.

Do note that building a large site is about scalability, not speed. It's about efficiency of hardware, not how powerful or fast they are. It means a cheap server handling short queries, one handling high volume queries, and one handling seek/CPU intensive queries will out perofrm any single box no matter what kind of CPU and drive arrays installed. (The one single fast DB server will cost more too)

I think I went off a tangent here ^^; A lot of free services are made to host sites for free until they exceed a certain bandwidth, and in that case, there should be little worry for scalability problems, just slap on more servers for hosting individual sites.

Lady Serena> Yes, our guild system was just a copy of the forum code with additional features similar to the group features but in its own management database. (easy to implement, tough to maintain) Users and sessions are the same, but they don't show online users properly because of a bug. The guild re-release this week will solve that problem for sure. The new code share the same framework and library as the new forum code.

On Gaia, pagination had been re-written a lot of times, but the general concept stayed pretty much the same. The core concept remained pretty consistant.

Hope I didn't miss much of the subjects mentioned. ^^;

-Derek
Lady Serena
Registered User
Posts: 76
Joined: Thu May 26, 2005 12:31 am
Location: Smithsburg, MD
Contact:

Post by Lady Serena »

Yes Lanzer, you hit all the subjects covered.

Today, I've hit a limit with Ptiirhik's Profile Control Panel modification. After installing the Varus Online Alerts System and the random event generator, the Profile Control Panel (/forum/profile.php) broke. It does not allow one to click on any of its tabs anymore. I've had to push my own profile system from planning to development today, as there are now so many proprietary features on the system, it introduced a conflict I had never thought of occurring. It was bound to happen sooner or later. :roll:

I'm also starting to get word search queries taking longer than my slow-query threshold, about ~990 to ~1010ms. Search is nice, but such a small business as Varus Online may not be able to support such a luxury much longer.

~Jessica
Varus Online :: Discover Imagination
http://www.varusonline.com/
User avatar
xkevinx
Registered User
Posts: 132
Joined: Tue Nov 05, 2002 8:45 pm
Location: California
Contact:

Post by xkevinx »

Hey Lanzer think we could get some new pictures of the servers teehe. Would be cool to see what we are on 24/7 lol. Last time we had pictes was in the old DC I think. But anyway it seems you dont go down to the dc as much as you used to well according to your diary anyway's.
Do you Believe?
Disturbed One
Registered User
Posts: 129
Joined: Sun Apr 03, 2005 12:31 am

Post by Disturbed One »

Would somebody be able to scrounge all the usefule changes in this topic and put it into a MOD template? I am a little confused because I don't know what to do on most parts.
Lady Serena
Registered User
Posts: 76
Joined: Thu May 26, 2005 12:31 am
Location: Smithsburg, MD
Contact:

Post by Lady Serena »

Disturbed One,
I actually checked the code for Varus Online and found that many of Lanzer's performance tweaks are already in-place. You can try to look through this thread and get all of them and apply them yourself, or you can install the Profile Control Panel (which has a lot of performance tweaks similar to Lanzer's). Its an excellent modification that also allows for easier administration over members (and comes with a control image for secure registering).
Varus Online :: Discover Imagination
http://www.varusonline.com/
da_badtz_one
Registered User
Posts: 376
Joined: Thu Jan 29, 2004 8:25 pm

Post by da_badtz_one »

There seems to be a problem with this coding.

Code: Select all

$p_array = array();
$sql = "SELECT p.post_id FROM " . POSTS_TABLE . " p WHERE p.topic_id = $topic_id $limit_posts_time LIMIT $start, " . $board_config['posts_per_page'];
if ( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, "Could not obtain post index information.", '', __LINE__, __FILE__, $sql);
}
while (list($p_id) = $db->sql_fetchrow($result)) {
    $p_array[] = $p_id;
}
$post_index = implode(",",$p_array); 
The problem comes in when the large query of

Code: Select all

$sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, u.user_warnings, u.user_level, p.*,  pt.post_text, pt.post_subject, pt.bbcode_uid,t.topic_poster
   	FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt
   	WHERE p.post_id in ($post_index)
      	AND pt.post_id = p.post_id
      	AND u.user_id = p.poster_id
   	ORDER BY p.post_time $post_time_order"; 
only gets ,,,,,, from $post_index :?

So I get this error:

Code: Select all

Could not obtain post/user information.

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',,,,,,,) AND pt.post_id = p.post_id AND u.user_id = p.poster_id ' at line 3

SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, u.user_warnings, u.user_level, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid,t.topic_poster FROM phpbb_posts p, phpbb_users u, phpbb_posts_text pt WHERE p.post_id in (,,,,,,,,) AND pt.post_id = p.post_id AND u.user_id = p.poster_id ORDER BY p.post_time ASC

Line : 507
File : viewtopic.php
 
Could someone post the right coding to get a correct $post_index?
Van Zant
Registered User
Posts: 154
Joined: Tue Aug 16, 2005 3:15 am

Post by Van Zant »

ok, i'm just very confused by all of this,... (yes i did read all of it)

what do i modify? :oops: my board constantly runs out of it's CPU quota..
Check out my forum: www.gossiprocks.com/forum/
User avatar
KobYY
Registered User
Posts: 46
Joined: Thu Jun 23, 2005 8:50 pm

Post by KobYY »

lanzer wrote: I'm very glad that there are people who benefitted from the tweaks. :D I was wondering for a moment if anyone would read this, so I didn't add any more codes/tweaks.

Anyways, here's the class that I snipped off the phpbb 2.2.0 CVS file. I'm glad that it's nice and portable now so we can try out different people approach in solving search table problems. Anyone can slip this code at the end of the functions_search.php file (before the "?>" line) and use it on version 2.0.x. But you must alter the database to have it working properly. The necessary changes are mentioned below.

I proofed read this once. Hope there isn't any of my own variables in there.

Code: Select all

// Parses a given message and updates/maintains the fulltext tables
class fulltext_search
{
	function split_search_words(&$text)
	{
		global $user, $phpbb_root_path;

        // This is where I specified the min and max for words to be added to the wordsearch table.
        // You can actually make these entries in the board_config table and make $board_config global
        $config = array('min_search_chars' => 3, 'max_search_chars' => 15);

		static $drop_char_match, $drop_char_replace, $stopwords, $synonyms;

		if (empty($drop_char_match))
		{
			$drop_char_match =   array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '-', '~', '+', '.', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!', '*');
			$drop_char_replace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', '',  '',   ' ', ' ', ' ', ' ', '',  ' ', ' ', '',  ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '' ,  ' ', ' ', ' ', ' ',  ' ', ' ', ' ');
            // If you're not running an english board, change the following lines to match the language!
			$stopwords = @file($phpbb_root_path.'language/lang_english/search_stopwords.txt');
			$synonyms = @file($phpbb_root_path.'language/lang_english/search_synonyms.txt');
		}

		$match = array();
		// New lines, carriage returns
		$match[] = "#[\n\r]+#";
		// NCRs like & etc.
		$match[] = '#&[\#a-z0-9]+?;#i';
		// URL's
		$match[] = '#\b[\w]+:\/\/[a-z0-9\.\-]+(\/[a-z0-9\?\.%_\-\+=&\/]+)?#';
		// quoted text
		$match[] = '#\[quote:[a-z0-9]{10,}(=.*?)?\].*?\[\/quote:[a-z0-9]{10,}\]#';
        // BBcode
		$match[] = '#\[img:[a-z0-9]{10,}\].*?\[\/img:[a-z0-9]{10,}\]#';
		$match[] = '#\[\/?url(=.*?)?\]#';
		$match[] = '#\[\/?[a-z\*=\+\-]+(\:?[0-9a-z]+)?:[a-z0-9]{10,}(\:[a-z0-9]+)?=?.*?\]#';
		$match[] = '#\b([a-z0-9]{1,' . $config['min_search_chars'] . '}|[a-z0-9]{' . $config['max_search_chars'] . ',})\b#is';

		$text = preg_replace($match, ' ', ' ' . strtolower($text) . ' ');

		// Filter out non-alphabetical chars
		$text = str_replace($drop_char_match, $drop_char_replace, $text);

		if (!empty($stopwords))
		{
            $stopword_list = array();
            foreach ($stopwords as $st) $stopword_list[] = trim($st);
		}

		if (!empty($synonyms))
		{
			foreach ($synonyms as $temp_line)
			{
				list($replace_synonym, $match_synonym) = preg_split('/[\t\s]+/', trim(strtolower($temp_line)));
					$text =  preg_replace('#\b' . $match_synonym . '\b#', ' ' . $replace_synonym . ' ', $text);
			}
		}

		preg_match_all('#\b([\w]+)\b#', $text, $split_entries);

        return array_diff(array_unique($split_entries[1]), $stopword_list);
	}

	function add(&$mode, &$post_id, &$message, &$subject)
	{
		global $board_config, $db;

		$split_text = $this->split_search_words($message);
		$split_title = ($subject) ? $this->split_search_words($subject) : array();
        // Catalog first 80 words only.  Feel free to change 80 to a larger value if you want to index more words
        if (sizeof($split_text) > 80) {
            $split_text = array_splice($split_text,0,80);
        }
		$words = array();
		if ($mode == 'edit' || $mode == 'editpost')
		{
			$sql = 'SELECT w.word_id, w.word_text, m.title_match
				FROM ' . SEARCH_WORD_TABLE . ' w, ' . SEARCH_MATCH_TABLE . " m
				WHERE m.post_id = $post_id 
					AND w.word_id = m.word_id";
			$result = $db->sql_query($sql);

			$cur_words = array();
			while ($row = $db->sql_fetchrow($result))
			{
				$which = ($row['title_match']) ? 'title' : 'post';
				$cur_words[$which][$row['word_text']] = $row['word_id'];
			}
			$db->sql_freeresult($result);

            if ( count($cur_words) ) {
    			$words['add']['post'] = array_diff($split_text, array_keys($cur_words['post']));
    			$words['add']['title'] = array_diff($split_title, array_keys($cur_words['title']));
    			$words['del']['post'] = array_diff(array_keys($cur_words['post']), $split_text);
    			$words['del']['title'] = array_diff(array_keys($cur_words['title']), $split_title);
            } else {
                $words['add']['post'] = $split_text;
                $words['add']['title'] = $split_title;
                $words['del']['post'] = array();
                $words['del']['title'] = array();
            }
		}
		else
		{
			$words['add']['post'] = $split_text;
			$words['add']['title'] = $split_title;
			$words['del']['post'] = array();
			$words['del']['title'] = array();
		}
		unset($split_text);
		unset($split_title);
		// Get unique words from the above arrays
		$unique_add_words = array_unique(array_merge($words['add']['post'], $words['add']['title']));

		// We now have unique arrays of all words to be added and removed and
		// individual arrays of added and removed words for text and title. What
		// we need to do now is add the new words (if they don't already exist)
		// and then add (or remove) matches between the words and this post
		if (sizeof($unique_add_words) >= 20)
		{
            foreach ($unique_add_words as $pickword) {
                if (! preg_match('/[0-9]/',$pickword) ) {
                    if (! (substr_count($pickword,substr($pickword,0,1)) > 4 || substr_count($pickword,substr($pickword,1,1)) > 4)) $new_unique_add_words[] = $pickword;
                }
            }
            if (sizeof($new_unique_add_words)) {
                $unique_add_words = $new_unique_add_words;
            }
			$sql = 'SELECT word_id, word_text FROM ' . SEARCH_WORD_TABLE . ' WHERE word_text IN (' . implode(', ', preg_replace('#^(.*)$#', '\'\1\'', $unique_add_words)) . ")";
			$result = $db->sql_query($sql);

			$word_ids = array();
			while ($row = $db->sql_fetchrow($result))
			{
				$word_ids[$row['word_text']] = $row['word_id'];
			}
			$db->sql_freeresult($result);

			$new_words = array_diff($unique_add_words, array_keys($word_ids));
			unset($unique_add_words);

			if (sizeof($new_words))
			{
				switch (SQL_LAYER)
				{
					case 'mysql':
					case 'mysql4':
						$sql = 'INSERT INTO ' . SEARCH_WORD_TABLE . " (word_text, post_id) VALUES ('" . implode("',$post_id),('", $new_words ) ."',$post_id)";
						$db->sql_query($sql);
						break;

					case 'mssql':
					case 'sqlite':
						$sql = 'INSERT INTO ' . SEARCH_WORD_TABLE . ' (word_text) ' . implode(' UNION ALL ', preg_replace('#^(.*)$#', "SELECT '\\1'",  $new_words));
						$db->sql_query($sql);
						break;

					default:
						foreach ($new_words as $word)
						{
							$sql = 'INSERT INTO ' . SEARCH_WORD_TABLE . " (word_text) VALUES ('$word')";
							$db->sql_query($sql);
						}
						break;
				}
			}
			unset($new_words);

            if (sizeof($word_ids) && $post_id) {
                $sql_text = implode(",",$word_ids);
                $sql = " UPDATE " . SEARCH_WORD_TABLE . " SET word_common = word_common + 1 , post_id = " . $post_id . " WHERE word_id IN (" . $sql_text . ")";
                $db->sql_query($sql);
            }
		}


		foreach ($words['del'] as $word_in => $word_ary)
		{
			$title_match = ($word_in == 'title') ? 1 : 0;

			if (sizeof($word_ary))
			{
				$sql_in = array();
				foreach ($word_ary as $word)
				{
					$sql_in[] = $cur_words[$word_in][$word];
				}

				$sql = 'DELETE FROM ' . SEARCH_MATCH_TABLE . ' 
					WHERE word_id IN (' . implode(', ', $sql_in) . ') 
						AND post_id = ' . intval($post_id) . " 
						AND title_match = $title_match";
				$db->sql_query($sql);
				unset($sql_in);
			}
		}

		foreach ($words['add'] as $word_in => $word_ary)
		{
			$title_match = ($word_in == 'title') ? 1 : 0;

			if (sizeof($word_ary))
			{
				$sql = 'INSERT INTO ' . SEARCH_MATCH_TABLE . " (post_id, word_id, title_match) 
					SELECT $post_id, word_id, $title_match 
					FROM " . SEARCH_WORD_TABLE . ' 
					WHERE word_text IN (' . implode(', ', preg_replace('#^(.*)$#', '\'\1\'', $word_ary)) . ')';
				$db->sql_query($sql);
			}
		}

		unset($words);

        return true;
	}

}
The second change is on the functions_post.php file.

First comment out the following line:

Code: Select all

        add_search_words('single', $post_id, stripslashes($post_message), stripslashes($post_subject));
And replace with:

Code: Select all

        $search = new fulltext_search();
        $result = $search->add($mode, $post_id, stripslashes($post_message), stripslashes($post_subject));
Though instead of just two lines above, what I have instead is something to filter out even more posts to be added to the word search table:

Code: Select all

    $start_search = TRUE;
    if ($mode == 'newtopic') {
        // Note that I'm skipping wordmatch on the chatter and the test forums
        // if ($forum_id == 23 || $forum_id == 8 || $forum_id == 39) $start_search = FALSE;

        // I personally don't like topics with only one word as the subject since they're usually spam
        $post_subject = trim($post_subject);
        if (! preg_match("/ /",$post_subject)) $start_search = FALSE;
    } else {
        $sql2 = "SELECT topic_replies, topic_status, topic_title, forum_id  FROM " . TOPICS_TABLE . " WHERE topic_id = " . $topic_id;
        $result2 = $db->sql_query($sql2);
        list($topic_replies, $topic_status, $topic_title, $fid) = $db->sql_fetchrow($result2);
        // $fid = forum_id for this reply
        // Note that I'm skipping wordmatch on the chatter and the test forums 
        // if ($fid == 23 || $fid == 8 || $fid == 39) $start_search = FALSE;

        // Here I stop indexing posts when the reply starts to span into the second page.  It's here because we have a lot of huge role playing threads.
        // if ($topic_replies > 20) $start_search = FALSE;
        
        // I personally don't like topics with only one word as the subject since they're usually spam
        if (! preg_match("/ /",$topic_title)) $start_search = FALSE;

    }
    
    if ($start_search == TRUE) {
        $search = new fulltext_search();
        $result = $search->add($mode, $post_id, stripslashes($post_message), stripslashes($post_subject));
    } 
Lastly, you need to pop open MySQL and type in the following:

Code: Select all

ALTER TABLE phpbb_search_wordlist ADD post_id MEDIUMINT UNSIGNED not null;
ALTER TABLE phpbb_search_wordlist CHANGE word_common word_common MEDIUMINT (8) UNSIGNED DEFAULT '0' not null;
If you're starting new, you can just use this instead:

Code: Select all

CREATE TABLE phpbb_search_wordlist (
   word_text varchar(15) binary NOT NULL,
   word_id mediumint(8) unsigned NOT NULL auto_increment,
   word_common mediumint(8) unsigned DEFAULT '0' NOT NULL,
   post_id mediumint(8) unsigned DEFAULT '0' NOT NULL,
   PRIMARY KEY (word_text),
   KEY word_id (word_id)
);
Since I would only be pruning weekly, I'd rather save the RAM by not specifying post_id as an index.

I actually haven't written anything to prune the searchword tables yet. I'll post my purning scripts once I have them installed and tested.

PS - It's been about two weeks and I currently have a wordmatch table of about 1M entries, and a wordlist table with 40,000 words. Considering that we have about 120,000 messages a day things are doing okay.

noob here :) where to add this script? in the end of functions_search.php ? or to replace functions_search.php with this code?
User avatar
KobYY
Registered User
Posts: 46
Joined: Thu Jun 23, 2005 8:50 pm

Post by KobYY »

Please people write which tweak should we use and explain it also for nebie :) or or if you can put in one file!!!!!! :cry:
NeoThermic
Security Consultant
Posts: 2141
Joined: Thu Dec 25, 2003 1:33 am
Location: United Kingdom
Contact:

Post by NeoThermic »

KobYY wrote: Please people write which tweak should we use and explain it also for nebie :) or or if you can put in one file!!!!!! :cry:


If you're a newbie, you shouldn't be applying any of these tweaks. The tweaks can't also be made into one file, as each one does something diffrent, yet while being diffrent, some of them accomplish the same task (searching for example).

You are best getting to grips with PHP and {your database software} and then reading this *whole* thread and seeing if you can tweak as required.

NeoThermic
NeoThermic.com... a well of information. Ask me for the bit bucket so you can drink its goodness. ||新熱です
Locked

Return to “2.0.x Discussion”