<?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; Zend Framework</title>
	<atom:link href="http://blog.richardknop.com/category/zend-framework/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>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>Zend Framework &#8211; MixedCase or ACRONYMCase Survey</title>
		<link>http://blog.richardknop.com/2010/07/zend-framework-mixedcase-or-acronymcase-survey/</link>
		<comments>http://blog.richardknop.com/2010/07/zend-framework-mixedcase-or-acronymcase-survey/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 21:18:31 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=606</guid>
		<description><![CDATA[So Matthew Weier O&#8217;Phinney and the rest of the Zend Framework team have started to convert all code to use ACRONYMCase casing. However, they&#8217;re not done yet and they have decided to let people decide whether to use MixedCase or ACRONYMCase. If you&#8217;d like to have your say in this matter simply visit this website [...]]]></description>
			<content:encoded><![CDATA[<p>So Matthew Weier O&#8217;Phinney and the rest of the Zend Framework team have started to convert all code to use ACRONYMCase casing. However, they&#8217;re not done yet and they have decided to let people decide whether to use MixedCase or ACRONYMCase. If you&#8217;d like to have your say in this matter simply visit <a href="http://spreadsheets.google.com/viewform?formkey=dEtsV1NxLUYtOWZKTTN1cmVibV8tbEE6MQ">this website</a> and vote in the survey.</p>
<p>The poll will probably get closed in few days so hurry.</p>
<p>Personally, I have voted for ZF classes to enforce MixedCasing. I find it much more readable than ACRONYMCasing. XmlHttpRequest is prettier and more readable than XMLHTTPRequest, don&#8217;t you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2010/07/zend-framework-mixedcase-or-acronymcase-survey/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>
		<item>
		<title>How to register a new phpBB user with Zend Framework</title>
		<link>http://blog.richardknop.com/2010/05/how-to-register-a-new-phpbb-user-with-zend-framework/</link>
		<comments>http://blog.richardknop.com/2010/05/how-to-register-a-new-phpbb-user-with-zend-framework/#comments</comments>
		<pubDate>Thu, 20 May 2010 21:44:02 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[phpBB]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=580</guid>
		<description><![CDATA[You might need to integrate one of your future Zend Framework applications with phpBB forum software. The most important aspect of such integration is a dual sign up process. In other words, you want to avoid having users sign up at both the application and phpBB forum. The simplest solution is to have a single [...]]]></description>
			<content:encoded><![CDATA[<p>You might need to integrate one of your future Zend Framework applications with <a href="http://www.phpbb.com/">phpBB</a> forum software. The most important aspect of such integration is a dual sign up process. In other words, you want to avoid having users sign up at both the application and phpBB forum. The simplest solution is to have a single sign up form in your ZF application which upon submission will register user details in both your application and the phpBB forum. I will show you how to do that assuming both applications are on the same server.</p>
<p>The sign up form should have at least these fields:</p>
<ul>
<li>email</li>
<li>username</li>
<li>password</li>
</ul>
<div class="geshi no php">
<div class="head">// first of all, let&#39;s get the submitted form data</div>
<ol>
<li class="li1">
<div class="de1"><span class="re1">$data</span> <span class="sy0">=</span> <span class="re1">$form</span><span class="sy0">-&gt;</span><span class="me1">getValues</span><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">//</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// here you would use the data to register user in the ZF application</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// once the user has been registered at the application level,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// let&#39;s use the same data to register him/her at the phpBB level</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$db</span> <span class="sy0">=</span> Zend_Registry<span class="sy0">::</span><span class="me2">get</span><span class="br0">&#40;</span><span class="st0">&#39;dbAdapter&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$phpbbUserIp</span> <span class="sy0">=</span> <span class="st0">&#39;127.0.0.1&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// if IP is valid include it in the INSERT query</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$validator</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Validate_Ip<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$validator</span><span class="sy0">-&gt;</span><span class="me1">isValid</span><span class="br0">&#40;</span><span class="re1">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#39;REMOTE_ADDR&#39;</span><span class="br0">&#93;</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; <span class="re1">$phpbbUserIp</span> <span class="sy0">=</span> <span class="re1">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#39;REMOTE_ADDR&#39;</span><span class="br0">&#93;</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">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$sql</span> <span class="sy0">=</span> <span class="st0">&#39;INSERT INTO phpbb_users (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_type,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;group_id,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_permissions,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;username,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;username_clean,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_password,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_email,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_email_hash,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_timezone,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_lang,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_ip,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_regdate,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;user_dateformat)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$stmt</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Db_Statement_Pdo<span class="br0">&#40;</span><span class="re1">$db</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$sql</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$stmt</span><span class="sy0">-&gt;</span><span class="me1">execute</span><span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;username&#39;</span><span class="br0">&#93;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;username&#39;</span><span class="br0">&#93;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$this</span><span class="sy0">-&gt;</span>_helper<span class="sy0">-&gt;</span><span class="me1">PhpbbHash</span><span class="br0">&#40;</span><span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;password&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;email&#39;</span><span class="br0">&#93;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">sprintf</span><span class="br0">&#40;</span><span class="st0">&#39;%u&#39;</span><span class="sy0">,</span> <span class="kw3">crc32</span><span class="br0">&#40;</span><span class="kw3">strtolower</span><span class="br0">&#40;</span><span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;email&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;email&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1.00</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;sk&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$phpbbUserIp</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">time</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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;D M d, Y g:i a&#39;</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">$stmt</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Db_Statement_Pdo<span class="br0">&#40;</span><span class="re1">$db</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;SELECT user_id FROM phpbb_users WHERE user_email = ? LIMIT 1&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$stmt</span><span class="sy0">-&gt;</span><span class="me1">execute</span><span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;email&#39;</span><span class="br0">&#93;</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">$userId</span> <span class="sy0">=</span> <span class="re1">$stmt</span><span class="sy0">-&gt;</span><span class="me1">fetchColumn</span><span class="br0">&#40;</span><span class="nu0">0</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">$stmt</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Db_Statement_Pdo<span class="br0">&#40;</span><span class="re1">$db</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;INSERT INTO phpbb_user_group (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;group_id,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;user_id,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;group_leader,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;user_pending)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VALUES (?, ?, ?, ?)&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$stmt</span><span class="sy0">-&gt;</span><span class="me1">execute</span><span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="sy0">,</span> <span class="re1">$userId</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$stmt</span><span class="sy0">-&gt;</span><span class="me1">execute</span><span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="nu0">7</span><span class="sy0">,</span> <span class="re1">$userId</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>There are few tiny things you will probably need to modify according to your application. I chose Slovak language (&#8216;sk&#8217;) and GMT+1 time zone (&#8217;1.00&#8242;) which is a time for central Europe. I also used a controller action helper PhpbbHash above. The helper is here:</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="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* PhpbbHash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Just a phpbb hashing algorithm rewritten in a form of controller action helper.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* The reason for this is because we want users to be registered simultaneously</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* at both the main website and the phpbb forum so we will need to add a row to</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* phpbb_users table during registration at the main website.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @author PHPBB</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> My_Controller_Action_Helper_PhpbbHash <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">$password</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">$itoa64</span> <span class="sy0">=</span> <span class="st0">&#39;./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&#39;</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="re1">$random_state</span> <span class="sy0">=</span> <span class="st0">&#39;123456789012&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$random</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$count</span> <span class="sy0">=</span> <span class="nu0">6</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="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re1">$fh</span> <span class="sy0">=</span> <span class="sy0">@</span><span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&#39;/dev/urandom&#39;</span><span class="sy0">,</span> <span class="st0">&#39;rb&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$random</span> <span class="sy0">=</span> <span class="kw3">fread</span><span class="br0">&#40;</span><span class="re1">$fh</span><span class="sy0">,</span> <span class="re1">$count</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="kw3">fclose</span><span class="br0">&#40;</span><span class="re1">$fh</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re1">$random</span><span class="br0">&#41;</span> <span class="sy0">&lt;</span> <span class="re1">$count</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$random</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</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; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="re1">$count</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">+=</span> <span class="nu0">16</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$random_state</span> <span class="sy0">=</span> <span class="kw3">md5</span><span class="br0">&#40;</span><span class="st0">&#39;123456789012&#39;</span> <span class="sy0">.</span> <span class="re1">$random_state</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$random</span> <span class="sy0">.=</span> <span class="kw3">pack</span><span class="br0">&#40;</span><span class="st0">&#39;H*&#39;</span><span class="sy0">,</span> <span class="kw3">md5</span><span class="br0">&#40;</span><span class="re1">$random_state</span><span class="br0">&#41;</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; &nbsp; &nbsp; <span class="re1">$random</span> <span class="sy0">=</span> <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$random</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="re1">$count</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$hash</span> <span class="sy0">=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span>_hash_crypt_private<span class="br0">&#40;</span><span class="re1">$password</span><span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span>_hash_gensalt_private<span class="br0">&#40;</span><span class="re1">$random</span><span class="sy0">,</span> <span class="re1">$itoa64</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re1">$itoa64</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; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re1">$hash</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="nu0">34</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$hash</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">md5</span><span class="br0">&#40;</span><span class="re1">$password</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> _hash_gensalt_private<span class="br0">&#40;</span><span class="re1">$input</span><span class="sy0">,</span> <span class="sy0">&amp;</span><span class="re1">$itoa64</span><span class="sy0">,</span> <span class="re1">$iteration_count_log2</span> <span class="sy0">=</span> <span class="nu0">6</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="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$iteration_count_log2</span> <span class="sy0">&lt;</span> <span class="nu0">4</span> <span class="sy0">||</span> <span class="re1">$iteration_count_log2</span> <span class="sy0">&gt;</span> <span class="nu0">31</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$iteration_count_log2</span> <span class="sy0">=</span> <span class="nu0">8</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$output</span> <span class="sy0">=</span> <span class="st0">&#39;$H$&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$output</span> <span class="sy0">.=</span> <span class="re1">$itoa64</span><span class="br0">&#91;</span><span class="kw3">min</span><span class="br0">&#40;</span><span class="re1">$iteration_count_log2</span> <span class="sy0">+</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw2">PHP_VERSION</span> <span class="sy0">&gt;=</span> <span class="nu0">5</span><span class="br0">&#41;</span> ? <span class="nu0">5</span> <span class="sy0">:</span> <span class="nu0">3</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="nu0">30</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$output</span> <span class="sy0">.=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span>_hash_encode64<span class="br0">&#40;</span><span class="re1">$input</span><span class="sy0">,</span> <span class="nu0">6</span><span class="sy0">,</span> <span class="re1">$itoa64</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; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$output</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> _hash_encode64<span class="br0">&#40;</span><span class="re1">$input</span><span class="sy0">,</span> <span class="re1">$count</span><span class="sy0">,</span> <span class="sy0">&amp;</span><span class="re1">$itoa64</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">$output</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</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="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$value</span> <span class="sy0">=</span> <span class="kw3">ord</span><span class="br0">&#40;</span><span class="re1">$input</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="sy0">++</span><span class="br0">&#93;</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">$output</span> <span class="sy0">.=</span> <span class="re1">$itoa64</span><span class="br0">&#91;</span><span class="re1">$value</span> <span class="sy0">&amp;</span> 0x3f<span class="br0">&#93;</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; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="re1">$count</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$value</span> <span class="sy0">|=</span> <span class="kw3">ord</span><span class="br0">&#40;</span><span class="re1">$input</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> <span class="nu0">8</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$output</span> <span class="sy0">.=</span> <span class="re1">$itoa64</span><span class="br0">&#91;</span><span class="br0">&#40;</span><span class="re1">$value</span> <span class="sy0">&gt;&gt;</span> <span class="nu0">6</span><span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0x3f<span class="br0">&#93;</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; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$i</span><span class="sy0">++</span> <span class="sy0">&gt;=</span> <span class="re1">$count</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</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;</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">$i</span> <span class="sy0">&lt;</span> <span class="re1">$count</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$value</span> <span class="sy0">|=</span> <span class="kw3">ord</span><span class="br0">&#40;</span><span class="re1">$input</span><span class="br0">&#91;</span><span class="re1">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> <span class="nu0">16</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$output</span> <span class="sy0">.=</span> <span class="re1">$itoa64</span><span class="br0">&#91;</span><span class="br0">&#40;</span><span class="re1">$value</span> <span class="sy0">&gt;&gt;</span> <span class="nu0">12</span><span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0x3f<span class="br0">&#93;</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; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$i</span><span class="sy0">++</span> <span class="sy0">&gt;=</span> <span class="re1">$count</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$output</span> <span class="sy0">.=</span> <span class="re1">$itoa64</span><span class="br0">&#91;</span><span class="br0">&#40;</span><span class="re1">$value</span> <span class="sy0">&gt;&gt;</span> <span class="nu0">18</span><span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0x3f<span class="br0">&#93;</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="kw1">while</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="re1">$count</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; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$output</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> _hash_crypt_private<span class="br0">&#40;</span><span class="re1">$password</span><span class="sy0">,</span> <span class="re1">$setting</span><span class="sy0">,</span> <span class="sy0">&amp;</span><span class="re1">$itoa64</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">$output</span> <span class="sy0">=</span> <span class="st0">&#39;*&#39;</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">// Check for correct hash</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="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$setting</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">3</span><span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="st0">&#39;$H$&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$output</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$count_log2</span> <span class="sy0">=</span> <span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re1">$itoa64</span><span class="sy0">,</span> <span class="re1">$setting</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</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; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$count_log2</span> <span class="sy0">&lt;</span> <span class="nu0">7</span> <span class="sy0">||</span> <span class="re1">$count_log2</span> <span class="sy0">&gt;</span> <span class="nu0">30</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$output</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$count</span> <span class="sy0">=</span> <span class="nu0">1</span> <span class="sy0">&lt;&lt;</span> <span class="re1">$count_log2</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$salt</span> <span class="sy0">=</span> <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$setting</span><span class="sy0">,</span> <span class="nu0">4</span><span class="sy0">,</span> <span class="nu0">8</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; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re1">$salt</span><span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="nu0">8</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$output</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * We&#39;re kind of forced to use MD5 here since it&#39;s the only</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * cryptographic primitive available in all versions of PHP</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * currently in use.  To implement our own low-level crypto</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * in PHP would result in much worse performance and</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * consequently in lower iteration counts and hashes that are</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * quicker to crack (by non-PHP code).</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</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">PHP_VERSION</span> <span class="sy0">&gt;=</span> <span class="nu0">5</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$hash</span> <span class="sy0">=</span> <span class="kw3">md5</span><span class="br0">&#40;</span><span class="re1">$salt</span> <span class="sy0">.</span> <span class="re1">$password</span><span class="sy0">,</span> <span class="kw2">true</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">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$hash</span> <span class="sy0">=</span> <span class="kw3">md5</span><span class="br0">&#40;</span><span class="re1">$hash</span> <span class="sy0">.</span> <span class="re1">$password</span><span class="sy0">,</span> <span class="kw2">true</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; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="sy0">&#8211;</span><span class="re1">$count</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="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$hash</span> <span class="sy0">=</span> <span class="kw3">pack</span><span class="br0">&#40;</span><span class="st0">&#39;H*&#39;</span><span class="sy0">,</span> <span class="kw3">md5</span><span class="br0">&#40;</span><span class="re1">$salt</span> <span class="sy0">.</span> <span class="re1">$password</span><span class="br0">&#41;</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">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$hash</span> <span class="sy0">=</span> <span class="kw3">pack</span><span class="br0">&#40;</span><span class="st0">&#39;H*&#39;</span><span class="sy0">,</span> <span class="kw3">md5</span><span class="br0">&#40;</span><span class="re1">$hash</span> <span class="sy0">.</span> <span class="re1">$password</span><span class="br0">&#41;</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; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="sy0">&#8211;</span><span class="re1">$count</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$output</span> <span class="sy0">=</span> <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$setting</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">12</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">$output</span> <span class="sy0">.=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span>_hash_encode64<span class="br0">&#40;</span><span class="re1">$hash</span><span class="sy0">,</span> <span class="nu0">16</span><span class="sy0">,</span> <span class="re1">$itoa64</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; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$output</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>
<p>Few comments:</p>
<ol>
<li>The above code is taken directly from the phpBB codebase, I only made a couple of necessary changes to make it work with Zend Framework.</li>
<li>For those of you asking why didn&#8217;t I just use phpBB API and call its native functions, there is a reason for it. The phpBB code is written to be available with PHP 4. Zend Framework requires at least PHP 5.2.4. There are lots of globals and other scary stuff in the phpBB codebase which makes it impossible for its functions to be called from ZF controllers.</li>
<li>If you think I should have done something differently or I completely forgot to do something, please let me know.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2010/05/how-to-register-a-new-phpbb-user-with-zend-framework/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend Framework IE conditional stylesheets and scripts</title>
		<link>http://blog.richardknop.com/2010/03/zend-framework-ie-conditional-stylesheets-and-scripts/</link>
		<comments>http://blog.richardknop.com/2010/03/zend-framework-ie-conditional-stylesheets-and-scripts/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 21:27:17 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[IE conditional comments in Zend Framework]]></category>
		<category><![CDATA[Zend view helpers]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=559</guid>
		<description><![CDATA[You can append a conditional stylesheet in a controller action like this: $this-&#62;view-&#62;headLink&#40;&#41;-&#62;appendStylesheet&#40;&#39;/path/to/some/styles.css&#39;, &#39;screen&#39;, &#39;IE 8&#39;&#41;; Which would produce this markup: &#60;!--[if IE 8]&#62; &#60;link href="/path/to/some/styles.css" media="screen" rel="stylesheet" type="text/css" /&#62;&#60;![endif]--&#62; Adding a conditional JavaScript file is similar: $this-&#62;view-&#62;headScript&#40;&#41;-&#62;appendFile&#40;&#39;/path/to/some/script.js&#39;, &#39;text/javascript&#39;, array&#40;&#39;conditional&#39; =&#62; &#39;IE&#39;&#41;&#41;; And that would produce markup like this: &#60;!--[if IE]&#62; &#60;script type="text/javascript" src="/path/to/some/script.js"&#62;&#60;/script&#62;&#60;![endif]--&#62; It [...]]]></description>
			<content:encoded><![CDATA[<p>You can append a conditional stylesheet in a controller action like this:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">view</span><span class="sy0">-&gt;</span><span class="me1">headLink</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">appendStylesheet</span><span class="br0">&#40;</span><span class="st0">&#39;/path/to/some/styles.css&#39;</span><span class="sy0">,</span> <span class="st0">&#39;screen&#39;</span><span class="sy0">,</span> <span class="st0">&#39;IE 8&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Which would produce this markup:</p>
<pre>&lt;!--[if IE 8]&gt; &lt;link href="/path/to/some/styles.css" media="screen" rel="stylesheet" type="text/css" /&gt;&lt;![endif]--&gt;</pre>
<p>Adding a conditional JavaScript file is similar:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">view</span><span class="sy0">-&gt;</span><span class="me1">headScript</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">appendFile</span><span class="br0">&#40;</span><span class="st0">&#39;/path/to/some/script.js&#39;</span><span class="sy0">,</span> <span class="st0">&#39;text/javascript&#39;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;conditional&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;IE&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>And that would produce markup like this:</p>
<pre>&lt;!--[if IE]&gt; &lt;script type="text/javascript" src="/path/to/some/script.js"&gt;&lt;/script&gt;&lt;![endif]--&gt;</pre>
<p>It can pretty useful when you need to use IE conditional comments just for a single controller action. Otherwise, if it applies site-wide, it&#8217;s better to just put conditional stylesheets and/or scripts in a layout file.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2010/03/zend-framework-ie-conditional-stylesheets-and-scripts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

