<?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>Christian Krahn &#187; PHP</title>
	<atom:link href="http://www.krahn.org/category/coding/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.krahn.org</link>
	<description>Using: PHP, Python, JS, MySQL, Perl, Google API&#039;s ; BLOGGING ABOUT: everything related to Web Development</description>
	<lastBuildDate>Sun, 22 Aug 2010 18:29:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Profiling PHP Code with XDebug and CacheGrind</title>
		<link>http://www.krahn.org/2010/07/profiling-php-code-with-xdebug-and-cachegrind/</link>
		<comments>http://www.krahn.org/2010/07/profiling-php-code-with-xdebug-and-cachegrind/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 14:22:07 +0000</pubDate>
		<dc:creator>ckrahn</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[CacheGrind]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Profiler]]></category>
		<category><![CDATA[Profiling]]></category>
		<category><![CDATA[XDebug]]></category>

		<guid isPermaLink="false">http://www.krahn.org/?p=174</guid>
		<description><![CDATA[In my posting about installing a PHP development environment using Ubuntu 10.04 I mentioned the possibility to debug PHP code using XDebug and CacheGrind. Here is a little tutorial on howto use profiling with some free open source tools. Installation / Configuration XDebug is a debugging component which can be added as a module to [...]]]></description>
			<content:encoded><![CDATA[<p>In my posting about <a href="/2010/06/installing-ubuntu-10-04-lucid-lynx-for-php-development/">installing a PHP development environment using Ubuntu 10.04</a> I mentioned the possibility to debug PHP code using XDebug and CacheGrind. Here is a little tutorial on howto use profiling with some free open source tools.</p>
<h3>Installation / Configuration</h3>
<p>XDebug is a debugging component which can be added as a module to PHP using PECL. To install XDebug (if you havent&#8217;t used my tutorial yet) simply use the following code:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">pecl <span style="color: #c20cb9; font-weight: bold;">install</span> xdebug</pre></td></tr></table></div>

<p>Now you need to configure XDebug. As a default configuration you should put the following into /etc/php5/conf.d/xdebug.ini:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">xdebug.profiler_enable_trigger = <span style="color: #000000;">1</span>
xdebug.profiler_enable=<span style="color: #000000;">0</span>
xdebug.profiler_output_dir = <span style="color: #000000; font-weight: bold;">/</span>tmp</pre></td></tr></table></div>

<p>The first line enables the profiler by using a trigger. The trigger is a GET/POST parameter called <em>XDEBUG_PROFILE=1</em> you can use whenever you start a local page via your webbrowser.</p>
<p>The second line enables the profiler by default and would create a profiler output file without a trigger parameter. We don&#8217;t want to do that all the time, so the value here is 0. If you want to enable your profiler the whole time, just put a 1 in there.</p>
<p>The third parameter is the path of the directory you want to write your profiler output files to. I&#8217;ve inserted /tmp as a default here, but you can change it to any other directory your webserver has write access to.</p>
<p>So an example URL to access a local webpage and create a profile output would be something like this:<br />
<em>http://localhost/index.php?XDEBUG_PROFILE=1</em></p>
<p>There should be a cachegrind file in your output dir, e.g. <em>cachegrind.out.12345</em></p>
<p>The number at the end of the filename is the apache pid. The name of the cachegrind file can be configured using another parameter, <em>xdebug.profiler_output_name</em>. A complete documentation of all possibilities can be found <a href="http://xdebug.org/docs/all_settings" target="_blank">here</a>.</p>
<h3>Displaying the profile data</h3>
<p>There are several tools to analyze the data created by the XDebug profiler. One of these tools is <a href="http://sourceforge.net/projects/kcachegrind/" target="_blank">KCachegrind</a>. KCachegrind visualizes traces generated by profiling, including a tree map and a call graph visualization of the calls happening.</p>
<p><img src="/wp-content/uploads/2010/07/kcachegrind.png" alt="" width="580" height="432" class="aligncenter size-full wp-image-177" /></p>
<p>As an example: you can analyze how often certain heavy-load methods are called within your application; that way you can find ways to minimize those calls, reduce them to a pure minimum and increase the performance of the application or website.</p>
<p>Alternative visualization tools for different platforms and operating systems are also available, e.g. <a href="http://www.maccallgrind.com/" target="_blank">MacCallGrind</a> für MacOS. A web based solution would be <a href="http://code.google.com/p/webgrind/" target="_blank">Webgrind</a>, hosted on Google Code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.krahn.org/2010/07/profiling-php-code-with-xdebug-and-cachegrind/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Ubuntu 10.04 Lucid Lynx for PHP development</title>
		<link>http://www.krahn.org/2010/06/installing-ubuntu-10-04-lucid-lynx-for-php-development/</link>
		<comments>http://www.krahn.org/2010/06/installing-ubuntu-10-04-lucid-lynx-for-php-development/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 14:24:07 +0000</pubDate>
		<dc:creator>ckrahn</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Lucid Lynx]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.krahn.org/?p=139</guid>
		<description><![CDATA[Last year I have written a small how-to for installing an Ubuntu 9.04 work environment as virtualbox environment (though it also works for native systems). Recently I have updated this guide to 10.04 as kind of check list to get a working environment to develop PHP/MySQL applications. Installation of System First of all you have [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-160" src="http://englishblog.ckrahn.de/files/2010/06/Lucid-Lynx.png" alt="Lucid-Lynx" width="140" height="120" />Last year I have written a small how-to for installing an Ubuntu 9.04 work environment as virtualbox environment (though it also works for native systems). Recently I have updated this guide to 10.04 as kind of check list to get a working environment to develop PHP/MySQL applications.</p>
<p><span id="more-139"></span></p>
<p><strong>Installation of System</strong></p>
<p>First of all you have install from scratch, which means putting the CD-Rom in your drive or create a VirtualBox and use the ISO file as mount. Then just follow the menu to install Ubuntu.</p>
<p><strong>After basic installation</strong></p>
<p>Start by opening a console window and become superuser:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #660033;">-i</span></pre></td></tr></table></div>

<p>After that update your package list and upgrade all packages with available updates:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> update
<span style="color: #c20cb9; font-weight: bold;">apt-get</span> upgrade</pre></td></tr></table></div>

<p>In case you are using a VirtualBox environment, you have to restart the system and boot up again. After that open a console again and get superuser rights:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #660033;">-i</span></pre></td></tr></table></div>

<p>Then you should install VirtualBox Guest Extensions:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>cdrom
.<span style="color: #000000; font-weight: bold;">/</span>VBoxLinuxAdditions-x86.run</pre></td></tr></table></div>

<p><strong>Installation of LAMP environment</strong></p>
<p>To test your code base you need a working webserver environment with PHP and MySQL Client / Server. If you want to use a separate MySQL Server for your databases then you can skip installing the MySQL Server.</p>
<p>First we start with <span style="text-decoration: underline">Apache2</span>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> build-essential
<span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> apache2 apache2-threaded-dev
a2enmod ssl
a2enmod rewrite
a2enmod include</pre></td></tr></table></div>

<p><em>a2enmod</em> is used to activate apache2 modules like mod_ssl, mod_rewrite and mod_include.</p>
<p>To use php5-curl later, you need to install curl first:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> curl</pre></td></tr></table></div>

<p>Now it&#8217;s time for <span style="text-decoration: underline">PHP5</span>:</p>
<p>First we install some (more or less) necessary PHP5 packages (including imagemagick):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php5 php5-cli php5-dev php-pear
<span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> imagemagick
<span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php5-gd php5-mcrypt php5-imagick php5-curl php5-xmlrpc php5-xsl php5-mhash</pre></td></tr></table></div>

<p>The <em>php5-dev</em> package contains phpize which is necessary for installing and compiling PEAR/PECL extensions for PHP.</p>
<p>Since you might want to use PEAR packages, an upgrade of the channels and already installed packges is advised:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">pear channel-update pear.php.net
pear upgrade-all</pre></td></tr></table></div>

<p>Some recommended PEAR packages include:</p>
<p>Template Engines:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">pear <span style="color: #c20cb9; font-weight: bold;">install</span> HTML_QuickForm HTML_Common HTML_Template_Sigma</pre></td></tr></table></div>

<p>PHP-Unit:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">pear channel-discover pear.phpunit.de
pear remote-list <span style="color: #660033;">-c</span> phpunit
pear <span style="color: #c20cb9; font-weight: bold;">install</span> phpunit<span style="color: #000000; font-weight: bold;">/</span>PHPUnit
pear channel-discover components.ez.no
pear <span style="color: #c20cb9; font-weight: bold;">install</span> phpunit<span style="color: #000000; font-weight: bold;">/</span>phpcpd</pre></td></tr></table></div>

<p>Now the <span style="text-decoration: underline">MySQL</span> part:</p>
<p>You can either use standard MySQL/MySQLi or PDO. Since PHP 5.1 PDO comes preinstalled. To install everything just do the following:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> mysql-client mysql-server libmysqlclient15-dev
<span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> mysql-query-browser mysql-admin
<span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php5-mysql</pre></td></tr></table></div>

<p>Those packages include MySQL Query Browser and MySQL Administrator which are quite handy tools to manage MySQL databases and tables.</p>
<p>For debugging your code (e.g. from the Eclipse environment) you have to install XDebug:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php5-xdebug</pre></td></tr></table></div>

<p>As a default configuration you should put the following into <em>/etc/php5/conf.d/xdebug.ini</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">xdebug.profiler_enable_trigger = <span style="color: #000000;">1</span>
xdebug.profiler_enable=<span style="color: #000000;">0</span>
xdebug.profiler_output_dir = <span style="color: #000000; font-weight: bold;">/</span>tmp
xdebug.remote_enable=On
xdebug.remote_host=127.0.0.1
xdebug.remote_port=<span style="color: #000000;">9000</span>
xdebug.remote_handler=<span style="color: #ff0000;">&quot;dbgp&quot;</span>
xdebug.remote_log=<span style="color: #ff0000;">&quot;/tmp/xdebug.log&quot;</span></pre></td></tr></table></div>

<p>This enables you to use XDebug as profiler (by using the parameter XDEBUG_PROFILE=1 as GET/POST parameter when executing your website). It creates a cachegrind file to be analysed (e.g. with kCacheGrind, I will explain that in another tutorial).</p>
<p>At the end don&#8217;t forget to reload Apache2 before starting to work with your system:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">apache2ctl restart</pre></td></tr></table></div>

<p>Now the most important stuff is installed. You might want to install Subversion:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> subversion</pre></td></tr></table></div>

<p>but I will not go into details about using that here.</p>
<p><strong>Applications</strong></p>
<p>To use Eclipse, Aptana or Zend Studio (if you have a license) you need a Java Runtime Engine. Best is to install the default-jre:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> default-jre</pre></td></tr></table></div>

<p>Now you just need to download your favorite IDE (e.g. Eclipse) and you can start developing your applications. Some hints to do that:</p>
<ul>
<li>you can run your local webserver with your user account, just change it in <em>/etc/apache2/envvars</em></li>
<li>to use PEAR packages you need to uncomment the <strong>include_path</strong> part for linux based operating systems in <em>/etc/php5/apache2/php5.ini</em>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.krahn.org/2010/06/installing-ubuntu-10-04-lucid-lynx-for-php-development/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Google AdWords API 2009 &#8211; Overview and First Thoughts</title>
		<link>http://www.krahn.org/2009/05/google-adwords-api-2009-overview-and-first-thoughts/</link>
		<comments>http://www.krahn.org/2009/05/google-adwords-api-2009-overview-and-first-thoughts/#comments</comments>
		<pubDate>Tue, 19 May 2009 09:52:26 +0000</pubDate>
		<dc:creator>ckrahn</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[AdWords]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[APIlity]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[v2009]]></category>

		<guid isPermaLink="false">http://www.krahn.org/?p=38</guid>
		<description><![CDATA[Just recently Google made the new AdWords API 2009 sandbox and documentation available to the public. Some information about it is also in the AdWords API Blog. I have started to toy around with it. I have written a mayor part of the current AdWords API integration for the company I work for, so it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Just recently Google made the new <a href="http://code.google.com/apis/adwords/v2009/docs/">AdWords API 2009 sandbox</a> and documentation available to the public. Some information about it is also in the <a href="http://adwordsapi.blogspot.com/2009/05/client-library-updates-part-1.html">AdWords API Blog</a>.</p>
<p>I have started to toy around with it. I have written a mayor part of the current AdWords API integration for the company I work for, so it&#8217;s best to be prepared for the mayor overhaul Google has done with this new API implementation. Here is a quick overview and some thoughts I have about it.</p>
<h3>Authentication</h3>
<p>Google seems to unify the use of their APIs with a common login interface: the <a href="http://code.google.com/intl/de/apis/accounts/docs/AuthForInstalledApps.html">Account Authentication API</a>. You can make a <a href="http://code.google.com/intl/de/apis/accounts/docs/AuthForInstalledApps.html#Request">HTTPS Post Request to the API</a> and use your Google credentials to get an Auth token. This token then will be used to access the functionalities of the API.</p>
<script type="text/javascript"><!--
google_ad_client = "pub-2203459483521693";
/* 234x60, Erstellt 12.06.10 */
google_ad_slot = "9648426855";
google_ad_width = 234;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<p>I think it is good to unify different kinds of API authentication into a single login service. I just hope that it is stable enough to endure all the load from not just one kind of service but every piece of Google API which will make use of it.</p>
<h3>Accessing the Sandbox</h3>
<p>I created some example codes (will publish some code in another article soon) to access the Google AdWords Sandbox. At first I had some difficulties because I don&#8217;t just use the examples from Google, I created my own kind of library to access the API. That lead to the assumption that I can always use the SOAP end url as namespace &#8211; which was wrong because the namespace for the request XML has to be</p>
<p><code>https://adwords.google.com/api/adwords/cm/v200902</code></p>
<p>while the actual xml request is being sent to</p>
<p><code>https://adwords-sandbox.google.com/api/adwords/cm/v200902/....</code></p>
<p>When sending the wrong namespace the API returns a server error, but no detailed error code about what kind of error occured. I hope Google will improve their error reporting there.</p>
<h3>Get &amp; Mutate &#8211; the new methods of getting data and manipulating data</h3>
<p>Past versions of the AdWords API left the impression of a patchwork API. This time you basically have two functions:</p>
<h4>get</h4>
<p>Getting data is simple: just build an xml which contains all the parameters you need and send it to the API.</p>
<p><em>Example</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">&nbsp;</pre></div></div>

<p>This piece of xml tells the API (assuming the header information with the AuthToken, sorry not posting that one here <img src='http://www.krahn.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) to retrieve all the campaigns in the account. You can limit the campaigns by telling it to only include certain campaign IDs (filling the StatsSelecter/campaignIds node with subnodes containing the actual IDs).</p>
<h4>mutate</h4>
<p>Mutate is the method to create and manipulate data structures in the API.</p>
<p><em>Example</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">&nbsp;
  ADD
&nbsp;
   Test Campaign - 1242726211
   PAUSED
&nbsp;
    DAILY
&nbsp;
     EUR
     1000000
&nbsp;
    STANDARD</pre></div></div>

<p>It tells the API to create a new campaign in the account defined by the client email in the header (again not posted here). The additional OPERATOR tells what kind of operation (ADD, REMOVE, SET). After that all the necessary data for the operation are being added.</p>
<h3>Final words (for now)</h3>
<p>I think the new API is very clean and straight forward, with a new authentication method. The problems I currently see is the amount of work necessary to migrate applications based on the existing API v13 to the new v2009, but if people are using frameworks like <a href="http://google-apility.sourceforge.net/">APIlity</a> or one of the <a href="http://code.google.com/intl/de/apis/adwords/docs/clients.html">other provided libraries</a>, it is safe to assume that new versions will be available soon after the release to make a smooth upgrade.</p>
<p>I am looking forward to work closely with the new API.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.krahn.org/2009/05/google-adwords-api-2009-overview-and-first-thoughts/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>8 Good PHP Tools and Libraries to Create and Test Web Applications</title>
		<link>http://www.krahn.org/2009/05/8-good-php-tools-to-create-and-test-web-applications/</link>
		<comments>http://www.krahn.org/2009/05/8-good-php-tools-to-create-and-test-web-applications/#comments</comments>
		<pubDate>Thu, 14 May 2009 15:30:03 +0000</pubDate>
		<dc:creator>ckrahn</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Libraries]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.krahn.org/?p=24</guid>
		<description><![CDATA[Here is a collection of good PHP code libraries I somewhat use to create web based applications. This collection is about PHP only, in another article I will shortly tell you some good Python and Javascript/AJAX libraries. Zend Framework The Zend Framework is an object-oriented framework which is focusing on web 2.0 applications. It contains [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a collection of good <a href="http://php.net">PHP</a> code libraries I somewhat use to create web based applications. This collection is about PHP only, in another article I will shortly tell you some good Python and Javascript/AJAX libraries.</p>
<h3><a href="http://framework.zend.com/">Zend Framework</a></h3>
<p>The Zend Framework is an object-oriented framework which is focusing on web 2.0 applications. It contains a lot of APIs to webservices like Google, Amazon, Yahoo!, Flickr.</p>
<h3><a href="http://code.google.com/p/php-csv-utils/">CSV Utilities</a></h3>
<p>PHP CSV Utilities or PCU, is a small, open source PHP library to simplify working with CSV files.</p>
<h3><a href="http://phpexcel.codeplex.com/">phpExcel</a></h3>
<p>This project provides a set of classes, which allow you to write to and read from different file formats, like Excel 2007, PDF, HTML, &#8230; This project is built around Microsoft&#8217;s OpenXML standard and PHP.</p>
<h3><a href="http://code.google.com/p/phpquery/">phpQuery</a></h3>
<p>phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library.</p>
<h3><a href="http://code.google.com/p/mc-goog-visualization/">MC_Google_Visualization</a></h3>
<p>MC_Google_Visualization provides simple support for integrating Google Visualization charts and graphs with your own internal database. It includes a complete parser for the Google Visualization Query Language, giving you the same ease of pivoting and formatting data from your database as is currently possible with Google Spreadsheets.</p>
<h3><a href="http://pchart.sourceforge.net/">pChart</a></h3>
<p>pChart is a PHP class oriented framework designed to create aliased charts.</p>
<h3><a href="http://www.firephp.org/">FirePHP</a></h3>
<p>FirePHP enables you to log to your Firebug Console using a simple PHP method call.</p>
<h3><a href="http://www.simpletest.org">SimpleTest</a></h3>
<p>The SimpleTest PHP unit tester is a PHP unit test and web test framework. It has support for SSL, forms, frames, proxies and basic authentication.</p>
<p>If you know any more good PHP libraries and tools, just leave a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.krahn.org/2009/05/8-good-php-tools-to-create-and-test-web-applications/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
