Extreme slowness for unregistered users
This issue was patched in the SVN code. Host lookup will be configurable in future releases of Wikka 1.2.
Symptoms
For unregistered visitors the Wikka site is very slow while registered (logged-in) visitors don't have any problem. May also cause "Fatal error: Maximum execution time of 30 seconds exceeded in [path]\libs\Wakka.class.php on line 1848".Cause
By default, Wikka does a DNS name lookup for the node an unregistered user is connecting form. If the DNS lookup from the server is slow, this will result in very long response times. For logged-in users such a lookup doesn't take place, so they don't experience such slowness.Applies to
All current Wikka versions.Solution
will follow- I added an email field mandatory for anonymous user when they enter comments and got rid of the php function "gethostbyaddr" in wikka.php. Nevertheless, I didn't add it for new page creation.
- You could uncomment the gethostbyaddr() in GetUserName() in wikka.php. Everything will work but you will get the IP's of guest visitors instead of the hostnames, when they store a page, for example. This can also be a temporary solution if you're experiencing temporary troubles with the DNS servers.
-- RobinW
A patch that DrPain posted in the comments of this page that works for most Wikka versions to force it to stop checking DNS for hostnames first is to find in /libs/Wakka.class.php the section:
function GetUserName() { if ($user = $this->GetUser()) $name = $user["name"]; else if (!$name = gethostbyaddr($_SERVER["REMOTE_ADDR"])) $name = $_SERVER["REMOTE_ADDR"]; return $name; }
and change it to:
function GetUserName() { if ($user = $this->GetUser()) $name = $user["name"]; else $name = $_SERVER["REMOTE_ADDR"]; return $name; }
CategoryWorkaround
Reported on this forum:
http://www.goosee.com/puppy/sforum/simpleforum_pro.cgi?fid=07&topic_id=1111215715
function GetUserName() { if ($user = $this->GetUser()) $name = $user["name"]; else if (!$name = gethostbyaddr($_SERVER["REMOTE_ADDR"])) $name = $_SERVER["REMOTE_ADDR"]; return $name; }
To:
function GetUserName() { if ($user = $this->GetUser()) $name = $user["name"]; else $name = $_SERVER["REMOTE_ADDR"]; return $name; }
I'm not familiar with the rest of the wikka code, so I'm not sure what might break with this change, but the delays went away.
Good call. If the server where your Wiki is living happens to have slow DNS lookup, the gethostbyaddr() function will cause slowness... Looks like we need a configuration option for this so people who find DNS lookup slow on their host can just "flip a switch" to prevent this from happening.
Manually updating the base_url in wikka.config.php partialy solved the problem, but there was still extreme slowness connecting to the wiki.
The above solution applied to the new and apparently patched Wakka.class.php worked a treat. In other words, although v1.2 appears to have this patch applied, the conditional:
if ($this->config['enable_user_host_lookup'] == 1) // #240
{
$name = gethostbyaddr($ip) ? gethostbyaddr($ip) : $ip;
}
is still causing a problem four years on from the original report.
The problem isn't a Wikka problem. It's a problem with PHP's implementation of gethostbyaddr(). So the workaround is to simply set 'enable_user_host_lookup' to some value other than 1.