<?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>Racker Hacker &#187; php</title>
	<atom:link href="http://rackerhacker.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://rackerhacker.com</link>
	<description>Words of wisdom from a server administrator</description>
	<lastBuildDate>Wed, 16 May 2012 12:55:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Getting apache, PHP, and memcached working with SELinux</title>
		<link>http://rackerhacker.com/2011/09/07/getting-apache-php-and-memcached-working-with-selinux/</link>
		<comments>http://rackerhacker.com/2011/09/07/getting-apache-php-and-memcached-working-with-selinux/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 03:55:00 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[red hat]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[selinux]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=2516</guid>
		<description><![CDATA[I'm using SELinux more often now on my Fedora 15 installations and I came up against a peculiar issue today on a new server. My PHP installation is configured to store its sessions in memcached and I brought over some working configurations from another server. However, each time I accessed a page which tried to [...]<p><a href="http://rackerhacker.com/2011/09/07/getting-apache-php-and-memcached-working-with-selinux/">Getting apache, PHP, and memcached working with SELinux</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://rackerhacker.com/wp-content/uploads/2011/09/selinux-penguin-125.png"><img src="http://rackerhacker.com/wp-content/uploads/2011/09/selinux-penguin-125.png" alt="SELinux Penguin" title="SELinux Penguin" width="125" height="113" class="alignright size-full wp-image-2532" /></a>I'm using SELinux more often now on my Fedora 15 installations and I came up against a peculiar issue today on a new server.  My PHP installation is configured to store its sessions in memcached and I brought over some working configurations from another server.  However, each time I accessed a page which tried to initiate a session, the page load would hang for about a minute and I'd find this in my apache error logs:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">[Thu Sep 08 03:23:40 2011] [error] [client 11.22.33.44] PHP Warning:  
Unknown: Failed to write session data (memcached). Please verify that 
the current setting of session.save_path is correct (127.0.0.1:11211) 
in Unknown on line 0</pre></div></div>

<p>I ran through my usual list of checks:</p>
<ul>
<li>netstat showed memcached bound to the correct ports/interfaces</li>
<li>memcached was running and I could reach it via telnet</li>
<li>memcached-tool could connect and pull stats from memcached</li>
<li>double-checked my php.ini</li>
<li>tested memcached connectivity via a PHP and ruby script -- they worked</li>
</ul>
<p>Even after all that, I still couldn't figure out what was wrong.  I ran strace on memcached while I ran a curl against the page which creates a session and I found something significant -- memcached wasn't seeing any connections whatsoever at that time.  A quick check of the lo interface with tcpdump showed the same result.  Just before I threw a chair, I remembered one thing:</p>
<p><em>SELinux.</em></p>
<p>A quick check for AVC denials showed the problem:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># aureport --avc | tail -n 1
4021. 09/08/2011 03:23:38 httpd system_u:system_r:httpd_t:s0 42 tcp_socket name_connect system_u:object_r:memcache_port_t:s0 denied 31536</pre></div></div>

<p>I'm far from being a guru on SELinux, so I leaned on audit2allow for help:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># grep memcache /var/log/audit/audit.log | audit2allow
&nbsp;
#============= httpd_t ==============
#!!!! This avc can be allowed using one of the these booleans:
#     httpd_can_network_relay, httpd_can_network_memcache, httpd_can_network_connect
&nbsp;
allow httpd_t memcache_port_t:tcp_socket name_connect;</pre></div></div>

<p>The boolean we're looking for is <code>httpd_can_network_memcache</code>. Flipping the boolean can be done in a snap:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># setsebool -P httpd_can_network_memcache 1
# getsebool httpd_can_network_memcache
httpd_can_network_memcache --&gt; on</pre></div></div>

<p>After adjusting the boolean, apache was able to make connections to memcached without a hitch.  My page which created sessions loaded quickly and I could see data being stored in memcached.  If you want to check the status of all of the apache-related SELinux booleans, just use getsebool:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># getsebool -a | grep httpd | grep off$
allow_httpd_anon_write --&gt; off
allow_httpd_mod_auth_ntlm_winbind --&gt; off
allow_httpd_mod_auth_pam --&gt; off
allow_httpd_sys_script_anon_write --&gt; off
httpd_can_check_spam --&gt; off
httpd_can_network_connect_cobbler --&gt; off
httpd_can_network_connect_db --&gt; off
httpd_can_network_relay --&gt; off
httpd_can_sendmail --&gt; off
httpd_dbus_avahi --&gt; off
httpd_enable_ftp_server --&gt; off
httpd_enable_homedirs --&gt; off
httpd_execmem --&gt; off
httpd_read_user_content --&gt; off
httpd_setrlimit --&gt; off
httpd_ssi_exec --&gt; off
httpd_tmp_exec --&gt; off
httpd_unified --&gt; off
httpd_use_cifs --&gt; off
httpd_use_gpg --&gt; off
httpd_use_nfs --&gt; off</pre></div></div>

<p>If you're interested in SELinux, a good way to get your feet wet is to head over to the CentOS Wiki and review their <a href="http://wiki.centos.org/HowTos/SELinux">SELinux Howtos</a></p>
<p><a href="http://rackerhacker.com/2011/09/07/getting-apache-php-and-memcached-working-with-selinux/">Getting apache, PHP, and memcached working with SELinux</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2011/09/07/getting-apache-php-and-memcached-working-with-selinux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A simple guide to redundant cloud hosting</title>
		<link>http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/</link>
		<comments>http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 00:41:16 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cloud servers]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[high availability]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[load balancing]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rackspace]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[slicehost]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=1771</guid>
		<description><![CDATA[Today, on my 28th birthday, I'm finally delivering on a promise to my readers which I made about two months ago. I've written a guide on how to host a web application redundantly in a cloud environment. While it's still a bit of a rough draft, it should be a good starting point for those [...]<p><a href="http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/">A simple guide to redundant cloud hosting</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Today, on my 28th birthday, I'm finally delivering on a promise to my readers which I made about two months ago.  I've <a href="/redundant-cloud-hosting-configuration-guide/">written a guide</a> on how to host a web application redundantly in a cloud environment.  While it's still a bit of a rough draft, it should be a good starting point for those who haven't worked in virtualized environments before.  Also, it may show some of the more experienced systems administrators a new way to do things.</p>
<p>The guide: <a href="/redundant-cloud-hosting-configuration-guide/">Redundant Cloud Hosting Guide</a></p>
<p>As always, if you find anything in the guide that needs improvement, I'm all ears. <img src='http://rackerhacker.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/">A simple guide to redundant cloud hosting</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2010/08/17/a-simple-guide-to-redundant-cloud-hosting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress and PHP 5.3.x: update_comment_type_cache() expected to be a reference</title>
		<link>http://rackerhacker.com/2009/12/21/wordpress-and-php-5-3-x-update_comment_type_cache-expected-to-be-a-reference/</link>
		<comments>http://rackerhacker.com/2009/12/21/wordpress-and-php-5-3-x-update_comment_type_cache-expected-to-be-a-reference/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 14:02:02 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=1078</guid>
		<description><![CDATA[I upgraded a Fedora 11 instance to Fedora 12 and found the following error at the top of one of my WordPress blogs: Parameter 1 to update_comment_type_cache() expected to be a reference, value given in wp-includes/plugin.php on line 166 The problem wasn't in a plugin, actually. It was within my theme's (R755-light) functions.php: function update_comment_type_cache&#40;&#38;$queried_posts&#41; [...]<p><a href="http://rackerhacker.com/2009/12/21/wordpress-and-php-5-3-x-update_comment_type_cache-expected-to-be-a-reference/">WordPress and PHP 5.3.x: update_comment_type_cache() expected to be a reference</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>I upgraded a Fedora 11 instance to Fedora 12 and found the following error at the top of one of my WordPress blogs:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Parameter 1 to update_comment_type_cache() expected to be a reference, 
value given in wp-includes/plugin.php on line 166</pre></div></div>

<p>The problem wasn't in a plugin, actually.  It was within my theme's (<a href="http://wordpress.org/extend/themes/r755-light">R755-light</a>) functions.php:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> update_comment_type_cache<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span><span style="color: #000088;">$queried_posts</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<p>The temporary fix is to remove the <code>&#038;</code> from that line so it looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> update_comment_type_cache<span style="color: #009900;">&#40;</span><span style="color: #000088;">$queried_posts</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<p>After clearing out the WP Super Cache, the page was loading properly again.  It turns out that the function actually calculates how many comments are available for a given post, so that functionality is working properly right now.  A few theme authors are already releasing new versions to fix this bug, but my theme's author has not.</p>
<blockquote><p>The credit for the fix goes to someone in the <a href="http://wordpress.org/support/topic/297878?replies=8">WordPress forums</a>.</p></blockquote>
<p><a href="http://rackerhacker.com/2009/12/21/wordpress-and-php-5-3-x-update_comment_type_cache-expected-to-be-a-reference/">WordPress and PHP 5.3.x: update_comment_type_cache() expected to be a reference</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2009/12/21/wordpress-and-php-5-3-x-update_comment_type_cache-expected-to-be-a-reference/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Requiring SSL encryption for WordPress administration</title>
		<link>http://rackerhacker.com/2009/07/31/requiring-ssl-encryption-for-wordpress-administration/</link>
		<comments>http://rackerhacker.com/2009/07/31/requiring-ssl-encryption-for-wordpress-administration/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 13:13:26 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=955</guid>
		<description><![CDATA[I was digging around for WordPress plugins last night that would allow me to secure the administrative login page for my WordPress installations. Most of the plugins are only compatible with WordPress 2.7.x or earlier, so I was a little concerned about them working with WordPress 2.8.2. Then I stumbled upon the WordPress documentation that [...]<p><a href="http://rackerhacker.com/2009/07/31/requiring-ssl-encryption-for-wordpress-administration/">Requiring SSL encryption for WordPress administration</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>I was digging around for <a href="http://wordpress.org/">WordPress</a> plugins last night that would allow me to secure the administrative login page for my WordPress installations.  Most of the plugins are only compatible with WordPress 2.7.x or earlier, so I was a little concerned about them working with WordPress 2.8.2.</p>
<p>Then I stumbled upon the <a href="http://codex.wordpress.org/Administration_Over_SSL">WordPress documentation</a> that shows you how to require SSL with no plugins at all.  If you're using WordPress 2.6+, you can use these super-simple instructions:</p>
<p>Require encryption just for the /wp-admin/ login, but leave the rest of the administrative area on HTTP:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Add this line to wp-config.php
</span><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'FORCE_SSL_LOGIN'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>To encrypt the login and the entire administrative area:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Add this line to wp-config.php
</span><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'FORCE_SSL_ADMIN'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Of course, for this to work, you'll need virtual hosts on ports 80 and 443 for your blog.  Also, you'll need an SSL certificate for your blog.  You can snag one from a <a href="https://ssl.trustwave.com/solutions-overview.php">reputable provider</a> or <a href="http://rackerhacker.com/2007/08/02/generate-self-signed-certificate-and-key-in-one-line/">make your own</a>.</p>
<p><a href="http://rackerhacker.com/2009/07/31/requiring-ssl-encryption-for-wordpress-administration/">Requiring SSL encryption for WordPress administration</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2009/07/31/requiring-ssl-encryption-for-wordpress-administration/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Upgraded WordPress to 2.8.2</title>
		<link>http://rackerhacker.com/2009/07/29/upgraded-wordpress-to-2-8-2/</link>
		<comments>http://rackerhacker.com/2009/07/29/upgraded-wordpress-to-2-8-2/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 22:22:13 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=951</guid>
		<description><![CDATA[I finally made it around to upgrading WordPress to 2.8.2 and it seems to be working like a charm. It looks like there were some bug fixes and a XSS vulnerability was patched. Upgraded WordPress to 2.8.2 is a post from: Major Hayden's Racker Hacker blog. Thanks for following the blog via the RSS feed. [...]<p><a href="http://rackerhacker.com/2009/07/29/upgraded-wordpress-to-2-8-2/">Upgraded WordPress to 2.8.2</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>I finally made it around to upgrading WordPress to 2.8.2 and it seems to be working like a charm.  It looks like there were some bug fixes and a <a href="http://wordpress.org/development/2009/07/wordpress-2-8-2/">XSS vulnerability was patched</a>.</p>
<p><a href="http://rackerhacker.com/2009/07/29/upgraded-wordpress-to-2-8-2/">Upgraded WordPress to 2.8.2</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2009/07/29/upgraded-wordpress-to-2-8-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ugly upgrade path from WordPress 2.7.1 to 2.8</title>
		<link>http://rackerhacker.com/2009/06/13/ugly-upgrade-path-from-wordpress-2-7-1-to-2-8/</link>
		<comments>http://rackerhacker.com/2009/06/13/ugly-upgrade-path-from-wordpress-2-7-1-to-2-8/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 17:48:15 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=909</guid>
		<description><![CDATA[When I tried to do an automatic upgrade from WordPress 2.7.1 to 2.8 yesterday, it failed miserably. The files were all put in place, but when I tried to load /wp-admin/upgrade.php, this error popped up: Fatal error: Call to undefined method wpdb::has_cap() in /path/to/wordpress/wp-admin/includes/schema.php on line 22 I was perplexed at the error, so I [...]<p><a href="http://rackerhacker.com/2009/06/13/ugly-upgrade-path-from-wordpress-2-7-1-to-2-8/">Ugly upgrade path from WordPress 2.7.1 to 2.8</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>When I tried to do an automatic upgrade from WordPress 2.7.1 to 2.8 yesterday, it failed miserably.  The files were all put in place, but when I tried to load <code>/wp-admin/upgrade.php</code>, this error popped up:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Fatal error: Call to undefined method wpdb::has_cap() in 
/path/to/wordpress/wp-admin/includes/schema.php on line 22</pre></div></div>

<p>I was perplexed at the error, so I restored from a backup and began <a href="http://codex.wordpress.org/Upgrading_WordPress">upgrading manually</a>.  The manual upgrades have always worked well for me in the past, so I figured this would probably fix the problem.  After the upgrade, I went to <code>/wp-admin/upgrade.php</code> and saw:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Fatal error: Call to undefined method wpdb::has_cap() in 
/path/to/wordpress/wp-admin/includes/schema.php on line 22</pre></div></div>

<p><strong>What the heck is going on?</strong>  I restored from a backup, tried the manual upgrade again, and it still failed.  I took a look at the lines causing the problem in <code>schema.php</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">has_cap</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'collation'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<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;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">charset</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$charset_collate</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;DEFAULT CHARACTER SET <span style="color: #006699; font-weight: bold;">$wpdb-&gt;charset</span>&quot;</span><span style="color: #339933;">;</span>
	<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;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">collate</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$charset_collate</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot; COLLATE <span style="color: #006699; font-weight: bold;">$wpdb-&gt;collate</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>I figured I could comment out the if statement and probably still be safe:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// if ( $wpdb-&gt;has_cap( 'collation' ) ) {</span>
	<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;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">charset</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$charset_collate</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;DEFAULT CHARACTER SET <span style="color: #006699; font-weight: bold;">$wpdb-&gt;charset</span>&quot;</span><span style="color: #339933;">;</span>
	<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;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">collate</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$charset_collate</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot; COLLATE <span style="color: #006699; font-weight: bold;">$wpdb-&gt;collate</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// }</span></pre></div></div>

<p><strong>Success?</strong>  I could make it through the <code>upgrade.php</code> part fine at this point, but whenever I tried to add a tag to a post, it wasn't saving to the database.  I caught this error in my apache logs:</p>
<p><code>[Fri Jun 12 23:45:03 2009] [error] [client 72.183.200.144] WordPress database error Duplicate entry 'debian' for key 'slug' for query INSERT INTO wp_terms (`name`,`slug`,`term_group`) VALUES ('debian','debian','0') made by wp_insert_term, referer: http://rackerhacker.com/wp-admin/post.php?action=edit&#038;post=877</code></p>
<p><strong>Frustration quickly ensued.</strong>  I moved my <code>/wp-content/</code> folder out of the way and replaced it with the standard WordPress stuff, but that didn't help.  I moved plugins out of the way, one by one, but that didn't fix it either.  Then I spotted a strange file sitting in <code>/wp-content/</code> called <code>db.php</code>.  When I opened it, I found a <a href="http://pastie.org/private/rmbmk3ohgmdbujotnrg">lot of database setup classes for mysqli</a>.</p>
<p>I renamed it to <code>db.pleasedonteverrunthisphp</code> and I was able to save tags properly.  So far, I haven't found any issues after I made chat change.</p>
<p>Does anyone know where that file might have come from?  I don't remember adding it myself, so I'm wondering if it was ever packaged with a WordPress plugin or a WordPress installation.  I hope this helps someone else!</p>
<p><a href="http://rackerhacker.com/2009/06/13/ugly-upgrade-path-from-wordpress-2-7-1-to-2-8/">Ugly upgrade path from WordPress 2.7.1 to 2.8</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2009/06/13/ugly-upgrade-path-from-wordpress-2-7-1-to-2-8/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Boxcheck v2.0 is on the way</title>
		<link>http://rackerhacker.com/2009/02/24/boxcheck-v20-is-on-the-way/</link>
		<comments>http://rackerhacker.com/2009/02/24/boxcheck-v20-is-on-the-way/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 13:20:32 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[boxcheck]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=798</guid>
		<description><![CDATA[I've been a bit slow on new posts lately for two main reasons. First, I've been working hard with my new position at Slicehost, (I'm still with Rackspace). Also, I've thrown out the old code for Boxcheck.com and I'm re-writing it from scratch. Most of you probably know that the first version of Boxcheck threw [...]<p><a href="http://rackerhacker.com/2009/02/24/boxcheck-v20-is-on-the-way/">Boxcheck v2.0 is on the way</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://boxcheck.com/"><img class="alignright" title="Boxcheck Nannerpus" src="http://cdn.cloudfiles.mosso.com/c8031/boxchecknannerpus.jpg" alt="" width="228" height="174" /></a></p>
<p>I've been a bit slow on new posts lately for two main reasons.  First, I've been working hard with my <a href="http://www.slicehost.com/articles/2009/2/23/it-s-getting-crowded-in-here">new position at Slicehost</a>, (<a href="http://www.slicehost.com/articles/2008/10/22/big-news-today">I'm still with Rackspace</a>).  Also, I've thrown out the old code for Boxcheck.com and I'm re-writing it from scratch.</p>
<p>Most of you probably know that the first version of Boxcheck threw out some odd errors for some tests and caused confusion for those that depended on the results.  The code is being overhauled to handle errors and special cases much more efficiently.  I'm implementing multiple technologies on the back-end to make the interface simpler and easier to use.  There may also be an API that folks can script against - but I haven't gotten that far yet.</p>
<p>In short - thanks for all of your e-mails!  Boxcheck isn't going away at all.  It's going to be back soon!  If you have any questions or suggestions, feel free to give me a shout.</p>
<p><strong>UPDATE 2010-03-26:</strong> I've abandoned the project for now, but if anything changes, I'll be sure to make another post.</p>
<p><a href="http://rackerhacker.com/2009/02/24/boxcheck-v20-is-on-the-way/">Boxcheck v2.0 is on the way</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2009/02/24/boxcheck-v20-is-on-the-way/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Importing Excel files into MySQL with PHP</title>
		<link>http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/</link>
		<comments>http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 19:42:45 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=601</guid>
		<description><![CDATA[If you have Excel files that need to be imported into MySQL, you can import them easily with PHP. First, you will need to download some prerequisites: PHPExcelReader - http://sourceforge.net/projects/phpexcelreader/ Spreadsheet_Excel_Writer - http://pear.php.net/package/Spreadsheet_Excel_Writer Once you've downloaded both items, upload them to your server. Your directory listing on your server should have two directories: Excel (from [...]<p><a href="http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/">Importing Excel files into MySQL with PHP</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>If you have Excel files that need to be imported into MySQL, you can import them easily with PHP.  First, you will need to download some prerequisites:</p>
<p>PHPExcelReader - <a href="http://sourceforge.net/projects/phpexcelreader/">http://sourceforge.net/projects/phpexcelreader/</a><br />
Spreadsheet_Excel_Writer - <a href="http://pear.php.net/package/Spreadsheet_Excel_Writer">http://pear.php.net/package/Spreadsheet_Excel_Writer</a></p>
<p>Once you've downloaded both items, upload them to your server.  Your directory listing on your server should have two directories: <code>Excel</code> <em>(from PHPExcelReader)</em> and <code>Spreadsheet_Excel_Writer-x.x.x</code> <em>(from Spreadsheet_Excel_Writer)</em>.  To work around a bug in PHPExcelReader, copy <code>oleread.inc</code> from the <code>Excel</code> directory into a new path:</p>
<p><code>Spreadsheet/Excel/Reader/OLERead.php</code></p>
<p>The PHPExcelReader code will expect <code>OLERead.php</code> to be in that specific location.  Once that is complete, you're ready to use the PHPExcelReader class.  I made an example Excel spreadsheet like this:</p>
<pre>Name                Extension   Email
----------------------------------------------------
Jon Smith           2001        jsmith@domain.com
Clint Jones         2002        cjones@domain.com
Frank Peterson      2003        fpeterson@domain.com</pre>
<p>After that, I created a PHP script to pick up the data and insert it into the database, row by row:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Excel/reader.php'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Spreadsheet_Excel_Reader<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setOutputEncoding</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CP1251'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">read</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'exceltestsheet.xls'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$conn</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hostname&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;password&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;database&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$conn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span> <span style="color: #000088;">$x</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$x</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$extension</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$email</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;INSERT INTO mytable (name,extension,email) 
        VALUES ('<span style="color: #006699; font-weight: bold;">$name</span>',<span style="color: #006699; font-weight: bold;">$extension</span>,'<span style="color: #006699; font-weight: bold;">$email</span>')&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$sql</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>After the script ran, each row had been added to the database table successfully.  If you have additional columns to insert, just repeat these lines, using an appropriate variable for each column:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$variable</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sheets</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cells&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$row_number</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$column_number</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>For more details, you can refer to a <a href="http://devzone.zend.com/article/3336-Reading-and-Writing-Spreadsheets-with-PHP">post in Zend's Developer Zone</a>.</p>
<p><a href="http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/">Importing Excel files into MySQL with PHP</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/11/07/importing-excel-files-into-mysql-with-php/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>SquirrelMail: 127 Can&#039;t execute command</title>
		<link>http://rackerhacker.com/2008/09/08/squirrelmail-127-cant-execute-command/</link>
		<comments>http://rackerhacker.com/2008/09/08/squirrelmail-127-cant-execute-command/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 17:16:00 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plesk]]></category>
		<category><![CDATA[sendmail]]></category>
		<category><![CDATA[squirrelmail]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/?p=327</guid>
		<description><![CDATA[I found a Plesk 8.3 server running RHEL 4 last month that was presenting errors when users attempted to send e-mail via SquirrelMail: ERROR: Email delivery error Server replied: 127 Can't execute command '/usr/sbin/sendmail -i -t -fsomeuser@somedomain.com'. The error was appearing because safe_mode was enabled and SquirrelMail was unable to drop e-mails into /usr/sbin/squirrelmail. After [...]<p><a href="http://rackerhacker.com/2008/09/08/squirrelmail-127-cant-execute-command/">SquirrelMail: 127 Can't execute command</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>I found a Plesk 8.3 server running RHEL 4 last month that was presenting errors when users attempted to send e-mail via SquirrelMail:</p>
<p><code>ERROR:<br />
Email delivery error<br />
Server replied: 127 Can't execute command '/usr/sbin/sendmail -i -t -fsomeuser@somedomain.com'.</code></p>
<p>The error was appearing because safe_mode was enabled and SquirrelMail was unable to drop e-mails into /usr/sbin/squirrelmail.  After disabling safe_mode on the server, the users were able to send e-mails via SquirrelMail.</p>
<p><a href="http://rackerhacker.com/2008/09/08/squirrelmail-127-cant-execute-command/">SquirrelMail: 127 Can't execute command</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/09/08/squirrelmail-127-cant-execute-command/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Strange error with Horde 3.1.3 and Plesk 8.1.1</title>
		<link>http://rackerhacker.com/2008/03/10/strange-error-with-horde-313-and-plesk-811/</link>
		<comments>http://rackerhacker.com/2008/03/10/strange-error-with-horde-313-and-plesk-811/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 02:49:05 +0000</pubDate>
		<dc:creator>Major Hayden</dc:creator>
				<category><![CDATA[horde]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plesk]]></category>

		<guid isPermaLink="false">http://rackerhacker.com/2008/03/10/strange-error-with-horde-313-and-plesk-811/</guid>
		<description><![CDATA[I saw a ticket the other day where a customer received this error from Horde when trying to expand items on the left pane of the interface: Fatal error: Cannot use string offset as an array in /www/horde/lib/Horde/Block/Layout/Manager.php on line 389 It turns out that Plesk 8.1.1 bundles Horde 3.1.3 which has an occasional bug [...]<p><a href="http://rackerhacker.com/2008/03/10/strange-error-with-horde-313-and-plesk-811/">Strange error with Horde 3.1.3 and Plesk 8.1.1</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></description>
			<content:encoded><![CDATA[<p>I saw a ticket the other day where a customer received this error from Horde when trying to expand items on the left pane of the interface:</p>
<p><code>Fatal error: Cannot use string offset as an array in /www/horde/lib/Horde/Block/Layout/Manager.php on line 389</code></p>
<p>It turns out that Plesk 8.1.1 bundles Horde 3.1.3 which has an occasional bug within the interface.  Upgrading to Plesk 8.2.0 corrects the issue as Horde 3.1.4 is installed with the upgrade.</p>
<p>See <a href="http://bugs.horde.org/ticket/?id=4070">Horde's bug page</a> for more information.</p>
<p><a href="http://rackerhacker.com/2008/03/10/strange-error-with-horde-313-and-plesk-811/">Strange error with Horde 3.1.3 and Plesk 8.1.1</a> is a post from: Major Hayden's <a href="http://rackerhacker.com">Racker Hacker</a> blog. 
<p>Thanks for following the blog via the RSS feed. Please don't copy my posts or quote portions of them without attribution.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://rackerhacker.com/2008/03/10/strange-error-with-horde-313-and-plesk-811/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

