<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>David Hrbáč &#187; php</title>
	<atom:link href="http://www.hrbac.cz/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hrbac.cz</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Tue, 17 Jan 2012 21:43:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>DNSBL for Horde</title>
		<link>http://www.hrbac.cz/2011/01/dnsbl-for-horde/</link>
		<comments>http://www.hrbac.cz/2011/01/dnsbl-for-horde/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 09:57:46 +0000</pubDate>
		<dc:creator>David Hrbáč</dc:creator>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[horde]]></category>
		<category><![CDATA[mailing]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.hrbac.cz/?p=275</guid>
		<description><![CDATA[Here we go with a small patch to implement DNSBL for Horde. I have again used PEAR package, this time it is the Net_DNSBL, and as usually CentOS package is in my repos &#8211; http://fs12.vsb.cz/hrb33/el5/hrb/stable/i386/repoview/php-pear-Net-DNSBL.html. The first patch is the important one. We let the attacker to log in, just to make sure he/she owns [...]]]></description>
			<content:encoded><![CDATA[<p>Here we go with a small patch to implement <a href="http://en.wikipedia.org/wiki/DNSBL" target="_blank">DNSBL</a> for Horde. I have again used PEAR package, this time it is the <a href="http://pear.php.net/package/Net_DNSBL" target="_blank">Net_DNSBL</a>, and as usually CentOS package is in my repos &#8211; <a href="http://fs12.vsb.cz/hrb33/el5/hrb/stable/i386/repoview/php-pear-Net-DNSBL.html" target="_blank">http://fs12.vsb.cz/hrb33/el5/hrb/stable/i386/repoview/php-pear-Net-DNSBL.html</a>.</p>
<p>The first patch is the important one. We let the attacker to log in, just to make sure he/she owns valid stolen credentials.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">---</span> imp<span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>Auth<span style="color: #339933;">/</span>imp<span style="color: #339933;">.</span>php<span style="color: #339933;">.</span>orig   <span style="color: #cc66cc;">2011</span><span style="color: #339933;">-</span><span style="color: #208080;">01</span><span style="color: #339933;">-</span><span style="color: #208080;">05</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">21</span><span style="color: #339933;">:</span><span style="color:#800080;">05.224155622</span> <span style="color: #339933;">+</span><span style="color: #208080;">0100</span>
<span style="color: #339933;">+++</span> imp<span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>Auth<span style="color: #339933;">/</span>imp<span style="color: #339933;">.</span>php        <span style="color: #cc66cc;">2011</span><span style="color: #339933;">-</span><span style="color: #208080;">01</span><span style="color: #339933;">-</span><span style="color: #208080;">05</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">39</span><span style="color: #339933;">:</span><span style="color:#800080;">24.699438519</span> <span style="color: #339933;">+</span><span style="color: #208080;">0100</span>
<span style="color: #339933;">@@</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">146</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span> <span style="color: #339933;">+</span><span style="color: #cc66cc;">146</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">36</span> <span style="color: #339933;">@@</span>
             <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">+</span>        <span style="color: #666666; font-style: italic;"># DNSBL START
</span><span style="color: #339933;">+</span>        <span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #339933;">,</span> <span style="color: #990000;">ini_get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">':/usr/share/php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>        <span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Net/DNSBL.php'</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>        <span style="color: #000088;">$dnsbl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Net_DNSBL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>        <span style="color: #666666; font-style: italic;">#$remoteIP = '41.206.12.1';
</span><span style="color: #339933;">+</span>        <span style="color: #000088;">$remoteIP</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>        <span style="color: #000088;">$dnsbl</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setBlacklists<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
<span style="color: #339933;">+</span>                <span style="color: #0000ff;">'sbl-xbl.spamhaus.org'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>                <span style="color: #0000ff;">'bl.spamcop.net'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>                <span style="color: #0000ff;">'b.barracudacentral.org'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>                <span style="color: #0000ff;">'spam.spamrats.com'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>                <span style="color: #0000ff;">'dyna.spamrats.com'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>                <span style="color: #0000ff;">'noptr.spamrats.com'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>                <span style="color: #0000ff;">'bl.tiopan.com'</span>
<span style="color: #339933;">+</span>                <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$dnsbl</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>isListed<span style="color: #009900;">&#40;</span><span style="color: #000088;">$remoteIP</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #339933;">+</span>            <span style="color: #000088;">$data</span><span style="color: #339933;">=</span><span style="color: #000088;">$dnsbl</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getListingBls<span style="color: #009900;">&#40;</span><span style="color: #000088;">$remoteIP</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>            <span style="color: #990000;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>            <span style="color: #000088;">$entry</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;LOGIN SUCCESS FROM BLACKLISTED IP [<span style="color: #006699; font-weight: bold;">$remoteIP</span>] FOR <span style="color: #006699; font-weight: bold;">$userID</span>: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;, &quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>            Horde<span style="color: #339933;">::</span><span style="color: #004000;">logMessage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">__LINE__</span><span style="color: #339933;">,</span> PEAR_LOG_ERR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>
<span style="color: #339933;">+</span>            <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'imp'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$prefs</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #339933;">+</span>                <span style="color: #000088;">$prefs</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>cleanup<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>            <span style="color: #009900;">&#125;</span>
<span style="color: #339933;">+</span>            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>_setAuthError<span style="color: #009900;">&#40;</span>AUTH_REASON_BADLOGIN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>        <span style="color: #009900;">&#125;</span>
<span style="color: #339933;">+</span>        <span style="color: #666666; font-style: italic;"># DNSBL END
</span><span style="color: #339933;">+</span>
         <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span></pre></div></div>

<p>The second one is just to log only access from blocked IPs.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">---</span> imp<span style="color: #339933;">/</span>login<span style="color: #339933;">.</span>php<span style="color: #339933;">.</span>orig  <span style="color: #cc66cc;">2011</span><span style="color: #339933;">-</span><span style="color: #208080;">01</span><span style="color: #339933;">-</span><span style="color: #208080;">05</span> <span style="color:#800080;">09</span><span style="color: #339933;">:</span><span style="color:#800080;">08</span><span style="color: #339933;">:</span><span style="color:#800080;">44.510891298</span> <span style="color: #339933;">+</span><span style="color: #208080;">0100</span>
<span style="color: #339933;">+++</span> imp<span style="color: #339933;">/</span>login<span style="color: #339933;">.</span>php       <span style="color: #cc66cc;">2011</span><span style="color: #339933;">-</span><span style="color: #208080;">01</span><span style="color: #339933;">-</span><span style="color: #208080;">05</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">34</span><span style="color: #339933;">:</span><span style="color:#800080;">26.763968526</span> <span style="color: #339933;">+</span><span style="color: #208080;">0100</span>
<span style="color: #339933;">@@</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">449</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span> <span style="color: #339933;">+</span><span style="color: #cc66cc;">449</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">33</span> <span style="color: #339933;">@@</span>
     <span style="color: #0000ff;">'var nomenu = '</span> <span style="color: #339933;">.</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'menu'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'always'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">+</span><span style="color: #666666; font-style: italic;"># DNSBL START
</span><span style="color: #339933;">+</span><span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #339933;">,</span> <span style="color: #990000;">ini_get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">':/usr/share/php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Net/DNSBL.php'</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #000088;">$dnsbl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Net_DNSBL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #666666; font-style: italic;">#$remoteIP = '41.206.12.1';
</span><span style="color: #339933;">+</span><span style="color: #000088;">$remoteIP</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #000088;">$dnsbl</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setBlacklists<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
<span style="color: #339933;">+</span>        <span style="color: #0000ff;">'sbl-xbl.spamhaus.org'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>        <span style="color: #0000ff;">'bl.spamcop.net'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>        <span style="color: #0000ff;">'b.barracudacentral.org'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>        <span style="color: #0000ff;">'spam.spamrats.com'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>        <span style="color: #0000ff;">'dyna.spamrats.com'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>        <span style="color: #0000ff;">'noptr.spamrats.com'</span><span style="color: #339933;">,</span>
<span style="color: #339933;">+</span>        <span style="color: #0000ff;">'bl.tiopan.com'</span>
<span style="color: #339933;">+</span>        <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$dnsbl</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>isListed<span style="color: #009900;">&#40;</span><span style="color: #000088;">$remoteIP</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #339933;">+</span>    <span style="color: #000088;">$data</span><span style="color: #339933;">=</span><span style="color: #000088;">$dnsbl</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getListingBls<span style="color: #009900;">&#40;</span><span style="color: #000088;">$remoteIP</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>    <span style="color: #990000;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>    <span style="color: #000088;">$entry</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;BLACKLISTED IP <span style="color: #006699; font-weight: bold;">$remoteIP</span>: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;, &quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>    Horde<span style="color: #339933;">::</span><span style="color: #004000;">logMessage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">__LINE__</span><span style="color: #339933;">,</span> PEAR_LOG_ERR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
<span style="color: #339933;">+</span>    <span style="color: #000088;">$entry</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Not blacklisted ip <span style="color: #006699; font-weight: bold;">$remoteIP</span>&quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;, &quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>    Horde<span style="color: #339933;">::</span><span style="color: #004000;">logMessage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">__LINE__</span><span style="color: #339933;">,</span> PEAR_LOG_INFO<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #009900;">&#125;</span>
<span style="color: #339933;">+</span>
<span style="color: #339933;">+</span><span style="color: #666666; font-style: italic;"># DNSBL END
</span><span style="color: #339933;">+</span>
 <span style="color: #666666; font-style: italic;">// ZMENA</span>
 <span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #339933;">,</span> <span style="color: #990000;">ini_get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">':/usr/share/php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.hrbac.cz/2011/01/dnsbl-for-horde/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Captcha for Horde</title>
		<link>http://www.hrbac.cz/2010/12/captcha-for-horde/</link>
		<comments>http://www.hrbac.cz/2010/12/captcha-for-horde/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 12:22:54 +0000</pubDate>
		<dc:creator>David Hrbáč</dc:creator>
				<category><![CDATA[CentOS 4.x]]></category>
		<category><![CDATA[CentOS 5.x]]></category>
		<category><![CDATA[horde]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.hrbac.cz/?p=268</guid>
		<description><![CDATA[Here is small patch to implement captcha on Horde login page. We have implemeteded Text_CAPTCHA_Numeral. Package for Centos is here: http://fs12.vsb.cz/hrb33/el5/hrb/stable/i386/repoview/php-pear-Text-CAPTCHA-Numeral.html. Here is the patch. --- horde-webmail-1.2.8.orig/imp/login.php 2010-10-25 17:10:05.000000000 +0200 +++ horde-webmail-1.2.8/imp/login.php 2010-11-30 17:36:27.571023703 +0100 @@ -398,6 +398,7 @@ $t-&#62;set&#40;'user_vinfo', Horde::callHook&#40;'_imp_hook_vinfo', array&#40;'vdomain'&#41;, 'imp'&#41;&#41;; &#125; $t-&#62;set&#40;'password_tabindex', ++$tabindex&#41;; +$t-&#62;set&#40;'captch_tabindex', ++$tabindex&#41;; &#160; $t-&#62;set&#40;'change_smtphost', &#40;!empty&#40;$conf&#91;'server'&#93;&#91;'change_smtphost'&#93;&#41;&#41;&#41;; if &#40;$t-&#62;get&#40;'change_smtphost'&#41;&#41; &#123; @@ [...]]]></description>
			<content:encoded><![CDATA[<p>Here is small patch to implement captcha on Horde login page. We have implemeteded <a href="http://pear.php.net/package/Text_CAPTCHA_Numeral">Text_CAPTCHA_Numeral</a>. Package for Centos is here: <a href="http://fs12.vsb.cz/hrb33/el5/hrb/stable/i386/repoview/php-pear-Text-CAPTCHA-Numeral.html">http://fs12.vsb.cz/hrb33/el5/hrb/stable/i386/repoview/php-pear-Text-CAPTCHA-Numeral.html</a>. Here is the <a href='http://www.hrbac.cz/blog/wp-content/Text-CAPTCHA-Numeral-Horde.txt'>patch</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">---</span> horde<span style="color: #339933;">-</span>webmail<span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>2<span style="color: #339933;">.</span>8<span style="color: #339933;">.</span>orig<span style="color: #339933;">/</span>imp<span style="color: #339933;">/</span>login<span style="color: #339933;">.</span>php	<span style="color: #cc66cc;">2010</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">25</span> <span style="color: #cc66cc;">17</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span><span style="color:#800080;">05.000000000</span> <span style="color: #339933;">+</span><span style="color: #208080;">0200</span>
<span style="color: #339933;">+++</span> horde<span style="color: #339933;">-</span>webmail<span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>2<span style="color: #339933;">.</span>8<span style="color: #339933;">/</span>imp<span style="color: #339933;">/</span>login<span style="color: #339933;">.</span>php	<span style="color: #cc66cc;">2010</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">11</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">30</span> <span style="color: #cc66cc;">17</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">36</span><span style="color: #339933;">:</span><span style="color:#800080;">27.571023703</span> <span style="color: #339933;">+</span><span style="color: #208080;">0100</span>
<span style="color: #339933;">@@</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">398</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span> <span style="color: #339933;">+</span><span style="color: #cc66cc;">398</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">7</span> <span style="color: #339933;">@@</span>
     <span style="color: #000088;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'user_vinfo'</span><span style="color: #339933;">,</span> Horde<span style="color: #339933;">::</span><span style="color: #004000;">callHook</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'_imp_hook_vinfo'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'vdomain'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'imp'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #000088;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'password_tabindex'</span><span style="color: #339933;">,</span> <span style="color: #339933;">++</span><span style="color: #000088;">$tabindex</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #000088;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'captch_tabindex'</span><span style="color: #339933;">,</span> <span style="color: #339933;">++</span><span style="color: #000088;">$tabindex</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #000088;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'change_smtphost'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'server'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'change_smtphost'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'change_smtphost'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #339933;">@@</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">446</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">7</span> <span style="color: #339933;">+</span><span style="color: #cc66cc;">447</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">16</span> <span style="color: #339933;">@@</span>
     <span style="color: #0000ff;">'var imp_auth = '</span> <span style="color: #339933;">.</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imp_auth</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
     <span style="color: #0000ff;">'var nomenu = '</span> <span style="color: #339933;">.</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'menu'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'always'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">-</span><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetch</span><span style="color: #009900;">&#40;</span>IMP_TEMPLATES <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/login/login.html'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>
<span style="color: #339933;">+</span><span style="color: #666666; font-style: italic;">// ZMENA</span>
<span style="color: #339933;">+</span><span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #339933;">,</span> <span style="color: #990000;">ini_get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">':/usr/share/php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>
<span style="color: #339933;">+</span><span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Text/CAPTCHA/Numeral.php'</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #000088;">$numcap</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Text_CAPTCHA_Numeral<span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>
<span style="color: #339933;">+</span><span style="color: #b1b100;">echo</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Vysledek'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$numcap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOperation</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' ='</span><span style="color: #339933;">,</span> <span style="color: #000088;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetch</span><span style="color: #009900;">&#40;</span>IMP_TEMPLATES <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/login/login.html'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'answer'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$numcap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getAnswer</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #666666; font-style: italic;">//KONEC ZMENY</span>
&nbsp;
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$recompose_data</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">/* Prepare recompose template. */</span>
&nbsp;
<span style="color: #339933;">---</span> horde<span style="color: #339933;">-</span>webmail<span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>2<span style="color: #339933;">.</span>8<span style="color: #339933;">.</span>orig<span style="color: #339933;">/</span>imp<span style="color: #339933;">/</span>redirect<span style="color: #339933;">.</span>php	<span style="color: #cc66cc;">2010</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">25</span> <span style="color: #cc66cc;">17</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span><span style="color:#800080;">05.000000000</span> <span style="color: #339933;">+</span><span style="color: #208080;">0200</span>
<span style="color: #339933;">+++</span> horde<span style="color: #339933;">-</span>webmail<span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>2<span style="color: #339933;">.</span>8<span style="color: #339933;">/</span>imp<span style="color: #339933;">/</span>redirect<span style="color: #339933;">.</span>php	<span style="color: #cc66cc;">2010</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">11</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">30</span> <span style="color: #cc66cc;">17</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">36</span><span style="color: #339933;">:</span><span style="color:#800080;">27.555023948</span> <span style="color: #339933;">+</span><span style="color: #208080;">0100</span>
<span style="color: #339933;">@@</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">91</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span> <span style="color: #339933;">+</span><span style="color: #cc66cc;">91</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">14</span> <span style="color: #339933;">@@</span>
 <span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Horde/Maintenance.php'</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #000088;">$actionID</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Util<span style="color: #339933;">::</span><span style="color: #004000;">getFormData</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'compose'</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">'login_compose'</span> <span style="color: #339933;">:</span> Util<span style="color: #339933;">::</span><span style="color: #004000;">getFormData</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'actionID'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>
<span style="color: #339933;">+</span><span style="color: #000088;">$captch</span> <span style="color: #339933;">=</span> Util<span style="color: #339933;">::</span><span style="color: #004000;">getFormData</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'captch'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$captch</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'answer'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #339933;">+</span>    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$captch</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'answer'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #339933;">+</span>            _redirect<span style="color: #009900;">&#40;</span>Auth<span style="color: #339933;">::</span><span style="color: #004000;">addLogoutParameters</span><span style="color: #009900;">&#40;</span>IMP<span style="color: #339933;">::</span><span style="color: #004000;">logoutUrl</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> AUTH_REASON_FAILED<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">+</span>    <span style="color: #009900;">&#125;</span>
<span style="color: #339933;">+</span><span style="color: #009900;">&#125;</span>
<span style="color: #339933;">+</span>
 <span style="color: #000088;">$autologin</span> <span style="color: #339933;">=</span> Util<span style="color: #339933;">::</span><span style="color: #004000;">getFormData</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'autologin'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000088;">$imapuser</span> <span style="color: #339933;">=</span> Util<span style="color: #339933;">::</span><span style="color: #004000;">getPost</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'imapuser'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000088;">$pass</span> <span style="color: #339933;">=</span> Util<span style="color: #339933;">::</span><span style="color: #004000;">getPost</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pass'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">---</span> horde<span style="color: #339933;">-</span>webmail<span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>2<span style="color: #339933;">.</span>8<span style="color: #339933;">.</span>orig<span style="color: #339933;">/</span>imp<span style="color: #339933;">/</span>templates<span style="color: #339933;">/</span>login<span style="color: #339933;">/</span>login<span style="color: #339933;">.</span>html	<span style="color: #cc66cc;">2010</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">25</span> <span style="color: #cc66cc;">17</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span><span style="color:#800080;">05.000000000</span> <span style="color: #339933;">+</span><span style="color: #208080;">0200</span>
<span style="color: #339933;">+++</span> horde<span style="color: #339933;">-</span>webmail<span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>2<span style="color: #339933;">.</span>8<span style="color: #339933;">/</span>imp<span style="color: #339933;">/</span>templates<span style="color: #339933;">/</span>login<span style="color: #339933;">/</span>login<span style="color: #339933;">.</span>html	<span style="color: #cc66cc;">2010</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">11</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">30</span> <span style="color: #cc66cc;">17</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">36</span><span style="color: #339933;">:</span><span style="color:#800080;">27.215029139</span> <span style="color: #339933;">+</span><span style="color: #208080;">0100</span>
<span style="color: #339933;">@@</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">94</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span> <span style="color: #339933;">+</span><span style="color: #cc66cc;">94</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">12</span> <span style="color: #339933;">@@</span>
       <span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;password&quot;</span> tabindex<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;tag:password_tabindex /&gt;&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;pass&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;pass&quot;</span> style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;direction:ltr&quot;</span> <span style="color: #339933;">/&gt;</span>
      <span style="color: #339933;">&lt;/</span>td<span style="color: #339933;">&gt;</span>
     <span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">+</span>    <span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">+</span>     <span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;light rightAlign&quot;</span><span style="color: #339933;">&gt;&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;captch&quot;</span><span style="color: #339933;">&gt;&lt;</span>strong<span style="color: #339933;">&gt;&lt;</span>gettext<span style="color: #339933;">&gt;</span>Vysledek<span style="color: #339933;">&lt;/</span>gettext<span style="color: #339933;">&gt;&lt;/</span>strong<span style="color: #339933;">&gt;&lt;/</span>label<span style="color: #339933;">&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">+</span>     <span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;leftAlign&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">+</span>      <span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> tabindex<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;tag:captch_tabindex /&gt;&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;captch&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;captch&quot;</span> style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;direction:ltr&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">+</span>     <span style="color: #339933;">&lt;/</span>td<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">+</span>    <span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
&nbsp;
 <span style="color: #339933;">&lt;</span>if<span style="color: #339933;">:</span>change_smtphost<span style="color: #339933;">&gt;</span>
     <span style="color: #339933;">&lt;</span>tr style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;height: 1em;&quot;</span><span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.hrbac.cz/2010/12/captcha-for-horde/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benchmarking php with apc, memcached</title>
		<link>http://www.hrbac.cz/2009/09/benchmarking-php-with-apc-memcached/</link>
		<comments>http://www.hrbac.cz/2009/09/benchmarking-php-with-apc-memcached/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 07:56:43 +0000</pubDate>
		<dc:creator>David Hrbáč</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.hrbac.cz/?p=101</guid>
		<description><![CDATA[As we are very extensively using techniques to speed up web applications we build or host, I&#8217;d like to share some benchmarks. One of our clients is running site on our machines which is using SOAP/WSDL to get data. The application is extremely slow, result are very poor. Apache is able to server this webapp [...]]]></description>
			<content:encoded><![CDATA[<p>As we are very extensively using  techniques to speed up web applications we build or host, I&#8217;d like to share some benchmarks. One of our clients is running site on our machines which is using SOAP/WSDL to get data. The application is extremely  slow, result are very poor.</p>
<p>Apache is able to server this webapp within cca 23 pages per second, which is bad. Here are the ab results:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>root<span style="color: #000000; font-weight: bold;">@</span>webmel4 ~<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #666666; font-style: italic;"># ab -n 400 -c 5 http://beta.somedomain.cz/</span>
This is ApacheBench, Version 2.0.41-dev <span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #007800;">$Revision</span>: <span style="color: #000000;">1.141</span> $<span style="color: #000000; font-weight: bold;">&amp;</span>gt; apache-<span style="color: #000000;">2.0</span>
Copyright <span style="color: #7a0874; font-weight: bold;">&#40;</span>c<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">1996</span> Adam Twiss, Zeus Technology Ltd, http:<span style="color: #000000; font-weight: bold;">//</span>www.zeustech.net<span style="color: #000000; font-weight: bold;">/</span>
Copyright <span style="color: #7a0874; font-weight: bold;">&#40;</span>c<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">1998</span>-<span style="color: #000000;">2002</span> The Apache Software Foundation, http:<span style="color: #000000; font-weight: bold;">//</span>www.apache.org<span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
Benchmarking beta.somedomain.cz <span style="color: #7a0874; font-weight: bold;">&#40;</span>be patient<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Completed <span style="color: #000000;">100</span> requests
Completed <span style="color: #000000;">200</span> requests
Completed <span style="color: #000000;">300</span> requests
Finished <span style="color: #000000;">400</span> requests
&nbsp;
Server Software:        Apache
Server Hostname:        beta.somedomain.cz
Server Port:            <span style="color: #000000;">80</span>
&nbsp;
Document Path:          <span style="color: #000000; font-weight: bold;">/</span>
Document Length:        <span style="color: #000000;">45829</span> bytes
&nbsp;
Concurrency Level:      <span style="color: #000000;">5</span>
Time taken <span style="color: #000000; font-weight: bold;">for</span> tests:   <span style="color: #000000;">17.637183</span> seconds
Complete requests:      <span style="color: #000000;">400</span>
Failed requests:        <span style="color: #000000;">0</span>
Write errors:           <span style="color: #000000;">0</span>
Total transferred:      <span style="color: #000000;">18473376</span> bytes
HTML transferred:       <span style="color: #000000;">18348354</span> bytes
Requests per second:    <span style="color: #000000;">22.68</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #666666; font-style: italic;">#/sec] (mean)</span>
Time per request:       <span style="color: #000000;">220.465</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Time per request:       <span style="color: #000000;">44.093</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean, across all concurrent requests<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Transfer rate:          <span style="color: #000000;">1022.84</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Kbytes<span style="color: #000000; font-weight: bold;">/</span>sec<span style="color: #7a0874; font-weight: bold;">&#93;</span> received
&nbsp;
Connection Times <span style="color: #7a0874; font-weight: bold;">&#40;</span>ms<span style="color: #7a0874; font-weight: bold;">&#41;</span>
              min  mean<span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #000000; font-weight: bold;">/</span>-sd<span style="color: #7a0874; font-weight: bold;">&#93;</span> median   max
Connect:        <span style="color: #000000;">6</span>    <span style="color: #000000;">6</span>   <span style="color: #000000;">0.2</span>      <span style="color: #000000;">6</span>       <span style="color: #000000;">9</span>
Processing:   <span style="color: #000000;">176</span>  <span style="color: #000000;">212</span>  <span style="color: #000000;">26.1</span>    <span style="color: #000000;">207</span>     <span style="color: #000000;">380</span>
Waiting:      <span style="color: #000000;">142</span>  <span style="color: #000000;">172</span>  <span style="color: #000000;">21.4</span>    <span style="color: #000000;">169</span>     <span style="color: #000000;">277</span>
Total:        <span style="color: #000000;">182</span>  <span style="color: #000000;">218</span>  <span style="color: #000000;">26.1</span>    <span style="color: #000000;">213</span>     <span style="color: #000000;">386</span>
&nbsp;
Percentage of the requests served within a certain <span style="color: #000000; font-weight: bold;">time</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>ms<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  <span style="color: #000000;">50</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">213</span>
  <span style="color: #000000;">66</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">221</span>
  <span style="color: #000000;">75</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">225</span>
  <span style="color: #000000;">80</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">230</span>
  <span style="color: #000000;">90</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">252</span>
  <span style="color: #000000;">95</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">272</span>
  <span style="color: #000000;">98</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">290</span>
  <span style="color: #000000;">99</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">325</span>
 <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">386</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>longest request<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>We decided to implement memcached which means some small code rewrite, which is quite simple.  After that apache serves the pages within the 47 pages per second. Nice but still poor.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>root<span style="color: #000000; font-weight: bold;">@</span>webmel4 ~<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #666666; font-style: italic;"># ab -n 400 -c 5 http://beta.somedomain.cz/</span>
This is ApacheBench, Version 2.0.41-dev <span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #007800;">$Revision</span>: <span style="color: #000000;">1.141</span> $<span style="color: #000000; font-weight: bold;">&amp;</span>gt; apache-<span style="color: #000000;">2.0</span>
Copyright <span style="color: #7a0874; font-weight: bold;">&#40;</span>c<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">1996</span> Adam Twiss, Zeus Technology Ltd, http:<span style="color: #000000; font-weight: bold;">//</span>www.zeustech.net<span style="color: #000000; font-weight: bold;">/</span>
Copyright <span style="color: #7a0874; font-weight: bold;">&#40;</span>c<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">1998</span>-<span style="color: #000000;">2002</span> The Apache Software Foundation, http:<span style="color: #000000; font-weight: bold;">//</span>www.apache.org<span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
Benchmarking beta.somedomain.cz <span style="color: #7a0874; font-weight: bold;">&#40;</span>be patient<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Completed <span style="color: #000000;">100</span> requests
Completed <span style="color: #000000;">200</span> requests
Completed <span style="color: #000000;">300</span> requests
Finished <span style="color: #000000;">400</span> requests
&nbsp;
Server Software:        Apache
Server Hostname:        beta.somedomain.cz
Server Port:            <span style="color: #000000;">80</span>
&nbsp;
Document Path:          <span style="color: #000000; font-weight: bold;">/</span>
Document Length:        <span style="color: #000000;">11128</span> bytes
&nbsp;
Concurrency Level:      <span style="color: #000000;">5</span>
Time taken <span style="color: #000000; font-weight: bold;">for</span> tests:   <span style="color: #000000;">8.403883</span> seconds
Complete requests:      <span style="color: #000000;">400</span>
Failed requests:        <span style="color: #000000;">0</span>
Write errors:           <span style="color: #000000;">0</span>
Total transferred:      <span style="color: #000000;">4579944</span> bytes
HTML transferred:       <span style="color: #000000;">4455233</span> bytes
Requests per second:    <span style="color: #000000;">47.60</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #666666; font-style: italic;">#/sec] (mean)</span>
Time per request:       <span style="color: #000000;">105.049</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Time per request:       <span style="color: #000000;">21.010</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean, across all concurrent requests<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Transfer rate:          <span style="color: #000000;">532.13</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Kbytes<span style="color: #000000; font-weight: bold;">/</span>sec<span style="color: #7a0874; font-weight: bold;">&#93;</span> received
&nbsp;
Connection Times <span style="color: #7a0874; font-weight: bold;">&#40;</span>ms<span style="color: #7a0874; font-weight: bold;">&#41;</span>
              min  mean<span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #000000; font-weight: bold;">/</span>-sd<span style="color: #7a0874; font-weight: bold;">&#93;</span> median   max
Connect:        <span style="color: #000000;">4</span>    <span style="color: #000000;">5</span>   <span style="color: #000000;">1.2</span>      <span style="color: #000000;">6</span>      <span style="color: #000000;">16</span>
Processing:    <span style="color: #000000;">45</span>   <span style="color: #000000;">98</span>  <span style="color: #000000;">40.8</span>     <span style="color: #000000;">88</span>     <span style="color: #000000;">249</span>
Waiting:       <span style="color: #000000;">37</span>   <span style="color: #000000;">81</span>  <span style="color: #000000;">34.0</span>     <span style="color: #000000;">73</span>     <span style="color: #000000;">218</span>
Total:         <span style="color: #000000;">51</span>  <span style="color: #000000;">104</span>  <span style="color: #000000;">40.7</span>     <span style="color: #000000;">94</span>     <span style="color: #000000;">253</span>
&nbsp;
Percentage of the requests served within a certain <span style="color: #000000; font-weight: bold;">time</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>ms<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  <span style="color: #000000;">50</span><span style="color: #000000; font-weight: bold;">%</span>     <span style="color: #000000;">94</span>
  <span style="color: #000000;">66</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">113</span>
  <span style="color: #000000;">75</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">131</span>
  <span style="color: #000000;">80</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">139</span>
  <span style="color: #000000;">90</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">165</span>
  <span style="color: #000000;">95</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">177</span>
  <span style="color: #000000;">98</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">205</span>
  <span style="color: #000000;">99</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">231</span>
 <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">253</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>longest request<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>Finally we decided to add <a href="http://pecl.php.net/package/APC">apc php cache</a>. Speed up is quite better cca 130 pages per second.</p>

<div class="wp_syntax"><div class="code"><pre class="bach" style="font-family:monospace;">[root@webmel4 ~]# ab -n 400 -c 5 http://beta.somedomain.cz/
This is ApacheBench, Version 2.0.41-dev &amp;lt;$Revision: 1.141 $&amp;gt; apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
&nbsp;
Benchmarking beta.somedomain.cz (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Finished 400 requests
&nbsp;
Server Software:        Apache
Server Hostname:        beta.somedomain.cz
Server Port:            80
&nbsp;
Document Path:          /
Document Length:        11128 bytes
&nbsp;
Concurrency Level:      5
Time taken for tests:   3.70608 seconds
Complete requests:      400
Failed requests:        0
Write errors:           0
Total transferred:      4584288 bytes
HTML transferred:       4459266 bytes
Requests per second:    130.27 [#/sec] (mean)
Time per request:       38.383 [ms] (mean)
Time per request:       7.677 [ms] (mean, across all concurrent requests)
Transfer rate:          1457.69 [Kbytes/sec] received
&nbsp;
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        6    6   0.2      6       9
Processing:    21   31   8.2     30      83
Waiting:       14   23   7.9     22      76
Total:         27   37   8.2     36      89
&nbsp;
Percentage of the requests served within a certain time (ms)
  50%     36
  66%     39
  75%     41
  80%     43
  90%     47
  95%     51
  98%     60
  99%     78
 100%     89 (longest request)</pre></div></div>

<p>So, as you can see, there are ways to speedup the web apps not mentioning that the app itself can be better. We have seen the code and it seems to me that the programmer did not optimize anything within the code.</p>

<table id="wp-table-reloaded-id-1-no-1" class="wp-table-reloaded wp-table-reloaded-id-1">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">technology</th><th class="column-2">requests per sec</th><th class="column-3">speed</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">php</td><td class="column-2">22.68</td><td class="column-3">100%</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">php+memcachedphp</td><td class="column-2">47.6</td><td class="column-3">210%</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">+memcached+apc</td><td class="column-2">130.27</td><td class="column-3">574%</td>
	</tr>
</tbody>
</table>

<p>Benchmarks were run against CentOS 4.8 machine running:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">httpd-2.0.52-<span style="color: #000000;">41</span>.ent.4.centos4
memcached-1.4.1-<span style="color: #000000;">2</span>.el4.hrb
php-5.1.6-<span style="color: #000000;">3</span>.el4s1.10
php-pecl-apc-3.0.19-<span style="color: #000000;">1</span>.el4.hrb
php-pecl-memcache-3.0.4-<span style="color: #000000;">3</span>.el4.hrb</pre></div></div>

<p>You can find non distribution packages within my repos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hrbac.cz/2009/09/benchmarking-php-with-apc-memcached/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

