<?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>Zend Framework Blog &#187; PHP</title>
	<atom:link href="http://blog.richardknop.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.richardknop.com</link>
	<description>Zend Framework, PHP, Django, Python, SQL, MySQL, PostgreSQL, Oracle, PL/SQL, data model patterns, OOP, design patterns, JavaScript, jQuery, HTML, XHTML, CSS, XML, web services &#38; APIs, Security, E-commerce and much more</description>
	<lastBuildDate>Sat, 04 Feb 2012 19:47:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Install PHPUnit on FreeBSD 8.2</title>
		<link>http://blog.richardknop.com/2012/02/install-phpunit-on-freebsd-8-2/</link>
		<comments>http://blog.richardknop.com/2012/02/install-phpunit-on-freebsd-8-2/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 19:38:19 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHPUnit]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=746</guid>
		<description><![CDATA[Here is how to install PHPUnit on FreeBSD 8.2 so you can write unit tests for your code: #portsnap fetch #portsnap extract #portsnap update #cd /usr/ports/devel/pear #make #make install #pear channel-discover pear.symfony-project.com #pear install symfony/YAML #pear channel-discover pear.phpunit.de #pear install phpunit/PHPUnit #pear config-get php_dir The last line will show you the directory where PHPUnit was installed. Add [...]]]></description>
			<content:encoded><![CDATA[<p>Here is how to install PHPUnit on FreeBSD 8.2 so you can write unit tests for your code:</p>
<pre>#portsnap fetch
#portsnap extract
#portsnap update
#cd /usr/ports/devel/pear
#make
#make install

#pear channel-discover pear.symfony-project.com
#pear install symfony/YAML

#pear channel-discover pear.phpunit.de
#pear install phpunit/PHPUnit

#pear config-get php_dir</pre>
<p>The last line will show you the directory where PHPUnit was installed. Add it to your include path and you are ready to go:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">set_include_path</span><span class="br0">&#40;</span><span class="st0">&#39;/usr/local/share/pear&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&#39;PHPUnit/Autoload.php&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> FooTest <span class="kw2">extends</span> PHPUnit_Framework_TestCase</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2012/02/install-phpunit-on-freebsd-8-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making Zend Framework run under IIS</title>
		<link>http://blog.richardknop.com/2011/09/making-zend-framework-run-under-iis/</link>
		<comments>http://blog.richardknop.com/2011/09/making-zend-framework-run-under-iis/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 18:47:04 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[IIS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Set up Zend Framework project under IIS 7]]></category>
		<category><![CDATA[Zend Framework IIS rewrite rules]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=666</guid>
		<description><![CDATA[PHP is usually used together with Apache web server but sometimes, mainly during development, it is easier to work on a Windows PC with IIS 7. Fortunately, PHP and IIS 7 are friends and it&#8217;s easy to set up a Zend Framework project under IIS 7 webs server. I have decided to merge together few [...]]]></description>
			<content:encoded><![CDATA[<p>PHP is usually used together with Apache web server but sometimes, mainly during development, it is easier to work on a Windows PC with IIS 7. Fortunately, PHP and IIS 7 are friends and it&#8217;s easy to set up a Zend Framework project under IIS 7 webs server. I have decided to merge together few of my older posts which dealt with smaller parts of the whole process. This post should cover installation of IIS 7, PHP, configuration of PHP in IIS manager and finally setting up a Zend Framework project. Let&#8217;s begin.</p>
<p>First, you need to install PHP. Download it from <a href="http://php.iis.net/">here</a> and install it with default settings. On Windows 7 default installation path should be:</p>
<pre>C:\Program Files (x86)\PHP\v5.3</pre>
<p>Second, install IIS 7. That&#8217;s too easy so I won&#8217;t give you step by step instructions.</p>
<p>Third, we need to set handler mappings for PHP in IIS manager. Click on Start, type IIS and open Internet Information Services (IIS) Manager:</p>
<div id="attachment_667" class="wp-caption aligncenter" style="width: 423px"><a href="http://blog.richardknop.com/wp-content/uploads/2011/09/1.jpg"><img class="size-full wp-image-667" title="Open Internet Information Services (IIS) Manager" src="http://blog.richardknop.com/wp-content/uploads/2011/09/1.jpg" alt="Open Internet Information Services (IIS) Manager" width="413" height="517" /></a><p class="wp-caption-text">Open Internet Information Services (IIS) Manager</p></div>
<p>In IIS Manager click on Handler Mappings:</p>
<div id="attachment_673" class="wp-caption aligncenter" style="width: 611px"><a href="http://blog.richardknop.com/wp-content/uploads/2011/09/2.jpg"><img class="size-full wp-image-673 " title="Click on Handler Mappings in IIS manager" src="http://blog.richardknop.com/wp-content/uploads/2011/09/2.jpg" alt="Click on Handler Mappings in IIS manager" width="601" height="352" /></a><p class="wp-caption-text">Click on Handler Mappings in IIS manager</p></div>
<p>Click on Add Module Mapping. In Request Path field type &#8220;*.php&#8221;, choose &#8220;FastCgiModule&#8221; as Module and type path to your php-cgi.exe file into Executable (Optional) field, in my case &#8220;C:\Program Files (x86)\PHP\v5.3\php-cgi.exe&#8221;. Type &#8220;PHP_via_FastCGI&#8221; into Name field. Click on OK. The handler mapping should look like this:</p>
<div id="attachment_674" class="wp-caption aligncenter" style="width: 613px"><a href="http://blog.richardknop.com/wp-content/uploads/2011/09/3.jpg"><img class="size-full wp-image-674 " title="PHP Handler Mapping" src="http://blog.richardknop.com/wp-content/uploads/2011/09/3.jpg" alt="PHP Handler Mapping" width="603" height="352" /></a><p class="wp-caption-text">PHP Handler Mapping</p></div>
<p>Next, we need to tell IIS manager to treat index.php files as default opening points for PHP websites. Open command line and execute this command:</p>
<pre>%windir%\system32\inetsrv\appcmd.exe set config ^ -section:system.webServer/defaultDocument /+"files.[value='index.php']" ^ /commit:apphost</pre>
<div id="attachment_676" class="wp-caption aligncenter" style="width: 552px"><a href="http://blog.richardknop.com/wp-content/uploads/2011/09/4.jpg"><img class="size-full wp-image-676 " title="Add index.php as default file to IIS 7" src="http://blog.richardknop.com/wp-content/uploads/2011/09/4.jpg" alt="Add index.php as default file to IIS 7" width="542" height="273" /></a><p class="wp-caption-text">Add index.php as default file to IIS 7</p></div>
<p>You should have PHP installed and configured correctly in IIS 7 now. As a checkpoint, create a new website with different port than the default one (e.g. 81), add index.php file with some simple echo statement to its root directory and open it in a web browser.</p>
<div id="attachment_677" class="wp-caption aligncenter" style="width: 613px"><a href="http://blog.richardknop.com/wp-content/uploads/2011/09/5.jpg"><img class="size-full wp-image-677 " title="Create a new website and test your configuration with simple index.php" src="http://blog.richardknop.com/wp-content/uploads/2011/09/5.jpg" alt="Create a new website and test your configuration with simple index.php" width="603" height="352" /></a><p class="wp-caption-text">Create a new website and test your configuration with simple index.php</p></div>
<p>In the case of the image above, the URI of that website would be http://localhost:82/. Open it in your web browser. If everything works fine, we can move on.</p>
<p>Create your usual directory structure for Zend Framework in the root of your newly created website. The only thing left is rewriting URIs. Since IIS 7 does not support .htaccess files we are all used to from Apache environments, you will need to install the <a href="http://www.iis.net/download/urlrewrite">URL Rewrite module for IIS</a>.</p>
<p>You can use my <a href="http://blog.richardknop.com/2009/06/zend-blank-project-v15/">Zend blank project</a> to create a quick basic structure for Zend Framework project with already configured index.php and bootstrap files. Just download the zipped file and unzip its contents inside the root directory of your newly created website. In case of this tutorial that would be C:\inetpub\test_website. The only thing you need to edit is the include path in index.php, so it will point to your Zend Framework library folder.</p>
<p>Create a file named web.config in the public directory of your Zend Framework project and put this XML code there:</p>
<div>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;configuration<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;system</span>.webServer<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;rewrite<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;rules<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;rule</span> <span class="re0">name</span>=<span class="st0">&quot;Imported Rule 1&quot;</span> <span class="re0">stopProcessing</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;match</span> <span class="re0">url</span>=<span class="st0">&quot;^.*$&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;conditions</span> <span class="re0">logicalGrouping</span>=<span class="st0">&quot;MatchAny&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;add</span> <span class="re0">input</span>=<span class="st0">&quot;{REQUEST_FILENAME}&quot;</span> <span class="re0">matchType</span>=<span class="st0">&quot;IsFile&quot;</span> <span class="re0">pattern</span>=<span class="st0">&quot;&quot;</span> <span class="re0">ignoreCase</span>=<span class="st0">&quot;false&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;add</span> <span class="re0">input</span>=<span class="st0">&quot;{REQUEST_FILENAME}&quot;</span> <span class="re0">matchType</span>=<span class="st0">&quot;IsDirectory&quot;</span> <span class="re0">pattern</span>=<span class="st0">&quot;&quot;</span> <span class="re0">ignoreCase</span>=<span class="st0">&quot;false&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/conditions<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;action</span> <span class="re0">type</span>=<span class="st0">&quot;None&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/rule<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;rule</span> <span class="re0">name</span>=<span class="st0">&quot;Imported Rule 2&quot;</span> <span class="re0">stopProcessing</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;match</span> <span class="re0">url</span>=<span class="st0">&quot;^.*$&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;action</span> <span class="re0">type</span>=<span class="st0">&quot;Rewrite&quot;</span> <span class="re0">url</span>=<span class="st0">&quot;index.php&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/rule<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/rules<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/rewrite<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/system</span>.webServer<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/configuration<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
</div>
<div id="attachment_683" class="wp-caption aligncenter" style="width: 611px"><a href="http://blog.richardknop.com/wp-content/uploads/2011/09/6.jpg"><img class="size-full wp-image-683 " title="Create web.config file in public directory and put rewrite rules in it" src="http://blog.richardknop.com/wp-content/uploads/2011/09/6.jpg" alt="Create web.config file in public directory and put rewrite rules in it" width="601" height="425" /></a><p class="wp-caption-text">Create web.config file in public directory and put rewrite rules in it</p></div>
<p>Open your website in the browser and it it should work correctly. In case you used my Zend blank project you should see a page like this:</p>
<div id="attachment_685" class="wp-caption aligncenter" style="width: 604px"><a href="http://blog.richardknop.com/wp-content/uploads/2011/09/11.jpg"><img class="size-full wp-image-685  " title="Hurray! You got Zend Framework working like charm under IIS 7 ;)" src="http://blog.richardknop.com/wp-content/uploads/2011/09/11.jpg" alt="Hurray! You got Zend Framework working like charm under IIS 7 ;)" width="594" height="183" /></a><p class="wp-caption-text">Hurray! You got Zend Framework working like charm under IIS 7 <img src='http://blog.richardknop.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p></div>
<p>Final tip. You might have noticed that IIS 7 by default does not show you any PHP application errors. As a developer surely you need to see the errors so you can fix them. Just open your php.ini file, find display_errors directive and set it to On:</p>
<div id="attachment_687" class="wp-caption aligncenter" style="width: 540px"><a href="http://blog.richardknop.com/wp-content/uploads/2011/09/Untitled.jpg"><img class="size-full wp-image-687 " title="Set display_errors directive in php.ini to On" src="http://blog.richardknop.com/wp-content/uploads/2011/09/Untitled.jpg" alt="Set display_errors directive in php.ini to On" width="530" height="248" /></a><p class="wp-caption-text">Set display_errors directive in php.ini to On</p></div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2011/09/making-zend-framework-run-under-iis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Merge PDF documents with Zend_Pdf</title>
		<link>http://blog.richardknop.com/2011/06/merge-pdf-documents-with-zend_pdf/</link>
		<comments>http://blog.richardknop.com/2011/06/merge-pdf-documents-with-zend_pdf/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 19:23:25 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend_Pdf]]></category>
		<category><![CDATA[ZipArchive]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=653</guid>
		<description><![CDATA[Merging two or more PDF files with Zend_Pdf component of the Zend Framework is really simple. You just need to load the documents into Zend_Pdf instances and then iterate over their pages: // load PDF documents $pdf1 = Zend_Pdf::load&#40;&#39;first.pdf&#39;&#41;; $pdf2 = Zend_Pdf::load&#40;&#39;second.pdf&#39;&#41;; // we will merge our two PDF files into a new Zend_Pdf object [...]]]></description>
			<content:encoded><![CDATA[<p>Merging two or more PDF files with Zend_Pdf component of the Zend Framework is really simple. You just need to load the documents into Zend_Pdf instances and then iterate over their pages:</p>
<div class="geshi no php">
<div class="head">// load PDF documents</div>
<ol>
<li class="li1">
<div class="de1"><span class="re1">$pdf1</span> <span class="sy0">=</span> Zend_Pdf<span class="sy0">::</span><span class="me2">load</span><span class="br0">&#40;</span><span class="st0">&#39;first.pdf&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$pdf2</span> <span class="sy0">=</span> Zend_Pdf<span class="sy0">::</span><span class="me2">load</span><span class="br0">&#40;</span><span class="st0">&#39;second.pdf&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// we will merge our two PDF files into a new Zend_Pdf object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$pdfMerged</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Pdf<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// add all pages from the first PDF to our new document</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$pdf1</span><span class="sy0">-&gt;</span><span class="me1">pages</span> <span class="kw1">as</span> <span class="re1">$page</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$clonedPage</span> <span class="sy0">=</span> clone <span class="re1">$page</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$pdfMerged</span><span class="sy0">-&gt;</span><span class="me1">pages</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$clonedPage</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// add all pages from the second PDF to our new document</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$pdf2</span><span class="sy0">-&gt;</span><span class="me1">pages</span> <span class="kw1">as</span> <span class="re1">$page</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$clonedPage</span> <span class="sy0">=</span> clone <span class="re1">$page</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$pdfMerged</span><span class="sy0">-&gt;</span><span class="me1">pages</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$clonedPage</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">unset</span><span class="br0">&#40;</span><span class="re1">$clonedPage</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// send the merged PDF document to browser</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&#39;Content-type: application/pdf&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="re1">$pdfMerged</span><span class="sy0">-&gt;</span><span class="me1">render</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>A little bonus, if you need to load archived PDF documents (as I needed to recently) and merge them, you can use ZipArchive:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="re1">$zip</span> <span class="sy0">=</span> <span class="kw2">new</span> ZipArchive<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$res</span> <span class="sy0">=</span> <span class="re1">$zip</span><span class="sy0">-&gt;</span><span class="me1">open</span><span class="br0">&#40;</span><span class="st0">&#39;zipped_PDF_File.zip&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$pdf</span> <span class="sy0">=</span> Zend_Pdf<span class="sy0">::</span><span class="me2">parse</span><span class="br0">&#40;</span><span class="re1">$zip</span><span class="sy0">-&gt;</span><span class="me1">getFromIndex</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Hope somebody finds it useful <img src='http://blog.richardknop.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2011/06/merge-pdf-documents-with-zend_pdf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend Framework rewrite rules for IIS7 web server</title>
		<link>http://blog.richardknop.com/2011/02/zend-framework-rewrite-rules-for-iis7-web-server/</link>
		<comments>http://blog.richardknop.com/2011/02/zend-framework-rewrite-rules-for-iis7-web-server/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 22:35:23 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[IIS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend Framework IIS rewrite rules]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=639</guid>
		<description><![CDATA[UPDATE: I wrote a new more complete post explaining Zend Framework and IIS 7 configuration steb by step: Making Zend Framework run under IIS If you are developing on a Windows PC you might want to use the native Windows web server IIS7 to run PHP. I do it that way. Since IIS neither accepts [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE:</strong> I wrote a new more complete post explaining Zend Framework and IIS 7 configuration steb by step: <a href="http://blog.richardknop.com/2011/09/making-zend-framework-run-under-iis/">Making Zend Framework run under IIS</a></p>
<p>If you are developing on a Windows PC you might want to use the native Windows web server IIS7 to run PHP. I do it that way. Since IIS neither accepts nor understands .htaccess files you will have to use a different approach to set up a Zend Framework project.</p>
<p>You will need to install the <a href="http://www.iis.net/download/urlrewrite">URL Rewrite module for IIS</a>. Then just create a file called web.config in the public directory and put the following XML inside:</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;configuration<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;system</span>.webServer<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;rewrite<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;rules<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;rule</span> <span class="re0">name</span>=<span class="st0">&quot;Imported Rule 1&quot;</span> <span class="re0">stopProcessing</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;match</span> <span class="re0">url</span>=<span class="st0">&quot;^.*$&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;conditions</span> <span class="re0">logicalGrouping</span>=<span class="st0">&quot;MatchAny&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;add</span> <span class="re0">input</span>=<span class="st0">&quot;{REQUEST_FILENAME}&quot;</span> <span class="re0">matchType</span>=<span class="st0">&quot;IsFile&quot;</span> <span class="re0">pattern</span>=<span class="st0">&quot;&quot;</span> <span class="re0">ignoreCase</span>=<span class="st0">&quot;false&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;add</span> <span class="re0">input</span>=<span class="st0">&quot;{REQUEST_FILENAME}&quot;</span> <span class="re0">matchType</span>=<span class="st0">&quot;IsDirectory&quot;</span> <span class="re0">pattern</span>=<span class="st0">&quot;&quot;</span> <span class="re0">ignoreCase</span>=<span class="st0">&quot;false&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/conditions<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;action</span> <span class="re0">type</span>=<span class="st0">&quot;None&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/rule<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;rule</span> <span class="re0">name</span>=<span class="st0">&quot;Imported Rule 2&quot;</span> <span class="re0">stopProcessing</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;match</span> <span class="re0">url</span>=<span class="st0">&quot;^.*$&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;action</span> <span class="re0">type</span>=<span class="st0">&quot;Rewrite&quot;</span> <span class="re0">url</span>=<span class="st0">&quot;index.php&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/rule<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/rules<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/rewrite<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/system</span>.webServer<span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/configuration<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Instead of manually creating the file you can also use the IIS Manager and import the rewrite rules through its interface.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2011/02/zend-framework-rewrite-rules-for-iis7-web-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend_Logger date() warning</title>
		<link>http://blog.richardknop.com/2011/02/zend_logger-date-warning/</link>
		<comments>http://blog.richardknop.com/2011/02/zend_logger-date-warning/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 22:22:52 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend_Logger]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=637</guid>
		<description><![CDATA[If you are getting a warning like this when you&#8217;re trying to write something to a log file with Zend_Logger: Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you [...]]]></description>
			<content:encoded><![CDATA[<p>If you are getting a warning like this when you&#8217;re trying to write something to a log file with Zend_Logger:</p>
<pre>Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Paris' for '1.0/no DST' instead in C:\inetpub\wwwroot\zend\library\Zend\Log.php on line 308</pre>
<p>The solution is simple. I f you have access to your php.ini configuration file, just look for a line starting with:</p>
<pre>date.timezone =</pre>
<p>And put your timezone there, for example I used:</p>
<pre>date.timezone = "Europe/Paris"</pre>
<p>If you cannot edit the php.ini file, use this inside your PHP script:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">date_default_timezone_set<span class="br0">&#40;</span><span class="st0">&quot;Europe/Paris&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2011/02/zend_logger-date-warning/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend_Navigation add class to active link</title>
		<link>http://blog.richardknop.com/2010/09/zend_navigation-add-class-to-active-link/</link>
		<comments>http://blog.richardknop.com/2010/09/zend_navigation-add-class-to-active-link/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 15:49:00 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend controller plugins]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=621</guid>
		<description><![CDATA[It is often useful to highlight an active navigation menu link so users are clear about where they are. It is usually done by adding a class (for instance: &#8220;active&#8221;) to a link which points to a current request URI. When using Zend_Navigation it is a bit more complicated. I am using a controller plugin [...]]]></description>
			<content:encoded><![CDATA[<p>It is often useful to highlight an active navigation menu link so users are clear about where they are. It is usually done by adding a class (for instance: &#8220;active&#8221;) to a link which points to a current request URI. When using Zend_Navigation it is a bit more complicated. I am using a controller plugin to add the class to the active link during the routeShutdown event:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> My_Controller_Plugin_PrepareNavigation <span class="kw2">extends</span> Zend_Controller_Plugin_Abstract</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> routeShutdown<span class="br0">&#40;</span>Zend_Controller_Request_Abstract <span class="re1">$request</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$viewRenderer</span> <span class="sy0">=</span> Zend_Controller_Action_HelperBroker<span class="sy0">::</span><span class="me2">getExistingHelper</span><span class="br0">&#40;</span><span class="st0">&#39;ViewRenderer&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$viewRenderer</span><span class="sy0">-&gt;</span><span class="me1">initView</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$view</span> <span class="sy0">=</span> <span class="re1">$viewRenderer</span><span class="sy0">-&gt;</span><span class="me1">view</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$container</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Navigation<span class="br0">&#40;</span>Zend_Registry<span class="sy0">::</span><span class="me2">get</span><span class="br0">&#40;</span><span class="st0">&#39;configuration&#39;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">navigation</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$container</span><span class="sy0">-&gt;</span><span class="me1">getPages</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re1">$page</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$uri</span> <span class="sy0">=</span> <span class="re1">$page</span><span class="sy0">-&gt;</span><span class="me1">getHref</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$uri</span> <span class="sy0">===</span> <span class="re1">$request</span><span class="sy0">-&gt;</span><span class="me1">getRequestUri</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$page</span><span class="sy0">-&gt;</span><span class="me1">setClass</span><span class="br0">&#40;</span><span class="st0">&#39;active&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$view</span><span class="sy0">-&gt;</span><span class="me1">navigation</span><span class="br0">&#40;</span><span class="re1">$container</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2010/09/zend_navigation-add-class-to-active-link/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Action helper that converts SQL result to XML</title>
		<link>http://blog.richardknop.com/2010/09/action-helper-that-converts-sql-result-to-xml/</link>
		<comments>http://blog.richardknop.com/2010/09/action-helper-that-converts-sql-result-to-xml/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 15:43:09 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend action helpers]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=617</guid>
		<description><![CDATA[Here is a simple Zend Framework controller action helper that converts SQL result to XML. The SQL result should be fetched as an object or an array of objects: &#60;?php class My_Controller_Action_Helper_SqlToXml extends Zend_Controller_Action_Helper_Abstract &#123; &#160; &#160; public function direct&#40;$sqlResult, $rootElementName, $childElementName, $singleRow, $encoding = &#39;UTF-8&#39;&#41; &#160; &#160; &#123; &#160; &#160; &#160; &#160; // create [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a simple Zend Framework controller action helper that converts SQL result to XML. The SQL result should be fetched as an object or an array of objects:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> My_Controller_Action_Helper_SqlToXml <span class="kw2">extends</span> Zend_Controller_Action_Helper_Abstract</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> direct<span class="br0">&#40;</span><span class="re1">$sqlResult</span><span class="sy0">,</span> <span class="re1">$rootElementName</span><span class="sy0">,</span> <span class="re1">$childElementName</span><span class="sy0">,</span> <span class="re1">$singleRow</span><span class="sy0">,</span> <span class="re1">$encoding</span> <span class="sy0">=</span> <span class="st0">&#39;UTF-8&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// create XML documnt &nbsp; &nbsp; &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$doc</span> <span class="sy0">=</span> <span class="kw2">new</span> DomDocument<span class="br0">&#40;</span><span class="st0">&#39;1.0&#39;</span><span class="sy0">,</span> <span class="re1">$encoding</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// insert a root element</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$root</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">createElement</span><span class="br0">&#40;</span><span class="re1">$rootElementName</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$root</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">appendChild</span><span class="br0">&#40;</span><span class="re1">$root</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// if the SQL result set contains only a singler row</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">true</span> <span class="sy0">===</span> <span class="re1">$singleRow</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$xmlData</span> <span class="sy0">.=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">rowToXml</span><span class="br0">&#40;</span><span class="re1">$doc</span><span class="sy0">,</span> <span class="re1">$root</span><span class="sy0">,</span> <span class="re1">$sqlResult</span><span class="sy0">,</span> <span class="re1">$childElementName</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// if the SQL result set is an object array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">false</span> <span class="sy0">===</span> <span class="re1">$singleRow</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$sqlResult</span> <span class="kw1">as</span> <span class="re1">$row</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$xmlData</span> <span class="sy0">.=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">rowToXml</span><span class="br0">&#40;</span><span class="re1">$doc</span><span class="sy0">,</span> <span class="re1">$root</span><span class="sy0">,</span> <span class="re1">$row</span><span class="sy0">,</span> <span class="re1">$childElementName</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// return XML string</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">saveXML</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> rowToXml<span class="br0">&#40;</span><span class="re1">$doc</span><span class="sy0">,</span> <span class="re1">$root</span><span class="sy0">,</span> <span class="re1">$row</span><span class="sy0">,</span> <span class="re1">$childElementName</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// insert a child element</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$occ</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">createElement</span><span class="br0">&#40;</span><span class="re1">$childElementName</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$occ</span> <span class="sy0">=</span> <span class="re1">$root</span><span class="sy0">-&gt;</span><span class="me1">appendChild</span><span class="br0">&#40;</span><span class="re1">$occ</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// iterate through each public object property and insert a shild element</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$row</span> <span class="kw1">as</span> <span class="re1">$property</span> <span class="sy0">=&gt;</span> <span class="re1">$value</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$child</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">createElement</span><span class="br0">&#40;</span><span class="re1">$property</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$child</span> <span class="sy0">=</span> <span class="re1">$occ</span><span class="sy0">-&gt;</span><span class="me1">appendChild</span><span class="br0">&#40;</span><span class="re1">$child</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$childValue</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">createTextNode</span><span class="br0">&#40;</span><span class="re1">$value</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$childValue</span> <span class="sy0">=</span> <span class="re1">$child</span><span class="sy0">-&gt;</span><span class="me1">appendChild</span><span class="br0">&#40;</span><span class="re1">$childValue</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Hope some of you will find it useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2010/09/action-helper-that-converts-sql-result-to-xml/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Solution to &#8220;imagettfbbox() [function.imagettfbbox]: Could not find/open font&#8221;</title>
		<link>http://blog.richardknop.com/2010/08/solution-to-imagettfbbox-function-imagettfbbox-could-not-findopen-font/</link>
		<comments>http://blog.richardknop.com/2010/08/solution-to-imagettfbbox-function-imagettfbbox-could-not-findopen-font/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 21:09:41 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=613</guid>
		<description><![CDATA[If you are using the imagettfbbox() PHP function and come across this error: imagettfbbox() [function.imagettfbbox]: Could not find/open font The solution is to use neither relative nor absolute path to the font but to use a path like this: $font = './arial.ttf';]]></description>
			<content:encoded><![CDATA[<p>If you are using the <a href="http://php.net/manual/en/function.imagettfbbox.php">imagettfbbox()</a> PHP function and come across this error:</p>
<pre><strong>imagettfbbox() [function.imagettfbbox]: Could not find/open font</strong></pre>
<p>The solution is to use neither relative nor absolute path to the font but to use a path like this:</p>
<pre><strong>$font = './arial.ttf';</strong></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2010/08/solution-to-imagettfbbox-function-imagettfbbox-could-not-findopen-font/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Send email with attachment with PHP mail()</title>
		<link>http://blog.richardknop.com/2010/07/send-email-with-attachment-with-phps-mail/</link>
		<comments>http://blog.richardknop.com/2010/07/send-email-with-attachment-with-phps-mail/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 17:47:58 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP email with attachment]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=608</guid>
		<description><![CDATA[I am posting this function mainly for my own reference. I am making sure I can just copy and paste this function in the future without having to go through that silly headers mambo jumbo again. This function will correctly map a file extension to a mime type and send both plain text and html [...]]]></description>
			<content:encoded><![CDATA[<p>I am posting this function mainly for my own reference. I am making sure I can just copy and paste this function in the future without having to go through that silly headers mambo jumbo again. This function will correctly map a file extension to a mime type and send both plain text and html versions of email. Here it is:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> sendEmailWithAttachment<span class="br0">&#40;</span><span class="re1">$toName</span><span class="sy0">,</span> <span class="co1">// recipient&#39;s name</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re1">$toEmail</span><span class="sy0">,</span> <span class="co1">// recipient&#39;s email</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re1">$fromName</span><span class="sy0">,</span> <span class="co1">// sender&#39;s name</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re1">$fromEmail</span><span class="sy0">,</span> <span class="co1">// sender&#39;s email</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re1">$emailText</span><span class="sy0">,</span> <span class="co1">// plain text email body</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re1">$emailHtml</span><span class="sy0">,</span> <span class="co1">// html email body</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re1">$fileToAttach</span> <span class="coMULTI">/* path to a file you want to attach */</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$emailText</span> <span class="sy0">=</span> <span class="kw3">wordwrap</span><span class="br0">&#40;</span><span class="re1">$emailText</span><span class="sy0">,</span> <span class="nu0">70</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$headers</span> &nbsp;<span class="sy0">=</span> <span class="st0">&quot;To: $toName &lt;$toEmail&gt;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$headers</span> <span class="sy0">.=</span> <span class="st0">&quot;From: $fromName &lt;$fromEmail&gt;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$random_hash</span> <span class="sy0">=</span> <span class="kw3">md5</span><span class="br0">&#40;</span><span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&#39;r&#39;</span><span class="sy0">,</span> <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$headers</span> <span class="sy0">.=</span> <span class="st0">&#39;Content-Type: multipart/mixed; boundary=&quot;PHP-mixed-&#39;</span> <span class="sy0">.</span> <span class="re1">$random_hash</span> <span class="sy0">.</span> <span class="st0">&#39;&quot;&#39;</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$mimeTypes</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;323&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/h323&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;acx&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/internet-property-stream&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ai&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/postscript&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;aif&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/x-aiff&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;aifc&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/x-aiff&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;aiff&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/x-aiff&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;asf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/x-ms-asf&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;asr&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/x-ms-asf&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;asx&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/x-ms-asf&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;au&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/basic&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;avi&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/x-msvideo&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;axs&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/olescript&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;bas&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/plain&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;bcpio&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-bcpio&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;bin&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/octet-stream&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;bmp&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/bmp&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;c&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/plain&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;cat&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-pkiseccat&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;cdf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-cdf&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;cer&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-x509-ca-cert&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;class&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/octet-stream&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;clp&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msclip&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;cmx&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-cmx&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;cod&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/cis-cod&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;cpio&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-cpio&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;crd&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-mscardfile&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;crl&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/pkix-crl&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;crt&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-x509-ca-cert&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;csh&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-csh&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;css&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/css&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;dcr&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-director&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;der&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-x509-ca-cert&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;dir&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-director&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;dll&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msdownload&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;dms&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/octet-stream&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;doc&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/msword&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;dot&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/msword&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;dvi&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-dvi&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;dxr&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-director&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;eps&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/postscript&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;etx&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/x-setext&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;evy&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/envoy&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;exe&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/octet-stream&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;fif&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/fractals&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;flr&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;x-world/x-vrml&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;gif&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/gif&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;gtar&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-gtar&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;gz&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-gzip&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;h&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/plain&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;hdf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-hdf&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;hlp&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/winhlp&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;hqx&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/mac-binhex40&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;hta&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/hta&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;htc&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/x-component&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;htm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/html&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;html&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/html&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;htt&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/webviewhtml&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ico&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-icon&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ief&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/ief&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;iii&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-iphone&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ins&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-internet-signup&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;isp&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-internet-signup&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;jfif&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/pipeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;jpe&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/jpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;jpeg&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/jpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;jpg&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/jpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;js&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-javascript&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;latex&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-latex&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;lha&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/octet-stream&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;lsf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/x-la-asf&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;lsx&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/x-la-asf&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;lzh&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/octet-stream&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;m13&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msmediaview&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;m14&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msmediaview&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;m3u&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/x-mpegurl&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;man&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-troff-man&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mdb&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msaccess&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;me&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-troff-me&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mht&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;message/rfc822&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mhtml&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;message/rfc822&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mid&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/mid&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mny&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msmoney&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mov&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/quicktime&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;movie&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/x-sgi-movie&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mp2&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/mpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mp3&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/mpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mpa&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/mpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mpe&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/mpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mpeg&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/mpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mpg&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/mpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mpp&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-project&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mpv2&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/mpeg&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ms&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-troff-ms&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mvb&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msmediaview&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;nws&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;message/rfc822&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;oda&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/oda&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;p10&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/pkcs10&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;p12&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-pkcs12&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;p7b&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-pkcs7-certificates&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;p7c&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-pkcs7-mime&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;p7m&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-pkcs7-mime&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;p7r&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-pkcs7-certreqresp&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;p7s&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-pkcs7-signature&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pbm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-portable-bitmap&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pdf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/pdf&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pfx&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-pkcs12&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pgm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-portable-graymap&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pko&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/ynd.ms-pkipko&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pma&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-perfmon&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pmc&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-perfmon&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pml&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-perfmon&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pmr&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-perfmon&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pmw&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-perfmon&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pnm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-portable-anymap&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pot&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-powerpoint&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ppm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-portable-pixmap&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pps&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-powerpoint&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ppt&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-powerpoint&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;prf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/pics-rules&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ps&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/postscript&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;pub&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-mspublisher&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;qt&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;video/quicktime&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ra&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/x-pn-realaudio&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ram&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/x-pn-realaudio&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ras&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-cmu-raster&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;rgb&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-rgb&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;rmi&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/mid&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;roff&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-troff&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;rtf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/rtf&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;rtx&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/richtext&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;scd&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msschedule&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;sct&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/scriptlet&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;setpay&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/set-payment-initiation&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;setreg&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/set-registration-initiation&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;sh&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-sh&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;shar&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-shar&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;sit&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-stuffit&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;snd&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/basic&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;spc&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-pkcs7-certificates&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;spl&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/futuresplash&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;src&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-wais-source&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;sst&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-pkicertstore&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;stl&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-pkistl&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;stm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/html&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;svg&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/svg+xml&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;sv4cpio&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-sv4cpio&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;sv4crc&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-sv4crc&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;t&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-troff&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;tar&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-tar&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;tcl&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-tcl&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;tex&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-tex&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;texi&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-texinfo&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;texinfo&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-texinfo&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;tgz&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-compressed&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;tif&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/tiff&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;tiff&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/tiff&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;tr&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-troff&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;trm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msterminal&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;tsv&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/tab-separated-values&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;txt&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/plain&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;uls&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/iuls&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;ustar&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-ustar&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;vcf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/x-vcard&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;vrml&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;x-world/x-vrml&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;wav&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;audio/x-wav&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;wcm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-works&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;wdb&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-works&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;wks&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-works&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;wmf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-msmetafile&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;wps&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-works&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;wri&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-mswrite&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;wrl&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;x-world/x-vrml&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;wrz&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;x-world/x-vrml&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xaf&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;x-world/x-vrml&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xbm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-xbitmap&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xla&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-excel&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xlc&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-excel&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xlm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-excel&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xls&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-excel&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xlt&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-excel&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xlw&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/vnd.ms-excel&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xof&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;x-world/x-vrml&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xpm&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-xpixmap&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;xwd&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;image/x-xwindowdump&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;z&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/x-compress&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;zip&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;application/zip&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$extension</span> <span class="sy0">=</span> <span class="kw3">end</span><span class="br0">&#40;</span><span class="kw3">explode</span><span class="br0">&#40;</span><span class="st0">&#39;.&#39;</span><span class="sy0">,</span> <span class="re1">$fileToAttach</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$mimeType</span> <span class="sy0">=</span> <span class="re1">$mimeTypes</span><span class="br0">&#91;</span><span class="re1">$extension</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$fileName</span> <span class="sy0">=</span> <span class="kw3">end</span><span class="br0">&#40;</span><span class="kw3">explode</span><span class="br0">&#40;</span><span class="st0">&#39;/&#39;</span><span class="sy0">,</span> <span class="re1">$fileToAttach</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$attachment</span> <span class="sy0">=</span> <span class="kw3">chunk_split</span><span class="br0">&#40;</span><span class="kw3">base64_encode</span><span class="br0">&#40;</span><span class="kw3">file_get_contents</span><span class="br0">&#40;</span><span class="re1">$fileToAttach</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$output</span> <span class="sy0">=</span> <span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8211;PHP-mixed-$random_hash;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Content-Type: multipart/alternative; boundary=&#39;PHP-alt-$random_hash&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8211;PHP-alt-$random_hash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Content-Type: text/plain; charset=&#39;iso-8859-1&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Content-Transfer-Encoding: 7bit</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">$emailText</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8211;PHP-alt-$random_hash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Content-Type: text/html; charset=&#39;iso-8859-1&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Content-Transfer-Encoding: 7bit</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">$emailHtml</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8211;PHP-alt-$random_hash&#8211;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8211;PHP-mixed-$random_hash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Content-Type: application/$mimeType; name=$fileName</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Content-Transfer-Encoding: base64</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Content-Disposition: attachment</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">$attachment</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8211;PHP-mixed-$random_hash&#8211;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw3">mail</span><span class="br0">&#40;</span><span class="re1">$toEmail</span><span class="sy0">,</span> <span class="re1">$subject</span><span class="sy0">,</span> <span class="re1">$output</span><span class="sy0">,</span> <span class="re1">$headers</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Hope somebody will find it useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2010/07/send-email-with-attachment-with-phps-mail/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend Framework content negotiation plugin</title>
		<link>http://blog.richardknop.com/2010/07/zend-framework-content-negotiation-plugin/</link>
		<comments>http://blog.richardknop.com/2010/07/zend-framework-content-negotiation-plugin/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 17:33:41 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Content negotiation]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=601</guid>
		<description><![CDATA[Even though most designers write nice and valid XHTML it usually gets served to browser as text/html. In other words, what browser sees is a chaotic tag soup instead of XML (remember that while HTML was based on SGML, XHTML is based on XML or it is a reformulation of HTML in XML). The major [...]]]></description>
			<content:encoded><![CDATA[<p>Even though most designers write nice and valid XHTML it usually gets served to browser as text/html. In other words, what browser sees is a chaotic tag soup instead of XML (remember that while HTML was based on SGML, XHTML is based on XML or it is a reformulation of HTML in XML). The major reason why XHTML pages are getting served as text/html is infamous Internet Explorer which does not support serving XHTML the correct way (as XML). But why should your website suffer because of one browser? You can serve the tag soup to IE and serve XML to other browsers. This is called <strong>content negotiation</strong> and I&#8217;m going to show you a simple Zend Fraemwork controller plugin that will negotiate different content to different browsers:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> My_Controller_Plugin_NegotiateContent <span class="kw2">extends</span> Zend_Controller_Plugin_Abstract</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> preDispatch<span class="br0">&#40;</span>Zend_Controller_Request_Abstract <span class="re1">$request</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$viewRenderer</span> <span class="sy0">=</span> Zend_Controller_Action_HelperBroker<span class="sy0">::</span><span class="me2">getExistingHelper</span><span class="br0">&#40;</span><span class="st0">&#39;ViewRenderer&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$viewRenderer</span><span class="sy0">-&gt;</span><span class="me1">initView</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$view</span> <span class="sy0">=</span> <span class="re1">$viewRenderer</span><span class="sy0">-&gt;</span><span class="me1">view</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// content negotiation</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&#39;Vary: Accept&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">false</span> <span class="sy0">===</span> <span class="kw3">stristr</span><span class="br0">&#40;</span><span class="re1">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#39;HTTP_ACCEPT&#39;</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="st0">&#39;application/xhtml+xml&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&#39;Content-Type: text/html; charset=utf-8&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$view</span><span class="sy0">-&gt;</span><span class="me1">doctype</span><span class="br0">&#40;</span><span class="st0">&#39;HTML4_STRICT&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$view</span><span class="sy0">-&gt;</span><span class="me1">headMeta</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">appendHttpEquiv</span><span class="br0">&#40;</span><span class="st0">&#39;Content-Type&#39;</span><span class="sy0">,</span> <span class="st0">&#39;text/html; charset=UTF-8&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$view</span><span class="sy0">-&gt;</span><span class="me1">xhtmlAllowed</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&#39;Content-Type: application/xhtml+xml; charset=utf-8&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$view</span><span class="sy0">-&gt;</span><span class="me1">doctype</span><span class="br0">&#40;</span><span class="st0">&#39;XHTML1_STRICT&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$view</span><span class="sy0">-&gt;</span><span class="me1">headMeta</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">appendHttpEquiv</span><span class="br0">&#40;</span><span class="st0">&#39;Content-Type&#39;</span><span class="sy0">,</span> <span class="st0">&#39;application/xhtml+xml; charset=UTF-8&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$view</span><span class="sy0">-&gt;</span><span class="me1">xhtmlAllowed</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>This plugin will serve HTML 4.01 Strict as text/html to IE and XHTML 1.0 Strict as application/xhtml+xml to other browsers.</p>
<p>The only thing you need to do is to register the plugin to the front controller during bootstrapping:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="re1">$frontController</span><span class="sy0">-&gt;</span><span class="me1">registerPlugin</span><span class="br0">&#40;</span><span class="kw2">new</span> My_Controller_Plugin_NegotiateContent<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>And it will take care of content negotiation. The plugin will also set a boolean view variable $view-&gt;xhtmlAllowed so you can use different markups in layouts and views if needed (&lt;img&gt; in HTML and &lt;img /&gt; in XHTML).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2010/07/zend-framework-content-negotiation-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

