<?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"
	>

<channel>
	<title>Professional PHP Development Blog</title>
	<atom:link href="http://www.prophpdevelopmentblog.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.prophpdevelopmentblog.com</link>
	<description>Nathan Malone on High Performance PHP / MySQL Web Development...</description>
	<pubDate>Thu, 07 Aug 2008 14:45:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Basecamp vs. MyIntervals, Pt. 2</title>
		<link>http://www.prophpdevelopmentblog.com/2008/07/23/basecamp-vs-myintervals-pt-2/</link>
		<comments>http://www.prophpdevelopmentblog.com/2008/07/23/basecamp-vs-myintervals-pt-2/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 18:16:39 +0000</pubDate>
		<dc:creator>Nathan Malone</dc:creator>
		
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://www.prophpdevelopmentblog.com/?p=15</guid>
		<description><![CDATA[After trying out MyIntervals for a while, I think I am going back to Basecamp for my project management solution.
Why?
I really liked the time tracking/time management that MyIntervals offered, but there are several areas where I feel it didn&#8217;t meet my needs as well as Basecamp did.
While MyIntervals might be a terrific solution for some [...]]]></description>
			<content:encoded><![CDATA[<p>After trying out <a href="http://www.myintervals.com/">MyIntervals</a> for a while, I think I am going back to <a href="http://www.basecamphq.com/">Basecamp</a> for my project management solution.</p>
<p>Why?</p>
<p>I really liked the time tracking/time management that MyIntervals offered, but there are several areas where I feel it didn&#8217;t meet my needs as well as Basecamp did.</p>
<p>While MyIntervals might be a terrific solution for some web developers, it has some features I didn&#8217;t need that only added to the complexity, and it was a lot weaker in terms of communication between me and my clients, an area that Basecamp is particularly strong in.</p>
<p>I&#8217;m going to really miss some of the time management functionality that MyIntervals provided, but there are a few add-ons to Basecamp that I believe will help close the gap in that area between the two solutions. In particular, <a href="http://www.projectrecon.net/">Project Recon</a> is one that I will definitely be trying out. I might also try some of the other solutions listed <a href="http://www.basecamphq.com/extras">here</a> in the near future, as they have several interesting ones listed there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prophpdevelopmentblog.com/2008/07/23/basecamp-vs-myintervals-pt-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sphinx 0.9.8 Released (Full-text Search Engine)</title>
		<link>http://www.prophpdevelopmentblog.com/2008/07/23/sphinx-098-released-full-text-search-engine/</link>
		<comments>http://www.prophpdevelopmentblog.com/2008/07/23/sphinx-098-released-full-text-search-engine/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 17:29:34 +0000</pubDate>
		<dc:creator>Nathan Malone</dc:creator>
		
		<category><![CDATA[Sphinx]]></category>

		<guid isPermaLink="false">http://www.prophpdevelopmentblog.com/?p=14</guid>
		<description><![CDATA[About a week ago, I got an email stating that Sphinx version 0.9.8 had been released.
I first used Sphinx well over a year ago, when I had a project that required full-text searching of a massive, 25 Million + database, something that was probably a little too big for the default MySQL full-text engine to [...]]]></description>
			<content:encoded><![CDATA[<p>About a week ago, I got an email stating that <a href="http://www.sphinxsearch.com/">Sphinx</a> version 0.9.8 had been released.</p>
<p>I first used Sphinx well over a year ago, when I had a project that required full-text searching of a massive, 25 Million + database, something that was probably a little too big for the default MySQL full-text engine to handle. Additionally, I wanted to use the InnoDB MySQL engine, as opposed to the ISAM (which is the one that had full-text capabilities).</p>
<p>After doing some research, I ended up going with a MySQL/Sphinx joint solution, where I stored the data in MySQL, and used Sphinx to actually do the searching.</p>
<p>Since then, this already impressive project has come a long way, and if you haven&#8217;t already checked it out, it is well worth a look. It seems to be gaining quite a bit of traction. From the latest email:</p>
<blockquote><p>Also in the news, we&#8217;re among the finalists in SourceForge Community Choice Awards 2008! Sphinx is in the shortlists for &#8220;Best Project&#8221;, &#8220;Best Project for the Enterprise&#8221;, and, somewhat unexpectedly for me, &#8220;Most Likely to Be the Next $1B Acquisition&#8221;. Many thanks to all who voted for Sphinx during the nominations! Now is the time to vote again in the 2nd round. There are several quite popular competitors (such as OpenOffice), so please spread the word as much as you can.</p></blockquote>
<p><a href="http://www.sphinxsearch.com/">Here&#8217;s the link</a> again&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prophpdevelopmentblog.com/2008/07/23/sphinx-098-released-full-text-search-engine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project Management Software: Basecamp vs. MyIntervals</title>
		<link>http://www.prophpdevelopmentblog.com/2008/05/23/project-management-software-basecamp-vs-myintervals/</link>
		<comments>http://www.prophpdevelopmentblog.com/2008/05/23/project-management-software-basecamp-vs-myintervals/#comments</comments>
		<pubDate>Fri, 23 May 2008 22:30:59 +0000</pubDate>
		<dc:creator>Nathan Malone</dc:creator>
		
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://www.prophpdevelopmentblog.com/?p=13</guid>
		<description><![CDATA[Project management software! If you aren&#8217;t using it now, you&#8217;re likely not being as productive as you otherwise might be.
I have, in the past, used Basecamp to manage my projects (in conjunction with Blinksale). Recently, however, I have been wanting something a little different, so after eying it for a few weeks, I finally set [...]]]></description>
			<content:encoded><![CDATA[<p>Project management software! If you aren&#8217;t using it now, you&#8217;re likely not being as productive as you otherwise might be.</p>
<p>I have, in the past, used <a href="http://www.basecamphq.com/">Basecamp</a> to manage my projects (in conjunction with <a href="http://www.blinksale.com/home">Blinksale</a>). Recently, however, I have been wanting something a little different, so after eying it for a few weeks, I finally set up a trial account with <a href="http://www.myintervals.com/">MyIntervals</a> this morning (both software packages offer a free trial).</p>
<p>Pros? Cons?</p>
<p>Well, they each have their strengths, I suppose.</p>
<p>Basecamp is stronger on the communication side of things (with &#8220;Writeboards&#8221;, Messages, and even chat software integrated). They also pride themselves on the simplicity of their software, and in my experience, clients rarely have any trouble learning how it works. It doesn&#8217;t have any invoicing functionality, but I have made up for that deficiency by integrating it with Blinksale.</p>
<p>MyIntervals, on the other hand, is stronger on time management. It has detailed time tracking and reporting interfaces, as well as invoicing functionality, and has a good many more features then Basecamp has.</p>
<p>It&#8217;s just been one day, but so far, I am really liking MyIntervals, and their emphasis on time management/tracking, so I will most likely be staying with them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prophpdevelopmentblog.com/2008/05/23/project-management-software-basecamp-vs-myintervals/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MySQL Injection Attacks</title>
		<link>http://www.prophpdevelopmentblog.com/2008/05/22/mysql-injection-attacks/</link>
		<comments>http://www.prophpdevelopmentblog.com/2008/05/22/mysql-injection-attacks/#comments</comments>
		<pubDate>Thu, 22 May 2008 17:07:07 +0000</pubDate>
		<dc:creator>Nathan Malone</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.prophpdevelopmentblog.com/?p=12</guid>
		<description><![CDATA[As a PHP developer, I work quite a bit with MySQL database tables, having worked with several in the 40 Million + record range, as well as having to do several complex projects involving, in one case, interactions between over 60 different tables (not something I hope to do again, believe me).
One thing that always [...]]]></description>
			<content:encoded><![CDATA[<p>As a PHP developer, I work quite a bit with MySQL database tables, having worked with several in the 40 Million + record range, as well as having to do several complex projects involving, in one case, interactions between over 60 different tables (not something I hope to do again, believe me).</p>
<p>One thing that always surprises me when working on code written by others is how frequently the code is subject to what is called MySQL Injection Attacks.</p>
<p>Although some servers handle it automatically (which is highly undesirable, for several reasons), anytime you use any user-submitted data in a MySQL query, you MUST &#8220;escape&#8221; the data to ensure that it is safe from an &#8220;Injection Attack&#8221;.</p>
<p>For those of you who are programmers and are unfamiliar with what I mean, you can read up on the subject more at the <a href="http://us2.php.net/function.mysql-real-escape-string">PHP Manual</a>, but regardless of which database abstraction library you use (or if you directly use PHP&#8217;s MySQL class/funtions), always ensure that you have the database secured by escaping everything.</p>
<p>I won&#8217;t post examples here, as the link above has several excellent examples of ways to prevent it, and all decent database abstraction libraries should have their method of escaping the data implemented and documented. Just ensure that you use the methods provided!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prophpdevelopmentblog.com/2008/05/22/mysql-injection-attacks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Productivity and Time Management</title>
		<link>http://www.prophpdevelopmentblog.com/2008/05/21/productivity-and-time-management/</link>
		<comments>http://www.prophpdevelopmentblog.com/2008/05/21/productivity-and-time-management/#comments</comments>
		<pubDate>Wed, 21 May 2008 16:43:21 +0000</pubDate>
		<dc:creator>Nathan Malone</dc:creator>
		
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://www.prophpdevelopmentblog.com/?p=11</guid>
		<description><![CDATA[Although this is not necessarily related to PHP development, the subject of time management and productivity is one that affects everyone.  In my experience, those of us who work fulltime online (doing site development, internet marketing, or related work) often make poor use of our time.
The nature of the work is that it often [...]]]></description>
			<content:encoded><![CDATA[<p>Although this is not necessarily related to PHP development, the subject of time management and productivity is one that affects everyone.  In my experience, those of us who work fulltime online (doing site development, internet marketing, or related work) often make poor use of our time.</p>
<p>The nature of the work is that it often exposes us to many distractions, ranging from email (always log out of email when you&#8217;re working!) to chat (same here&#8230;) to an interesting link you happen to stumble upon.</p>
<p>Although I have read many productivity and time management books through the years, many of which were helpful, there are a few things that are unique to fulltime web professionals, a group that none of the books I read specifically targeted.</p>
<p>However, late yesterday afternoon, I got an email with a link to a half-hour video put out by Eben at Guru MasterMind titled <a href="http://www.gurumastermindvideoblog.com/2008/05/productive.php">Becoming a Productive Modern Guru</a>, which had some very helpful advice.</p>
<p>If you have read or studied the subject in the past, you will likely hear some familiar techniques, but if you take the time to watch it, you will hopefully pick up some new &#8220;tools&#8221; to improve your productivity.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prophpdevelopmentblog.com/2008/05/21/productivity-and-time-management/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CodeIgniter PHP Framework</title>
		<link>http://www.prophpdevelopmentblog.com/2008/03/20/codeigniter-php-framework/</link>
		<comments>http://www.prophpdevelopmentblog.com/2008/03/20/codeigniter-php-framework/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 01:58:17 +0000</pubDate>
		<dc:creator>Nathan Malone</dc:creator>
		
		<category><![CDATA[CodeIgniter]]></category>

		<category><![CDATA[PHP Frameworks]]></category>

		<guid isPermaLink="false">http://www.prophpdevelopmentblog.com/2008/03/20/codeigniter-php-framework/</guid>
		<description><![CDATA[As I work on programming projects, I am constantly looking for ways to boost productivity, decrease the development time, and, most importantly, to increase the quality of the code I produce.
To those ends, I came across the family of MVC (model-view-control, a class design pattern) frameworks for PHP early in my &#8220;productivity quest&#8221;, and have [...]]]></description>
			<content:encoded><![CDATA[<p>As I work on programming projects, I am constantly looking for ways to boost productivity, decrease the development time, and, most importantly, to increase the quality of the code I produce.</p>
<p>To those ends, I came across the family of MVC (model-view-control, a class design pattern) frameworks for PHP early in my &#8220;productivity quest&#8221;, and have never looked back.</p>
<p>Although there are several other frameworks, such as the <a href="http://framework.zend.com/">Zend Framework</a>, and <a href="http://www.cakephp.org/">CakePHP</a>, my current favorite framework would have to be the <a href="http://www.codeigniter.com/">CodeIgniter</a> framework.</p>
<p>This framework, like the others mentioned above, uses the MVC design pattern, similar to the popular Rubies on Rails (ROR programmers shouldn&#8217;t have much trouble jumping over to a MVC PHP framework, as the syntax is in many ways, very similar).</p>
<p>I now start most new projects with a copy of CodeIgniter using the <a href="http://smarty.php.net/">Smarty</a> library for templating (I prefer that to the default CodeIgniter templating system), and have noticed an increase in development speed of new projects since using it.</p>
<p>It is possible to simply plug in different libraries (in addition to the libraries that come with CodeIgniter), and I have done that with graphing libraries, image libraries, and a host of other third-party solutions in my applications, to significantly speed up the development of new sites.</p>
<p>For those of you who are currently using another framework or are not even using a framework, CodeIgniter is definitely worth a look, to see if it fits with your programming style.  It&#8217;s not the only solution out there, but it has done well for my projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prophpdevelopmentblog.com/2008/03/20/codeigniter-php-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Redirects with PHP</title>
		<link>http://www.prophpdevelopmentblog.com/2007/11/27/redirects-with-php/</link>
		<comments>http://www.prophpdevelopmentblog.com/2007/11/27/redirects-with-php/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 10:00:33 +0000</pubDate>
		<dc:creator>Nathan Malone</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.prophpdevelopmentblog.com/2007/11/27/redirects-with-php/</guid>
		<description><![CDATA[Today, I thought I would knock out a relatively light subject before tackling heavier stuff in the upcoming weeks and months. That topic is implementing header redirects with PHP.
Header redirects are redirects that are handled instantaneously and transparently by the browser, and come in two common forms: 301 redirects and 302 redirects.
The difference between the [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I thought I would knock out a relatively light subject before tackling heavier stuff in the upcoming weeks and months. That topic is implementing header redirects with PHP.</p>
<p>Header redirects are redirects that are handled instantaneously and transparently by the browser, and come in two common forms: 301 redirects and 302 redirects.</p>
<p>The difference between the two is that a 301 redirect is used to tell users that a particular page has permanently moved, and a 302 redirect is used to tell users that a page has only been moved temporarily.</p>
<p>To implement a redirect, the following code must be placed in your PHP script before it prints out any output. Because the redirect is sent in the HTTP header, if the PHP script outputs anything before the redirect header is set, PHP will automatically send headers along with the data that is printed out, and it is impossible to add other headers after data is printed.</p>
<p><strong>301 Redirect:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000066;">header</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;HTTP/1.1 301 Moved Permanently&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #000066;">header</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Location: http://www.prophpdevelopmentblog.com/&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span></pre></div></div>

<p><strong>302 Redirect:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000066;">header</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;HTTP/1.1 302 Moved Temporarily&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #000066;">header</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Location: http://www.prophpdevelopmentblog.com/&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span></pre></div></div>

<p>One important thing to keep in mind when considering putting up a redirect, is that search engines will generally follow and pass link popularity on through 301 redirects, but not 302 redirects, so if the redirect is more or less permanent and you would like the search engine indexing/ranking to reflect that, then a 301 is the way to go.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prophpdevelopmentblog.com/2007/11/27/redirects-with-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Page Compression with PHP</title>
		<link>http://www.prophpdevelopmentblog.com/2007/11/26/page-compression-with-php/</link>
		<comments>http://www.prophpdevelopmentblog.com/2007/11/26/page-compression-with-php/#comments</comments>
		<pubDate>Mon, 26 Nov 2007 10:00:48 +0000</pubDate>
		<dc:creator>Nathan Malone</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[php compression gzip zlib output_compression output_com]]></category>

		<guid isPermaLink="false">http://www.prophpdevelopmentblog.com/2007/11/26/page-compression-with-php/</guid>
		<description><![CDATA[A question that is often asked by new PHP programmers is:
&#8220;How do we compress the (HTML) page output?&#8221;
First of all, why would anyone want to compress their webpages?  There are really two reasons why it is useful:

The page loads faster, especially for users with slower internet connections
The site uses less bandwidth, which means  [...]]]></description>
			<content:encoded><![CDATA[<p>A question that is often asked by new PHP programmers is:</p>
<blockquote><p>&#8220;How do we compress the (HTML) page output?&#8221;</p></blockquote>
<p>First of all, why would anyone want to compress their webpages?  There are really two reasons why it is useful:</p>
<ol>
<li>The page loads faster, especially for users with slower internet connections</li>
<li>The site uses less bandwidth, which means  that the site, especially if it gets lots of traffic, is cheaper to run</li>
</ol>
<p>The downside to compressing page output is that it uses more CPU processing power, but the benefits usually outweigh the extra processing that needs to take place server-side.</p>
<h3>Techniques for Compressing Page Output</h3>
<p>There are several ways to compress page output, which we will discuss below:</p>
<p>First of all, it is possible to activate it for all content (both PHP and non-PHP) served by your Apache web server by changing the configuration of Apache. However, for this post, we will focus on doing it with PHP, as that is the subject of this blog.</p>
<p>If you have access to your php.ini configuration file, the preferred method of compressing all PHP output is to do it by modifying the following configuration settings  in that file to have these values:</p>

<div class="wp_syntax"><div class="code"><pre class="apache">zlib.output_compression = <span style="color: #0000ff;">On</span>
zlib.output_compression_level = <span style="color: #ff0000;">5</span></pre></div></div>

<p>In the above code, &#8220;zlib.output_compression_level&#8221; should be set to a value between 1 and 9, with the higher values giving more compression, but using more server (CPU) resources.</p>
<p>Alternatively, if you don&#8217;t have access to the php.ini file on your server, you can put the compression code directly in your PHP scripts. To do that, put the following line at the top of all of your PHP pages that you want compressed:</p>
<p>Either way you use, once you think you have everything in place, you can use one of many <a href="http://www.whatsmyip.org/mod_gzip_test/">compression testing websites</a> in order to verify that your site is indeed sending compressed output to browsers.</p>
<p>Is it worth it to set up page compression? In most cases, yes.</p>
<p>For example, on one site I was recently working on, we were serving up about 2 Million pages/month without compression. We had complaints of the site loading slowly for some users (the pages were large), as well as the bandwidth getting expensive, so I took steps to set up page compression using the (first) php.ini method.</p>
<p>After getting it configured, I saw a noticeable decrease in page loading time, even for me with my fast internet connection, and the bandwidth bill dropped to only around 30% of what it was before. At the same time, the load on the dual Xeon processor didn&#8217;t move up noticeably, so in this case, I considered it to be a success.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prophpdevelopmentblog.com/2007/11/26/page-compression-with-php/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
