<?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>Ivan Villareal &#187; Create a multiuser git repository with gitolite &#8211; Ivan Villareal</title>
	<atom:link href="http://ivanvillareal.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://ivanvillareal.com</link>
	<description>IT stuff and more...</description>
	<lastBuildDate>Tue, 01 Nov 2011 23:00:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Create a multiuser git repository with gitolite</title>
		<link>http://ivanvillareal.com/development/create-a-multiuser-git-repository-with-gitolite/</link>
		<comments>http://ivanvillareal.com/development/create-a-multiuser-git-repository-with-gitolite/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 22:57:54 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=253</guid>
		<description><![CDATA[I use git for almost all my developments, is fast, it works locally, and I can even use it as a quick deployment tool, by adding hooks, but when it [...]]]></description>
			<content:encoded><![CDATA[<p>I use git for almost all my developments, is fast, it works locally, and I can even use it as a quick deployment tool, by adding hooks, but when it comes to sharing a repository to other developers, I don&#8217;t like the idea of creating a user account in the system for each developer, so the easiest and fastest way to solve this issue for me is using <a href="https://github.com/sitaramc/gitolite">gitolite</a>.</p>
<p>In this post I will describe the steps needed to setup a central repository for multiple users. I&#8217;m using Centos 5.5 as server and debian as a workstation</p>
<h2>Create a user account in the server and install git</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>root<span style="color: #000000; font-weight: bold;">@</span>bp ~<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #666666; font-style: italic;"># useradd -m git </span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>root<span style="color: #000000; font-weight: bold;">@</span>bp ~<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #666666; font-style: italic;"># passwd git</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>root<span style="color: #000000; font-weight: bold;">@</span>bp ~<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #666666; font-style: italic;"># yum install git</span></pre></div></div>

<h2>Copy your public key from our workstation to the server</h2>
<p>If you don&#8217;t know how to setup an ssh passwordless login, take a look <a href="http://ivanvillareal.com/linux/setting-up-ssh-keys-for-passwordless-login/">here</a></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ivan<span style="color: #000000; font-weight: bold;">@</span>scorpion:~$ <span style="color: #c20cb9; font-weight: bold;">scp</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>id_rsa.pub <span style="color: #c20cb9; font-weight: bold;">git</span><span style="color: #000000; font-weight: bold;">@</span>bp.com:~<span style="color: #000000; font-weight: bold;">/</span>ivan.pub</pre></div></div>

<h2>Clone gitolite into the server</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ivan<span style="color: #000000; font-weight: bold;">@</span>scorpion:~$ <span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #c20cb9; font-weight: bold;">git</span><span style="color: #000000; font-weight: bold;">@</span>bp
<span style="color: #c20cb9; font-weight: bold;">git</span><span style="color: #000000; font-weight: bold;">@</span>bp: ~$ <span style="color: #c20cb9; font-weight: bold;">git</span> clone <span style="color: #c20cb9; font-weight: bold;">git</span>:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>sitaramc<span style="color: #000000; font-weight: bold;">/</span>gitolite
<span style="color: #c20cb9; font-weight: bold;">git</span><span style="color: #000000; font-weight: bold;">@</span>bp: ~$ <span style="color: #7a0874; font-weight: bold;">cd</span> gitolite
<span style="color: #c20cb9; font-weight: bold;">git</span><span style="color: #000000; font-weight: bold;">@</span>bp: ~$ src<span style="color: #000000; font-weight: bold;">/</span>gl-system-install
<span style="color: #c20cb9; font-weight: bold;">git</span><span style="color: #000000; font-weight: bold;">@</span>bp: ~$ gl-setup ~<span style="color: #000000; font-weight: bold;">/</span>ivan.pub</pre></div></div>

<h2>Go to the workstation to manage the git repo</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ivan<span style="color: #000000; font-weight: bold;">@</span>scorpion:~$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> git<span style="color: #000000; font-weight: bold;">/</span>bprepo
ivan<span style="color: #000000; font-weight: bold;">@</span>scorpion:~$ <span style="color: #7a0874; font-weight: bold;">cd</span> git<span style="color: #000000; font-weight: bold;">/</span>bprepo
ivan<span style="color: #000000; font-weight: bold;">@</span>scorpion:~$ <span style="color: #c20cb9; font-weight: bold;">git</span> clone <span style="color: #c20cb9; font-weight: bold;">git</span><span style="color: #000000; font-weight: bold;">@</span>bp:gitolite-admin</pre></div></div>

<p>At this point we have 2 folders inside gitolite-admin conf/ and keydir/ the first one is used to create new repositories or add users to repositories the second one is for adding each user public key.</p>
<p>Once you have added new repositories and users you need to do a
<pre>git push origin master</pre>
<p> on each new repo</p>
]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/development/create-a-multiuser-git-repository-with-gitolite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamic multi form on same page with jQuery and PHP</title>
		<link>http://ivanvillareal.com/development/dynamic-multi-form-on-same-page-with-jquery-and-php/</link>
		<comments>http://ivanvillareal.com/development/dynamic-multi-form-on-same-page-with-jquery-and-php/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 20:13:50 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[multform]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=201</guid>
		<description><![CDATA[This is a little demo of a small app that allow us to have several forms displayed on the same page, organized by sections, a static multiform can be easily [...]]]></description>
			<content:encoded><![CDATA[<p>This is a little demo of a small app that allow us to have several forms displayed on the same page, organized by sections, a static multiform can be easily created by putting the form contents on divs and hiding them, then when the user clicks on a specific section we hide the previous div, and show the new one, we can wrap it up everything inside a big form, and submit that.</p>
<p>The approach I did for having this same functionality allows me to:</p>
<ul style="text-indent: 5px; list-style-position: inside; list-style-type: square; padding: 6px; margin: 20px;">
<li>Save each section form before editing a new one</li>
<li>Change any form inputs depending on received data</li>
<li>Validate in the front and backend each section</li>
</ul>
<p>The main disadvantage is that for each section I&#8217;ll do an ajax call, to submit and retrieve the form.</p>
<p>The first thing I did was to write the main html layout I did a simple 2 column layout to use the left block as a form navigator and the right block to show the actual form.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;left_block_box&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;left_block_title&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		 Form Steps
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;edit_step_box&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;table</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #000066;">cellspacing</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">cellpadding</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">border</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">&quot;font-size: 11px;&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;stepTable&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tr</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;stepSelected&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;td</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;formStep&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				 Name
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/td<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;td</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;stepEdit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;span</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;formstep1&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;pointer placeEdit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Edit<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/td<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tr<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tr<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;td</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;formStep&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				 Address
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/td<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;td</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;stepEdit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;span</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;formstep2&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;pointer placeEdit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Edit<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/td<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tr<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tr<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;td</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;formStep&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				 Interests:
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/td<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;td</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;stepEdit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;span</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;formstep3&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;pointer placeEdit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Edit<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/td<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tr<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/table<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>I&#8217;ve used a table so I can navigate more easily the DOM with jquery, but this can be changed an ul and it will work the same, the next thing I wrote was the other column wrapper the right block which will holde the actual form retrieved from the server.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;right_block_box&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;right_block_title&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;formTitle&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		 Form 1
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;multiform_part&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		 Aqui va la forma
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;form_step_nav_wrap&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;form_step_nav&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;form_step_left&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Previous Step&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;prevStepBtn&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;form_step_right&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Next Step&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;nextStepBtn&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Preview Data&quot;</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">&quot;display: none&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;previewBtn&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Once I had my basic layout I started with the javascript functionality, the first thing was to create a function that allow me to move from one form to another, passing current form values to the calling script and displaying the new form.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> selectStep<span style="color: #009900;">&#40;</span>step<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> thisStep <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span>step<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">children</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'id'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">//get current form data to be passed later</span>
	<span style="color: #003366; font-weight: bold;">var</span> curr <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.stepSelected&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">children</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">':eq(1)'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">children</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'id'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> formData <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#form_&quot;</span><span style="color: #339933;">+</span>curr<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">serialize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">//add class to selected step </span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#stepTable tr&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'stepSelected'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span>step<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'stepSelected'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">//put name of step that is going to be edited </span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#formTitle&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.stepSelected :eq(0)&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.multiform_part&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Loading...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">//send data to php, and draw new form</span>
	$.<span style="color: #660066;">post</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'processForm.php'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
		step<span style="color: #339933;">:</span> thisStep<span style="color: #339933;">,</span> saveData<span style="color: #339933;">:</span> curr<span style="color: #339933;">,</span> formData<span style="color: #339933;">:</span> formData
	<span style="color: #009900;">&#125;</span>
	<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">//draw new form</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.multiform_part&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This was easy, then I just binded a click event to each step</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">	<span style="color: #006600; font-style: italic;">// handle the edit  link on each step</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.stepEdit&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>index<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            selectStep<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>And now I have a functional multiform pane, that gets its form from php, the backend was also ver simple to make:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$step</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'step'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$formData</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'formData'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> save<span style="color: #009900;">&#40;</span><span style="color: #000088;">$step</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//$_SESSION[$step] = $data;</span>
	<span style="color: #000088;">$fields</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&amp;'</span><span style="color: #339933;">,</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$fields</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$keyVal</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'='</span><span style="color: #339933;">,</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <span style="color: #990000;">urldecode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$keyVal</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$val</span> <span style="color: #339933;">=</span> <span style="color: #990000;">urldecode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$keyVal</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$step</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$val</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$formData</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$formStep</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'saveData'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	save<span style="color: #009900;">&#40;</span><span style="color: #000088;">$formStep</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'formData'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$step</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$step</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'formstep1'</span><span style="color: #339933;">:</span>
					<span style="color: #000088;">$html</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&lt;&lt;&lt;</span>FORM
					<span style="color: #339933;">&lt;</span>form id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;form_<span style="color: #006699; font-weight: bold;">{$step}</span>&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;form_<span style="color: #006699; font-weight: bold;">{$step}</span>&quot;</span><span style="color: #339933;">&gt;</span>
					<span style="color: #339933;">&lt;</span>fieldset<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>legend<span style="color: #339933;">&gt;</span>Personal information<span style="color: #339933;">&lt;/</span>legend<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-req&quot;</span><span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-firstname&quot;</span><span style="color: #339933;">&gt;</span>First name<span style="color: #339933;">:&lt;/</span>label<span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>input name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-firstname&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-firstname&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$_SESSION</span>[<span style="color: #006699; font-weight: bold;">$step</span>]['fm-firstname']}&quot;</span><span style="color: #339933;">/&gt;</span>
		    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-opt&quot;</span><span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-middlename&quot;</span><span style="color: #339933;">&gt;</span>Middle name<span style="color: #339933;">:&lt;/</span>label<span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>input id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-middlename&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-middlename&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$_SESSION</span>[<span style="color: #006699; font-weight: bold;">$step</span>]['fm-middlename']}&quot;</span><span style="color: #339933;">/&gt;</span>
		    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-req&quot;</span><span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-lastname&quot;</span><span style="color: #339933;">&gt;</span>Last name<span style="color: #339933;">:&lt;/</span>label<span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>input name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-lastname&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-lastname&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$_SESSION</span>[<span style="color: #006699; font-weight: bold;">$step</span>]['fm-lastname']}&quot;</span><span style="color: #339933;">/&gt;</span>
		    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;/</span>fieldset<span style="color: #339933;">&gt;</span>
&nbsp;
&nbsp;
		FORM<span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$html</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'formstep2'</span><span style="color: #339933;">:</span>
					<span style="color: #000088;">$html</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">&lt;&lt;</span>FORM
					<span style="color: #339933;">&lt;</span>form id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;form_<span style="color: #006699; font-weight: bold;">{$step}</span>&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;form_<span style="color: #006699; font-weight: bold;">{$step}</span>&quot;</span><span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>fieldset<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>legend<span style="color: #339933;">&gt;</span>Address <span style="color: #339933;">&lt;/</span>legend<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-opt&quot;</span><span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-addr&quot;</span><span style="color: #339933;">&gt;</span>Address<span style="color: #339933;">:&lt;/</span>label<span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>input id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-addr&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-addr&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$_SESSION</span>[<span style="color: #006699; font-weight: bold;">$step</span>]['fm-addr']}&quot;</span><span style="color: #339933;">/&gt;</span>
		    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-opt&quot;</span><span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-city&quot;</span><span style="color: #339933;">&gt;</span>City or Town<span style="color: #339933;">:&lt;/</span>label<span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>input id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-city&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-city&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$_SESSION</span>[<span style="color: #006699; font-weight: bold;">$step</span>]['fm-city']}&quot;</span><span style="color: #339933;">/&gt;</span>
		    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-opt&quot;</span><span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-state&quot;</span><span style="color: #339933;">&gt;</span>State<span style="color: #339933;">:&lt;/</span>label<span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>input id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-state&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-state&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$_SESSION</span>[<span style="color: #006699; font-weight: bold;">$step</span>]['fm-state']}&quot;</span><span style="color: #339933;">/&gt;</span>
		    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-req&quot;</span><span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-zipcode&quot;</span><span style="color: #339933;">&gt;</span>Zip code<span style="color: #339933;">:&lt;/</span>label<span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>input id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-zipcode&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-zipcode&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$_SESSION</span>[<span style="color: #006699; font-weight: bold;">$step</span>]['fm-zipcode']}&quot;</span><span style="color: #339933;">/&gt;</span>
		    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;/</span>fieldset<span style="color: #339933;">&gt;</span>
&nbsp;
		FORM<span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$html</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'formstep3'</span><span style="color: #339933;">:</span>
					<span style="color: #000088;">$html</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">&lt;&lt;</span>FORM
					<span style="color: #339933;">&lt;</span>form id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;form_<span style="color: #006699; font-weight: bold;">{$step}</span>&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;form_<span style="color: #006699; font-weight: bold;">{$step}</span>&quot;</span><span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>fieldset<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>legend<span style="color: #339933;">&gt;</span>Interests <span style="color: #339933;">&lt;/</span>legend<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-opt&quot;</span><span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-int1&quot;</span><span style="color: #339933;">&gt;</span>Interest <span style="color: #cc66cc;">1</span><span style="color: #339933;">:&lt;/</span>label<span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>input id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-int1&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-int1&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$_SESSION</span>[<span style="color: #006699; font-weight: bold;">$step</span>]['fm-int1']}&quot;</span><span style="color: #339933;">/&gt;</span>
		    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-opt&quot;</span><span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>label <span style="color: #b1b100;">for</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-int2&quot;</span><span style="color: #339933;">&gt;</span>Interest <span style="color: #cc66cc;">2</span><span style="color: #339933;">:&lt;/</span>label<span style="color: #339933;">&gt;</span>
		      <span style="color: #339933;">&lt;</span>input id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-int2&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;fm-int2&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$_SESSION</span>[<span style="color: #006699; font-weight: bold;">$step</span>]['fm-int2']}&quot;</span><span style="color: #339933;">/&gt;</span>
		    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		    <span style="color: #339933;">&lt;/</span>fieldset<span style="color: #339933;">&gt;</span>
&nbsp;
		FORM<span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$html</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'getAllData'</span><span style="color: #339933;">:</span>
					<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;h3&gt;Saved Data&lt;/h3&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Finally I&#8217;ve added some css styles to make it &#8220;pretty&#8221; and add some other js functionality to navigate back and forth.</p>
<p>You can checkout the working solution <a href="http://ivanvillareal.com/samples/multiform">here</a>, or get the files <a href="http://ivanvillareal.com/samples/multiform.tar.bz2">here</a> this demo saves user data in session, and the session is destroyed each time you load the index page.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/development/dynamic-multi-form-on-same-page-with-jquery-and-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Script to copy data from MySQL to postgreSQL</title>
		<link>http://ivanvillareal.com/development/script-to-copy-data-from-mysql-to-postgres/</link>
		<comments>http://ivanvillareal.com/development/script-to-copy-data-from-mysql-to-postgres/#comments</comments>
		<pubDate>Sat, 02 Apr 2011 12:28:32 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[postgres]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=190</guid>
		<description><![CDATA[This is a perl script I&#8217;ve used to move data from mysql 5.1 to postgres 9, this script doesn&#8217;t create a schema, it only grabs the data from mysql and [...]]]></description>
			<content:encoded><![CDATA[<p>This is a perl script I&#8217;ve used to move data from mysql 5.1 to postgres 9, this script doesn&#8217;t create a schema, it only grabs the data from mysql and try to put it on the same table in postgres.</p>
<p>The only requirement is DBI for mysql and postgres.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;">&nbsp;
<span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># this script moves all the data from mysql to postgres</span>
<span style="color: #666666; font-style: italic;"># modules required are:</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># http://search.cpan.org/~timb/DBI-1.616/DBI.pm</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># please change the dsn, srcUser/srcPass and dstUser/Pass variables.</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> DBI<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$srcUser</span>   <span style="color: #339933;">=</span> <span style="color: #ff0000;">'ivan'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$srcPass</span>   <span style="color: #339933;">=</span> <span style="color: #ff0000;">'123'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$srcDbName</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'datatocopy'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$srcDbHost</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'mini'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$dstUser</span>  <span style="color: #339933;">=</span> <span style="color: #ff0000;">'ivan'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$dstPass</span>  <span style="color: #339933;">=</span> <span style="color: #ff0000;">'456'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$dstDbName</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'migrateddata'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$dstDbHost</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'192.168.1.145'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">### do not modify ##</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$srcDb</span>  <span style="color: #339933;">=</span> DBI<span style="color: #339933;">-&gt;</span><span style="color: #006600;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;dbi:mysql:database=$srcDbName;host=$srcDbHost&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$srcUser</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$srcPass</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$dstDb</span>  <span style="color: #339933;">=</span> DBI<span style="color: #339933;">-&gt;</span><span style="color: #006600;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;dbi:Pg:database=$dstDbName;host=$dstDbHost&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$dstUser</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$dstPass</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">####main########</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Starting to move data from $srcDbHost to $dstDbHost<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$srcDb</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">do</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SET NAMES <span style="color: #000099; font-weight: bold;">\'</span>UTF8<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">do</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SET CLIENT_ENCODING=<span style="color: #000099; font-weight: bold;">\'</span>UTF8<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$srcTables</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$srcDb</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">selectall_arrayref</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SHOW TABLES&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$dstTables</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">selectall_hashref</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SELECT * FROM pg_tables WHERE NOT tablename ~<span style="color: #000099; font-weight: bold;">\'</span>^(pg_|sql_)<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;tablename&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$seqlist</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">selectall_arrayref</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SELECT RELNAME FROM pg_class WHERE relkind=<span style="color: #000099; font-weight: bold;">\'</span>S<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$seqmap</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$s</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@$seqlist</span><span style="color: #009900;">&#41;</span>  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$seqname</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$s</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$seqname</span><span style="color: #339933;">=~/^</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span>_<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>a<span style="color: #339933;">-</span>z<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#41;</span>_<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>a<span style="color: #339933;">-</span>z<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">$)</span><span style="color: #339933;">/</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$item</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$item</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>seq<span style="color: #009900;">&#125;</span><span style="color: #339933;">=</span><span style="color: #0000ff;">$seqname</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$item</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>field<span style="color: #009900;">&#125;</span><span style="color: #339933;">=</span><span style="color: #0000ff;">$2</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$table</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span> 
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">exists</span> <span style="color: #0000ff;">$dstTables</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$table</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
            <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$seqmap</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$table</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$item</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>   
            <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;WARN: cannot find table for sequence $seqname<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>   
    <span style="color: #009900;">&#125;</span>   
<span style="color: #009900;">&#125;</span>
<span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>AutoCommit<span style="color: #009900;">&#125;</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$totalRowCount</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$t</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@$srcTables</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$table</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">unless</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">exists</span> <span style="color: #0000ff;">$dstTables</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$table</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;WARN: table $table does not exists in dest db Pg:$dstDbName<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">next</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
	<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Clearing data from table $table in $dstDbHost<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    clear_table<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$table</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">next</span> <span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$table</span><span style="color: #339933;">=~/^</span>cache<span style="color: #339933;">/;</span>
    <span style="color: #b1b100;">next</span> <span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$table</span><span style="color: #339933;">=~/^</span>locales<span style="color: #339933;">/;</span>
	<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Copying data from mysql table $table in $srcDbHost to postgres table $table in $dstDbHost<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$cnt</span> <span style="color: #339933;">=</span> copy_table<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$srcDb</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$table</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$table</span><span style="color: #339933;">=~/^</span>cache<span style="color: #339933;">/;</span>
	<span style="color: #0000ff;">$totalRowCount</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$totalRowCount</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">$cnt</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;$cnt rows copied ($table)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    init_seq<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$table</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$seqmap</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$table</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># if (exists $seqmap-&gt;{$table});</span>
  <span style="color: #009900;">&#125;</span>  
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Commiting changes <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>     
<span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">commit</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;$totalRowCount rows were copied.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">exit</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> init_seq  <span style="color: #009900;">&#123;</span>  
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$db</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$table</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$list</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$list</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$item</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$list</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$ref</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">selectall_arrayref</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SELECT MAX($item-&gt;{field}) FROM $table&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$val</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ref</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$val</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">do</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SELECT SETVAL(<span style="color: #000099; font-weight: bold;">\'</span>$item-&gt;{seq}<span style="color: #000099; font-weight: bold;">\'</span>,$val)&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>  
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> clear_table <span style="color: #009900;">&#123;</span>  
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$dbh</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$table</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$table</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$dbh</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">do</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;DELETE FROM $table&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>  
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> copy_table <span style="color: #009900;">&#123;</span> 
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$srcDb</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$table</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">die</span> <span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$table</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$slf</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$srcDb</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;select * from $table limit 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$rows</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$slf</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">if</span> <span style="color: #0000ff;">$rows</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$rec1</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$slf</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">fetchrow_hashref</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$slf</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">finish</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@fieldnames</span> <span style="color: #339933;">=</span> <span style="color: #000066;">sort</span> <span style="color: #000066;">keys</span> <span style="color: #0000ff;">%$rec1</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@qm</span> <span style="color: #339933;">=</span>  <span style="color: #000066;">map</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">'?'</span><span style="color: #009900;">&#125;</span> <span style="color: #0000ff;">@fieldnames</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$ins</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$dstDb</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;INSERT INTO $table (&quot;</span><span style="color: #339933;">.</span><span style="color: #000066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;,&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@fieldnames</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;) VALUES(&quot;</span><span style="color: #339933;">.</span><span style="color: #000066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;,&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@qm</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$sel</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$srcDb</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SELECT * FROM $table&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$sel</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">execute</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$cnt</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$data</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$sel</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">fetchrow_hashref</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$ins</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">map</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$data</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span> <span style="color: #0000ff;">@fieldnames</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$cnt</span><span style="color: #339933;">++;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #0000ff;">$ins</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">finish</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$sel</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">finish</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$cnt</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/development/script-to-copy-data-from-mysql-to-postgres/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Decrypting SourceCop php files</title>
		<link>http://ivanvillareal.com/development/php-development/decrypting-sourcecop-php-files/</link>
		<comments>http://ivanvillareal.com/development/php-development/decrypting-sourcecop-php-files/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 19:41:46 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sourcecop]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=176</guid>
		<description><![CDATA[Every once in a while, I receive code that is encrypted using one of many php encoder software out there, so when I face this situation and if the project [...]]]></description>
			<content:encoded><![CDATA[<p>Every once in a while, I receive code that is encrypted using one of many php encoder software out there, so when I face this situation and if the project is worth it, I start playing around with the encrypted files to see how the encoding algorithm works, so far I’ve been able to successful decrypt files encoded with Zend, and ioncube, I don’t remember the versions of the encoders but I remember that the latter one took me some time, but I did it.</p>
<p>I must say that decoding files also becomes a personal challenge, it is like a hobby when I have the time to play with it.</p>
<p> Yesterday I received a couple of files encoded with an unknown encoder for me, it didn’t require any php modification or extension install, so I tough that it would be easy to break it, because at some point the code must be evaluated, so after I opened the zip file, I noticed a folder called “scopbin“, that contained only 1 php file named “911006.php“, the two encoded files were  including this file so I assumed that this is were the decryption logic had to be.</p>
<p>I was exhausted by a long working day, and when I got this files and saw that they were encrypted I placed them in my laptop for later analysis. This analysis was done while  I was waiting for the local news, I didn’t research the encoding, or did  anything that give me some pointers, I just started to playing around with the code to see how far  could I get.</p>
<p>My objective this time was getting this files decrypted, and not analysing the steps of the algorithm, so with this in mind, this is what I did:</p>
<p>This was the original “911006.php” file:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #339933;">&lt;</span> ?php <span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #339933;">,</span><span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>function A4540acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> b5434f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> c43dsd0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> Xdsf0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> y0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #000088;">$x16754c94f2e48aae0d6f34280507be58</span><span style="color: #339933;">=</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #339933;">=</span><span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&amp;H'</span><span style="color: #339933;">.</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>for<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span><span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span><span style="color: #339933;">&lt;</span>strlen<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span><span style="color: #339933;">+=</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$xe594cc261a3b25a9c99ec79da9c91ba5</span><span style="color: #339933;">=</span><span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span><span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span><span style="color: #339933;">&lt;</span><span style="color: #000088;">$x16754c94f2e48aae0d6f34280507be58</span><span style="color: #009900;">&#41;</span>?<span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span><span style="color: #339933;">=</span><span style="color: #000088;">$xe594cc261a3b25a9c99ec79da9c91ba5</span> ^ <span style="color: #990000;">ord</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>if<span style="color: #009900;">&#40;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span><span style="color: #339933;">&lt;=</span><span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #009900;">&#41;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">255</span><span style="color: #339933;">+</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span><span style="color: #339933;">-</span><span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #339933;">;</span>else <span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span><span style="color: #339933;">=</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span><span style="color: #339933;">-</span><span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #339933;">;</span><span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span><span style="color: #339933;">=</span><span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span><span style="color: #339933;">.</span><span style="color: #990000;">chr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #339933;">=</span><span style="color: #000088;">$xe594cc261a3b25a9c99ec79da9c91ba5</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> f5434f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>return <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> j43dsd0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>return <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> hdsf0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>return <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> tr5434f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>return <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> f0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">return</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><span style="color: #990000;">file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">function</span> g0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'echo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #009900; font-weight: bold;">false</span>?<span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'print'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span>?<span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'sprint'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span>?<span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'sprintf'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span>?<span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">:</span><span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> hyr3dsd0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>return <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> uygf0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>return <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> drfg34f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>return <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> jhkgvdsd0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>return <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">function</span> yrdhhdacdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>return <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>I’ve used a code formatter to make the code  more readable:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ivan<span style="color: #000000; font-weight: bold;">@</span>mini:<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>copdecrypt<span style="color: #000000; font-weight: bold;">/</span>scopbin$ phpCB <span style="color: #660033;">--space-after-if</span>  \
<span style="color: #660033;">--space-after-switch</span>                                           \
<span style="color: #660033;">--space-after-while</span>                                            \
<span style="color: #660033;">--space-before-srt-angle-bracket</span>                               \
<span style="color: #660033;">--space-after-end-angle-bracket</span>                                \
<span style="color: #660033;">--glue-amperscore</span>                                              \
<span style="color: #660033;">--change-shell-comment-to-double-slashes-comment</span>               \
<span style="color: #660033;">--force-large-php-code-tag</span>                                     \
<span style="color: #660033;">--force-true-false-null-contant-lowercase</span>                      \
<span style="color: #660033;">--align-equal-statements</span>                                       \
<span style="color: #660033;">--comment-rendering-style</span> PEAR                                 \
<span style="color: #660033;">--equal-align-position</span> <span style="color: #000000;">50</span>                                      \
<span style="color: #660033;">--padding-char-count</span> <span style="color: #000000;">4</span>                                         \
<span style="color: #000000;">911006</span>.php</pre></div></div>

<p>And this was the result:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #339933;">,</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> A4540acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> b5434f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> c43dsd0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> Xdsf0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> y0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$x16754c94f2e48aae0d6f34280507be58</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&amp;H'</span> <span style="color: #339933;">.</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span><span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span> <span style="color: #339933;">&lt;</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$xe594cc261a3b25a9c99ec79da9c91ba5</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$x16754c94f2e48aae0d6f34280507be58</span><span style="color: #009900;">&#41;</span>?<span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xe594cc261a3b25a9c99ec79da9c91ba5</span> ^ <span style="color: #990000;">ord</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #009900;">&#41;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">255</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">else</span> <span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span> <span style="color: #339933;">.</span> <span style="color: #990000;">chr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xe594cc261a3b25a9c99ec79da9c91ba5</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> 
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> f5434f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> j43dsd0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> hdsf0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> tr5434f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> f0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #990000;">file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> g0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'echo'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span>?<span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'print'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span>?<span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'sprint'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span>?<span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'sprintf'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span>?<span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">:</span><span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> hyr3dsd0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> uygf0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> drfg34f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> jhkgvdsd0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">function</span> yrdhhdacdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x456e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$Xew6e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include_path'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>After a quick review of this file, I saw that it had several functions that had same logic, return an unknow variable or delete the file that this unknown variable had, appart from all this “useless” functions I quickly found what appeared to be the decryption function this was the function named <strong>y0666f0acdeed38d4cd9084ade1739498 </strong>with this information I headed to check one of the encrypted files, and this is how it looked:</p>
</pre>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #339933;">&lt;</span> ?php <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'findsysfolder'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">function</span> findsysfolder<span style="color: #009900;">&#40;</span><span style="color: #000088;">$fld</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$fld1</span><span style="color: #339933;">=</span><span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fld</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$fld</span><span style="color: #339933;">=</span><span style="color: #000088;">$fld1</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/scopbin'</span><span style="color: #339933;">;</span>clearstatcache<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>if<span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fld</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #b1b100;">return</span> findsysfolder<span style="color: #009900;">&#40;</span><span style="color: #000088;">$fld1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>else <span style="color: #b1b100;">return</span> <span style="color: #000088;">$fld</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span>findsysfolder<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/911006.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$REXISTHECAT4FBI</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'FE50E574D754E76AC679F242F450F768FB5DCB77F34DE341 660C280D176E374DE7FB3B090A782B6B68DBC97BEAD93B681C452F25BE26'</span><span style="color: #339933;">;</span>g0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span>f0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$REXISTHEDOG4FBI</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'9CEF6BE117B329ADFC4560538EBF16BB6DAD1748FE354E8EDA7AABFA376EB6938496F43560E4123D85D272E342E363FD51F3181763A3F623 660B6E2369243EE5781CD76A133E272E37DACA198968397F150425B4326A126CD64F051F35287DE7BD3 5354276B880BDEF525247533610 64282D07BA63861F81DB715C115BC1BD57FC5D9C8 225D2 A F177EDC7EA026A7E74D37AC28A125D1B8F73B63C6D1C3A1E137639BEECEDACFDBBD9F8D948CE93D6FCDCDD8CCA98B36AA21A08B8BD87FD8 15143C2C2D37593B82857516FC9ABF9237BDEC9DBB9F92F7BDEB8EE3B6AEA153C9DF3 A2CAE2CD218B1E566C0D274D6 F32DC2A E20 512 062A2F72C 96FB9ED3B6FC9ABF927A34985CAB5D3 65D89B315B3E61076D8 E4488B2127FCEF82C78DDBBED3A6FBB7FCEEACEE04453412363B6E246F05086C7 52E C408CC263E078A53461E0 331B71EB81DC475DB6CAC9531914393D4 22AC9C3D7CE7194438AD638 03D6FCDCDD8CCA98F99211B1177D5C7DEC6A3F427 5 510 461C7D1C51AB492F850FA56FE445EC0154885BDACDC 819BD76A72A419A4D859CFE5A5268CDABFD2A7FAB8DEF227BA3869183E12277A386E03763B6E241F75282CDBFCA187ECE74D7 D1D4881D3C7432177D4 E3F83DA54417EAA8FE93C68BDE94C2E7CA5FD5B4C5E3C9993A98CEA3D69BCE84F2D989C9EEECFDDBFFF15 164C2D471D3 228D3 51CBA75D4 A3C85C1 4618EC5 E6BE91FCD F4D87BE F 56BFB5BFE2A3EA923BDDDBB9D26BE13CD 41F6E584D593C1A C18 D19D29D958C94F12577D5D5C0D4B19781958094F21EB6EF20CC77D87CD0CDC57FA13D8484F61076D47ED5 366F521A6FA2FEFBAF22772A680E23168B0958290F23366B297F12470A5F1543664EF6DA42DAD5E5EB718C569EA2C5F8AE81BBF16BE489E3EE13D7FBD98FE297DA8FC5B396BB2EA4E594B2969D3C7689230A1F4441763B1E83114 31173B3E6331670A6F22672D4B6E43C64C1D6C475FA5AFB2BDF36A83F9F55F8 62A C69BEEC4F4F5A4E2B D1B F1A E68CAD86F44 B1C E6CACF92E B6DDCDDD26437 3'</span><span style="color: #339933;">;</span><span style="color: #000088;">$REXISTHECAT4FBI</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'94CD76CD371C5A7BC70C186E779C293B9B49BACA5A781A6'</span><span style="color: #339933;">;</span> <span style="color: #990000;">eval</span><span style="color: #009900;">&#40;</span>y0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'4EF6454FB298E72B 5'</span><span style="color: #339933;">,</span><span style="color: #000088;">$REXISTHEDOG4FBI</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Again I used the code beautifier  to make this file more readable:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'findsysfolder'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> findsysfolder<span style="color: #009900;">&#40;</span><span style="color: #000088;">$fld</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$fld1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fld</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$fld</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$fld1</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/scopbin'</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">clearstatcache</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fld</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #b1b100;">return</span> findsysfolder<span style="color: #009900;">&#40;</span><span style="color: #000088;">$fld1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$fld</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span> 
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span>findsysfolder<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/911006.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$REXISTHECAT4FBI</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'FE50E574D754E76AC679F242F450F768FB5DCB77F34DE341 660C280D176E374DE7FB3B090A782B6B68DBC97BEAD93B681C452F25BE26'</span><span style="color: #339933;">;</span>
g0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span>f0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$REXISTHEDOG4FBI</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'9CEF6BE117B329ADFC4560538EBF16BB6DAD1748FE354E8EDA7AABFA376EB6938496F43560E4123D85D272E342E363FD51F3181763A3F623 660B6E2369243EE5781CD76A133E272E37DACA198968397F150425B4326A126CD64F051F35287DE7BD3 5354276B880BDEF525247533610 64282D07BA63861F81DB715C115BC1BD57FC5D9C8 225D2 A F177EDC7EA026A7E74D37AC28A125D1B8F73B63C6D1C3A1E137639BEECEDACFDBBD9F8D948CE93D6FCDCDD8CCA98B36AA21A08B8BD87FD8 15143C2C2D37593B82857516FC9ABF9237BDEC9DBB9F92F7BDEB8EE3B6AEA153C9DF3 A2CAE2CD218B1E566C0D274D6 F32DC2A E20 512 062A2F72C 96FB9ED3B6FC9ABF927A34985CAB5D3 65D89B315B3E61076D8 E4488B2127FCEF82C78DDBBED3A6FBB7FCEEACEE04453412363B6E246F05086C7 52E C408CC263E078A53461E0 331B71EB81DC475DB6CAC9531914393D4 22AC9C3D7CE7194438AD638 03D6FCDCDD8CCA98F99211B1177D5C7DEC6A3F427 5 510 461C7D1C51AB492F850FA56FE445EC0154885BDACDC 819BD76A72A419A4D859CFE5A5268CDABFD2A7FAB8DEF227BA3869183E12277A386E03763B6E241F75282CDBFCA187ECE74D7 D1D4881D3C7432177D4 E3F83DA54417EAA8FE93C68BDE94C2E7CA5FD5B4C5E3C9993A98CEA3D69BCE84F2D989C9EEECFDDBFFF15 164C2D471D3 228D3 51CBA75D4 A3C85C1 4618EC5 E6BE91FCD F4D87BE F 56BFB5BFE2A3EA923BDDDBB9D26BE13CD 41F6E584D593C1A C18 D19D29D958C94F12577D5D5C0D4B19781958094F21EB6EF20CC77D87CD0CDC57FA13D8484F61076D47ED5 366F521A6FA2FEFBAF22772A680E23168B0958290F23366B297F12470A5F1543664EF6DA42DAD5E5EB718C569EA2C5F8AE81BBF16BE489E3EE13D7FBD98FE297DA8FC5B396BB2EA4E594B2969D3C7689230A1F4441763B1E83114 31173B3E6331670A6F22672D4B6E43C64C1D6C475FA5AFB2BDF36A83F9F55F8 62A C69BEEC4F4F5A4E2B D1B F1A E68CAD86F44 B1C E6CACF92E B6DDCDDD26437 3'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$REXISTHECAT4FBI</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'94CD76CD371C5A7BC70C186E779C293B9B49BACA5A781A6'</span><span style="color: #339933;">;</span>
<span style="color: #990000;">eval</span><span style="color: #009900;">&#40;</span>y0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'4EF6454FB298E72B 5'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$REXISTHEDOG4FBI</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>So what we have here is more obfuscated code, but a simple to understand, we have 2 variables and 3 functions, the variable that has the encrypted code should be the larger one so I'm assuming that is the "$REXISTHEDOG4FBI" variable, the other one apparently isn't used, so what I did at this point was to print the results of the evaluated function which corresponds to the function where the decrypt logic is (deofuscated):</p>
</pre>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$program</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$position</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$keyLength</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$decValue</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&amp;H'</span> <span style="color: #339933;">.</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$program</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$program</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$decProgram</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$program</span><span style="color: #339933;">,</span> <span style="color: #000088;">$i</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$position</span>   <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$position</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$keyLength</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$position</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$ascii</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$decProgram</span>^ <span style="color: #990000;">ord</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$position</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$ascii</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$decValue</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$ascii</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">255</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$ascii</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$decValue</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">else</span> <span style="color: #000088;">$ascii</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$ascii</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$decValue</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$result</span>   <span style="color: #339933;">=</span> <span style="color: #000088;">$result</span> <span style="color: #339933;">.</span> <span style="color: #990000;">chr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ascii</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$decValue</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$decProgram</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> 
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>unfortunately printing the result didn't work, so I did a review to check why, and I found that the other 2 functions where the problem, let me explain what happens, first a call is made to</p>
</pre>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> f0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #990000;">file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>this function receives the name of the executing file (test.php in my case), read its content in an array, then glues all lines to create a 1 line string, without any new lines, then this result is passed to the following function:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> g0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'echo'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span> ? <span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'print'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> ? <span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'sprint'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> ? <span style="color: #009900;">&#40;</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'sprintf'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> ? <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">:</span> <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>which are a series of nested ternary conditions, looking for the words "echo,print,sprint,sprintf", if any of this words are in the encrypted file, then the script simply exits, that's why I was unable to print the decrypted code after calling the decoding function, so simply avoiding the call to this function will fix the issue and I will get my decrypted code.<br />
However, I didn't want to modify the original encrypted files, so a second approach I took was modifying the decryption function and echoing the output from there, so I've added a couple of lines (15 and 16) to the "<strong>y0666f0acdeed38d4cd9084ade1739498</strong>" function:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> y0666f0acdeed38d4cd9084ade1739498<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$x16754c94f2e48aae0d6f34280507be58</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&amp;H'</span> <span style="color: #339933;">.</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span><span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span> <span style="color: #339933;">&lt;</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$xe594cc261a3b25a9c99ec79da9c91ba5</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x276e79316561733d64abdf00f8e8ae48</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x1b90e1035d4d268e0d8b1377f3dc85a2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$x16754c94f2e48aae0d6f34280507be58</span><span style="color: #009900;">&#41;</span>?<span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xe594cc261a3b25a9c99ec79da9c91ba5</span> ^ <span style="color: #990000;">ord</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$x897356954c2cd3d41b221e3f24f99bba</span><span style="color: #339933;">,</span> <span style="color: #000088;">$x71510c08e23d2083eda280afa650b045</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #009900;">&#41;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">255</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">else</span> <span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span> <span style="color: #339933;">.</span> <span style="color: #990000;">chr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xab6389e47b1edcf1a5267d9cfb513ce5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$x7a86c157ee9713c34fbd7a1ee40f0c5a</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xe594cc261a3b25a9c99ec79da9c91ba5</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> 
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$x0b43c25ccf2340e23492d4d3141479dc</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>And voilà, I was able to see the source code.</p>
<p>So in short, just print the output of the decrypt function, and kill the script to get the decrypted code, I don't know if there are any other versions of the "911006.php" file, but I guess that the same logic applies.
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/development/php-development/decrypting-sourcecop-php-files/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>File Type Detection in PHP</title>
		<link>http://ivanvillareal.com/linux/file-type-detecion-in-php/</link>
		<comments>http://ivanvillareal.com/linux/file-type-detecion-in-php/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 04:47:24 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[fileinfo]]></category>
		<category><![CDATA[pecl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=150</guid>
		<description><![CDATA[I&#8217;m working on a project where the users can upload files, and I need to know the type of file they are uploading, a simple solution would be to check [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a project where the users can upload files, and I need to know the type of file they are uploading, a simple solution would be to check the extensions of the files, but this has many flaws, so I was looking for a reliable way to detect the type of file, and I found a PECL extension called <a href="http://pecl.php.net/package/Fileinfo/php-src/ext/fileinfo">file info</a> this extension is enabled by default in PHP 5.3, unfortunately I&#8217;m runing PHP 5.2.10, and the prod server also has this version.</p>
<p>So what I did to install this on ubuntu 9.10 karmic was the following:</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">root<span style="color: #000000; font-weight: bold;">@</span>mini:<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #666666; font-style: italic;"># apt-get install php5-dev libmagic-dev php-pear</span>
....
root<span style="color: #000000; font-weight: bold;">@</span>mini:<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #666666; font-style: italic;"># pear channel-update pear.php.net</span>
...
root<span style="color: #000000; font-weight: bold;">@</span>mini:<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #666666; font-style: italic;"># pecl install Fileinfo</span>
....
Build process completed successfully
Installing <span style="color: #ff0000;">'/usr/lib/php5/20060613+lfs/fileinfo.so'</span>
<span style="color: #c20cb9; font-weight: bold;">install</span> ok: channel:<span style="color: #000000; font-weight: bold;">//</span>pear.php.net<span style="color: #000000; font-weight: bold;">/</span>Fileinfo-1.0.4</pre></div></div>

<p>&nbsp;</p>
<p>and finally I added the extension to php.ini</p>
<p>extension=fileinfo.so</p>
<p>I restarted the apache server, and tested with this</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$fileInfo</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> finfo<span style="color: #009900;">&#40;</span>FILEINFO_MIME<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$mimeType</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$fileInfo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">buffer</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$uploadedFile</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/linux/file-type-detecion-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Format a Mysql DateTime Field with Zend_Date</title>
		<link>http://ivanvillareal.com/development/format-a-mysql-datetime-field-with-zend_date/</link>
		<comments>http://ivanvillareal.com/development/format-a-mysql-datetime-field-with-zend_date/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 19:54:41 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=146</guid>
		<description><![CDATA[Formatting Dates fetched from the db becomes a simple task with the help of Zend_Date, here I show you how I use a small function to handle date formatting in a simple way.]]></description>
			<content:encoded><![CDATA[<p><a title="Zend_Date component offers a detailed, but simple API for manipulating dates and times" href="http://framework.zend.com/manual/en/zend.date.html" target="_blank">Zend_Date</a> is really a time saver class, I use it in almost every project I work, It handles time_zones, and date formatting pretty easy, leaving me more time to focus on other things.</p>
<p>The files that I need to use Zend_Date as a standalone class are:</p>
<p>Date.php and the Date folder from the Zend distribution package, and this is how I use it:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> ?php
<span style="color: #990000;">set_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./lib'</span> <span style="color: #339933;">.</span> PATH_SEPARATOR <span style="color: #339933;">.</span> <span style="color: #990000;">get_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">include_once</span> <span style="color: #0000ff;">'Zend/Date.php'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tugId</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tugId'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tugId'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> formatDate<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009933; font-style: italic;">/**
     * List of supported timezones
     * http://php.net/manual/en/timezones.php
     */</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$fmtDate</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Date<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">,</span> Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">ISO_8601</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$fmtDate</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>setTimezone<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'America/Los_Angeles'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$fmtDate</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>toString<span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">DATETIME</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_int</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tugId</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SELECT modified_date FROM tuggler WHERE tug_id = '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$tugId</span><span style="color: #339933;">;</span>
 <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$db</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>fetchAssoc<span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000088;">$response</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Last Record Update: '</span><span style="color: #339933;">.</span>formatDate<span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'modified_date'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #000088;">$response</span> <span style="color: #0000ff;">&quot;nothing to return&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$response</span><span style="color: #339933;">;</span></pre></div></div>

<p>The response from the above would be <strong><span style="color: #0000ff;">Jul 9, 2009 11:41:20 AM <span style="font-weight: normal;"><span style="color: #000000;">but I can easily change it using one of the <a title="Predefined constants for Zend_Date" href="http://framework.zend.com/manual/en/zend.date.constants.html">predefined constants</a>, or I can make my own format.</span></span></span></strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/development/format-a-mysql-datetime-field-with-zend_date/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Filling rtf templates with text and images using php</title>
		<link>http://ivanvillareal.com/development/filling-rtf-templates-with-text-and-images-using-php/</link>
		<comments>http://ivanvillareal.com/development/filling-rtf-templates-with-text-and-images-using-php/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 18:10:22 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=92</guid>
		<description><![CDATA[We had a requirement to fill an rtf template file with some info from the system, the templates had some pictures that need to be retrieved from the&#160;system&#160;and placed in [...]]]></description>
			<content:encoded><![CDATA[<p>We had a requirement to fill an rtf template file with some info from the system, the templates had some pictures that need to be retrieved from the&nbsp;system&nbsp;and placed in the rtf file.</p>
<p>The deadline for this requirement was very short, and the system where this was implemented was a large crm system so we didn&#8217;t had much time to dig up into the code to look for any&nbsp;useful&nbsp;class, so what we did was very simple.</p>
<p>Whenever a new document would be created, we get the template &nbsp;related to that client opened the rtf file put it on a string and do a string replace for each field to be replaced, this is the code for this:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">keyVaribles</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span>
 <span style="color: #009900;">&#40;</span>
 <span style="color: #0000ff;">'&lt;organization_name&gt;'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$account</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span><span style="color: #339933;">,</span>
 <span style="color: #0000ff;">'&lt;company_logos&gt;'</span>     <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$img</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 <span style="color: #0000ff;">'&lt;dates_of_event&gt;'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$account</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">date</span><span style="color: #339933;">,</span>
 <span style="color: #0000ff;">'&lt;link&gt;'</span>                     <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$account</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #339933;">,</span>
 <span style="color: #0000ff;">'&lt;calendar&gt;'</span>              <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$account</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cal</span><span style="color: #339933;">,</span>
 <span style="color: #0000ff;">'&lt;signature&gt;'</span>             <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$account</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">signature</span><span style="color: #339933;">,</span>
 <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// read file</span>
<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$bean</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">document_revision_id</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'r'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$handle</span><span style="color: #339933;">,</span> <span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// replace content</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">keyVaribles</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$from</span><span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$to</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$from</span><span style="color: #339933;">,</span> <span style="color: #000088;">$to</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// save file</span>
<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$handle</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;&lt;/</span>signature<span style="color: #339933;">&gt;&lt;/</span>calendar<span style="color: #339933;">&gt;&lt;/</span>link<span style="color: #339933;">&gt;&lt;/</span>dates_of_event<span style="color: #339933;">&gt;&lt;/</span>company_logos<span style="color: #339933;">&gt;&lt;/</span>organization_name<span style="color: #339933;">&gt;</span></pre></div></div>

<p>This worked for all the text fields, but there was one field &nbsp;&lt;company_logos&gt; that needed an image to be inserted, I did little research on this, and used and old library (<a href="http://www.phprtf.com/">http://www.phprtf.com/</a>)&nbsp;this didn&#8217;t worked very well, because it had only methods to save or send the generated rtf file, I needed only the image to be inserted so I did a class to convert an image into an rtf&nbsp;embeddable&nbsp;code, here it is:</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 *
 * This is the short Description for the Class
 *
 * This is the long description for the Class
 *
 * @author		Ivan Villareal
 * @version		$Id$
 * @package		Package
 * @subpackage	SubPackage
 *
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> image
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_cmInPoints</span> <span style="color: #339933;">=</span> <span style="color:#800080;">0.026434</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_twipsInCm</span>  <span style="color: #339933;">=</span> <span style="color: #cc66cc;">567</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_imgFile</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_width</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_height</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_defaultWidth</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_defaultHeight</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$fileName</span><span style="color: #339933;">,</span> <span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_imgFile <span style="color: #339933;">=</span> <span style="color: #000088;">$fileName</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_width   <span style="color: #339933;">=</span> <span style="color: #000088;">$width</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_height	<span style="color: #339933;">=</span> <span style="color: #000088;">$height</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$imgSize</span> <span style="color: #339933;">=</span> <span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fileName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_defaultWidth  <span style="color: #339933;">=</span> <span style="color: #000088;">$imgSize</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_defaultHeight <span style="color: #339933;">=</span> <span style="color: #000088;">$imgSize</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _getWidth<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>	
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_width<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_width<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_height<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_defaultWidth <span style="color: #339933;">/</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_defaultHeight<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_height<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_defaultWidth <span style="color: #339933;">*</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_cmInPoints<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_twipsInCm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _getHeight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>	
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_height<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_height<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_height<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_defaultHeight <span style="color: #339933;">/</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_defaultWidth<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_width<span style="color: #339933;">;</span> 
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_defaultHeight <span style="color: #339933;">*</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_cmInPoints<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$height</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_twipsInCm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span>	<span style="color: #000000; font-weight: bold;">function</span> _fileToHex<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
	<span style="color: #009900;">&#123;</span>	  
	  	<span style="color: #000088;">$f</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_imgFile<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$string</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #339933;">,</span> <span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_imgFile<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$hex</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dechex</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">ord</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$hex</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>			  
			  	<span style="color: #000088;">$hex</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">.</span><span style="color: #000088;">$hex</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #000088;">$str</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$hex</span><span style="color: #339933;">;</span>	
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$str</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getContent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
	<span style="color: #009900;">&#123;</span>	  
		<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'{\pict'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'\picwgoal'</span><span style="color: #339933;">.</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_getWidth<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  		
		<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'\pichgoal'</span><span style="color: #339933;">.</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_getHeight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
		<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_fileToHex<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		
		<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'}'</span><span style="color: #339933;">;</span> 			
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$content</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>As you can see this class is very simple and you only have to instantiate it with the image file to be converted, and call the getContents method to get the rtf code for that image.</p>
<p>This worked pretty well so far, but I guess we need to do some more testing before deploying this.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/development/filling-rtf-templates-with-text-and-images-using-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql unique keys and collations</title>
		<link>http://ivanvillareal.com/development/mysql-unique-keys-and-collations/</link>
		<comments>http://ivanvillareal.com/development/mysql-unique-keys-and-collations/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 01:10:59 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=65</guid>
		<description><![CDATA[I&#8217;m working on an application that stores unique values on a field, so I used the unique index for this column, everything was ok, until I&#8217;ve started inserting&#160;multi byte&#160;characters&#160;in it. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on an application that stores unique values on a field, so I used the unique index for this column, everything was ok, until I&#8217;ve started inserting&nbsp;multi byte&nbsp;characters&nbsp;in it.</p>
<p>The charachters inserted fine, the problem was that I&#8217;m using <a href="http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html" target="_blank">INSERT &#8230; ON DUPLICATE KEY UPDATE</a>&nbsp;syntax to avoid looking if the field exists, so after debugging where the application was breaking I got this:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Query failed: Cannot add or update a child row: a foreign key constraint fails 
(`trubaseek/mapKeywordName`, CONSTRAINT `fkDomainMapNameId` FOREIGN KEY (`NameId`) 
REFERENCES `names` (`nameId`) ON DELETE NO ACTION ON UPDATE NO ACTION)&amp;lt;br&amp;gt; 
SQL: INSERT INTO `mapKeywordName` (`keywordId`, `nameId`) VALUES ('1', '326');</pre></div></div>

<p>so I&#8217;ve spent about an hour changing the encodings&nbsp;without&nbsp;success, but after some testing I discovered that <strong>hôteles</strong> was the same as <strong>hotelës, </strong>I did several testing from the linux console, the mysql browser, and from a php script, and all revealed the same.</p>
<p>When I did this</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">INSERT</span> <span style="color: #990099; font-weight: bold;">INTO</span> <span style="color: #008000;">`names`</span> <span style="color: #FF00FF;">&#40;</span><span style="color: #008000;">`name`</span><span style="color: #000033;">,</span> <span style="color: #008000;">`price`</span><span style="color: #000033;">,</span> <span style="color: #008000;">`priceCurrency`</span><span style="color: #000033;">,</span> <span style="color: #008000;">`bids`</span><span style="color: #000033;">,</span> <span style="color: #008000;">`traffic`</span><span style="color: #000033;">,</span> <span style="color: #008000;">`lastUpdate`</span><span style="color: #FF00FF;">&#41;</span> 
<span style="color: #990099; font-weight: bold;">VALUES</span> <span style="color: #FF00FF;">&#40;</span><span style="color: #008000;">'hotelës'</span><span style="color: #000033;">,</span> <span style="color: #008000;">'0'</span><span style="color: #000033;">,</span> <span style="color: #008000;">'$US'</span><span style="color: #000033;">,</span> <span style="color: #008000;">'0'</span><span style="color: #000033;">,</span> <span style="color: #008000;">'0'</span><span style="color: #000033;">,</span> <span style="color: #000099;">NOW</span><span style="color: #FF00FF;">&#40;</span><span style="color: #FF00FF;">&#41;</span><span style="color: #FF00FF;">&#41;</span> 
<span style="color: #990099; font-weight: bold;">ON</span> <span style="color: #990099; font-weight: bold;">DUPLICATE KEY</span> <span style="color: #990099; font-weight: bold;">UPDATE</span> <span style="color: #008000;">`price`</span><span style="color: #CC0099;">=</span><span style="color: #008000;">'0'</span><span style="color: #000033;">,</span> <span style="color: #008000;">`priceCurrency`</span><span style="color: #CC0099;">=</span><span style="color: #008000;">'$US'</span><span style="color: #000033;">,</span> <span style="color: #008000;">`bids`</span><span style="color: #CC0099;">=</span><span style="color: #008000;">'0'</span><span style="color: #000033;">,</span> <span style="color: #008000;">`traffic`</span><span style="color: #CC0099;">=</span><span style="color: #008000;">'0'</span><span style="color: #000033;">,</span> <span style="color: #008000;">`lastUpdate`</span> <span style="color: #CC0099;">=</span> <span style="color: #000099;">NOW</span><span style="color: #FF00FF;">&#40;</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span></pre></div></div>

<p>I&#8217;ve got this:</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;">Query OK<span style="color: #000033;">,</span> <span style="color: #008080;">2</span> rows affected <span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">0.01</span> sec<span style="color: #FF00FF;">&#41;</span></pre></div></div>

<p>Called from a php script <strong>mysql_insert_id(); </strong>returned me an Id like if it was inserted not updated, but when if I select the returned Id, an error were thrown, because it didn&#8217;t existed.</p>
<p>So after some research, I&#8217;ve found that adding a collation <strong>utf8_bin </strong>to that column fixed this issue.</p>
<p>I haven&#8217;t tested this enough but for now it appears to be working.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/development/mysql-unique-keys-and-collations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parsing HTML documents with Simple Html DOM</title>
		<link>http://ivanvillareal.com/development/parsing-html-documents-whit-simple-html-dom/</link>
		<comments>http://ivanvillareal.com/development/parsing-html-documents-whit-simple-html-dom/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 23:02:34 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Scrapping]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=45</guid>
		<description><![CDATA[I had to get some information from an XHTML document, the information required was on nested tables, I&#8217;ve started working on that and my first approach was to get the [...]]]></description>
			<content:encoded><![CDATA[<p>I had to get some information from an XHTML document, the information required was on nested tables, I&#8217;ve started working on that and my first approach was to get the needed info using regular expressions.</p>
<p>After 2 hours I&#8217;ve got a set of regex that worked pretty well, but when I received a new document, the layout was changed a little bit, and my didn&#8217;t worked as expected, the content was on the same table but this time it had nested tables, which were a really big problem.</p>
<p>I already have used the PHP DOM, but only on xml files, I didn&#8217;t was aware that it had the ability to parse HTML, so I&#8217;ve started working with this and within an hour I had it working, and this time the changes in the document didn&#8217;t affect the scrapping.</p>
<p>In about an hour I had a larger class with several methods to get all the elements I needed, but suddenly I was presented with another challenge, again with nested tables, sometimes the number of childs were shorter than expected, I&#8217;ve experimented several things until I found this <a href="http://sourceforge.net/projects/simplehtmldom/">Simple Html Dom</a>&nbsp;it is pretty straight forward, and it does an excellent job scrapping html documents, all the methods I did were replaced by this:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">            <span style="color: #000088;">$html</span>   <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$dom</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> simple_html_dom<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$dom</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$html</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$items</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$tabla</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$dom</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'table[cellpadding^=2]'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$dom</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'table[cellpadding^=2]'</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$table</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tr'</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$tr</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000088;">$link</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tr</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'a'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'item'</span><span style="color: #009900;">&#93;</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$link</span><span style="color: #339933;">;</span>
                        <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'price'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tr</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">children</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">plaintext</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'bids'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tr</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">children</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">plaintext</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #000088;">$items</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/development/parsing-html-documents-whit-simple-html-dom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automated Capture of Webpages (Main Process)</title>
		<link>http://ivanvillareal.com/linux/automated-capture-of-webpages-main-process/</link>
		<comments>http://ivanvillareal.com/linux/automated-capture-of-webpages-main-process/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 00:21:45 +0000</pubDate>
		<dc:creator>Ivan Villareal</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[architechture]]></category>
		<category><![CDATA[daemon]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xvfb]]></category>
		<category><![CDATA[Zend_Json]]></category>

		<guid isPermaLink="false">http://ivanvillareal.com/?p=25</guid>
		<description><![CDATA[This post is the continuation of &#160;Xvfb and Firefox headless screenshot generator&#160;were I explained how Xvfb and Firefox can be used to get a screenshot of any web resource supported [...]]]></description>
			<content:encoded><![CDATA[<p>This post is the continuation of &nbsp;<strong><a title="Xvfb and Firefox headless screenshot generator" href="http://ivanvillareal.com/linux/xvfb-and-firefox-headles-screenshot-generator/">Xvfb and Firefox headless screenshot generator</a>&nbsp;</strong>were I explained how Xvfb and Firefox can be used to get a screenshot of any web resource supported by firefox.</p>
<p>The next challenge I had, involved the creation of an automated process that could be called from the web or from a cron job, this process job would take a list of sites that need to be captured, and it will save its shots with their respective thumbnail somewhere, also this same process had to&nbsp;communicate&nbsp;somehow with the&nbsp;front end, to inform the user about the status.</p>
<p>So I&#8217;ve planned the&nbsp;architecture&nbsp;for this solution in a modular way</p>
<ul>
<li>A daemon checking if new jobs were sent.</li>
<li>The main process that takes some parameters including the site list and save the generated screenshots somewhere.</li>
<li>A logger facility to&nbsp;communicate&nbsp;with an external process.</li>
<li>A web application to take the site list and show the results.</li>
</ul>
<p>This is the&nbsp;architecture&nbsp;diagram:</p>
<div id="attachment_28" class="wp-caption aligncenter" style="width: 727px"><a href="http://ivanvillareal.com/wp-content/uploads/2009/09/screen_grabber_system_arquitechture1.png"><img class="size-large wp-image-28 " title="Screen Grabber System Arquitechture" src="http://ivanvillareal.com/wp-content/uploads/2009/09/screen_grabber_system_arquitechture1-717x1024.png" alt="Screen Grabber System Arquitechture" width="717" height="1024" /></a><p class="wp-caption-text">Screen Grabber System Arquitechture</p></div>
<p>From the above modules, I will describe briefly the Main process, this main process started as a simple bash script but this wasn&#8217;t sufficient for&nbsp;scalability and security standpoints, so I&#8217;ve decided to make it in perl.</p>
<p>&nbsp;</p>
<p>The current version has changed a lot, but I will describe the main aspects of this script:</p>
<p>The following CPAN extensions were used in this module:</p>
<ul>
<li><a title="Run - Perl extension for to start programs in background" href="http://search.cpan.org/~ilyaz/Run-0.03/Run.pm" target="_blank">Run</a></li>
<li><a title="DBI - Database independent interface for Perl" href="http://search.cpan.org/~timb/DBI-1.609/DBI.pm" target="_blank">DBI</a></li>
<li><a title="File::Basename - Parse file paths into directory, filename and suffix." href="http://search.cpan.org/~dapm/perl-5.10.1/lib/File/Basename.pm" target="_blank">File::Basename</a></li>
<li><span style="text-decoration: line-through;"><a title="Perl implementation of PHP's native serialize(), unserialize() [Used at first to comunicate with PHP frontend, now the comunication is done trough the db]" href="http://hurring.com/code/perl/serialize/" target="_blank">Serialize</a></span></li>
</ul>
<p>This process receives the following arguments:</p>
<ol>
<li>The path to a file where the list of urls are, the filename represents the job name and this file must contain 1 url per line <span style="color: #ff0000;">(Required)</span></li>
<li><span style="color: #ff0000;"><span style="color: #000000;">The number of seconds that firefox will have to render each url <span style="color: #3366ff;">(Optional)</span></span></span></li>
</ol>
<p>After the main process is called, either by a daemon or by a cron job, it will connect to a database and search the job based on the received parameter, this job needs to be inserted with an API I did in php, this API is called from the frontend and the cron jobs as well and it serves as a glue point between everything.</p>
<p>After the update is done, I prepare the environment for Xvfb and spawn a new Virtual Screen with its corresponding firefox instance:</p>
<p>This is the code used:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">sub</span> initialize <span style="color: #009900;">&#123;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;======= Process Starting ==========&quot;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$numArgs</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$#ARGV</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$numArgs</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Bad number of parameters&quot;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Bad Number of params <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000066;">chomp</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$siteList</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$numArgs</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">chomp</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$renderTime</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$jobName</span><span style="color: #339933;">,</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$dirName</span><span style="color: #339933;">,</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$fileExtension</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> fileparse<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$siteList</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'\.processing'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Parameters received <span style="color: #000099; font-weight: bold;">\n</span>SiteList: $siteList<span style="color: #000099; font-weight: bold;">\n</span>Related Domain:$relatedDomain<span style="color: #000099; font-weight: bold;">\n</span>Render Time: $renderTime&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Initializing Db&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$dsn</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;DBI:mysql:database=$db{'name'};host=$db{'host'};port=$db{'port'}&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$dbh</span> <span style="color: #339933;">=</span> DBI<span style="color: #339933;">-&gt;</span><span style="color: #006600;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$dsn</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$db</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'user'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$db</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'pass'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'failed to connect'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$jobRow</span> <span style="color: #339933;">=</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$domain</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$dbh</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">selectrow_hashref</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SELECT idJobs FROM jobs WHERE jobName = ?&quot;</span><span style="color: #339933;">,</span><span style="color: #000066;">undef</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$jobName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$jobId</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$jobRow</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'idJobs'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$result</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$dbh</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">do</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;UPDATE jobs SET dateStarted = CURRENT_TIMESTAMP WHERE jobName = ?&quot;</span><span style="color: #339933;">,</span><span style="color: #000066;">undef</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$jobName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Conected to Db $db{'name'}&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jobUpdate<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Starting capture process...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$ENV</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'DISPLAY'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span><span style="color: #ff0000;">':1'</span><span style="color: #339933;">;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Starting virtual screen...&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$pid</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'xvfb'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> spawn <span style="color: #0000ff;">$xvfbBin</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">':1'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'-screen'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'0'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'1024x768x24'</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Xvfb failed to start $!&quot;</span><span style="color: #339933;">;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Xvfb Pid: $pid{'xvfb'} &quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$pid</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'ratpoison'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> spawn <span style="color: #ff0000;">'ratpoison'</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;spawn ratpoison failed&quot;</span><span style="color: #339933;">;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Ratpoison Pid: $pid{'ratpoison'} &quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$pid</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'firefox'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> spawn <span style="color: #0000ff;">$ffBin</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'-width 1024'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'-height 768'</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;spawn $!&quot;</span><span style="color: #339933;">;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Firefox Process Id: $pid{'firefox'}&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;---Initialize sub end here---&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>After the initialization I proceed to read the list of files to start capturing each one, this is the code that does exactly that:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009999;">&lt;file&gt;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$site</span>    <span style="color: #339933;">=</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span>
 <span style="color: #000066;">chop</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$site</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #666666; font-style: italic;">##</span>
 <span style="color: #666666; font-style: italic;"># Validate that the line starts with http or https</span>
 <span style="color: #666666; font-style: italic;">##</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$site</span> <span style="color: #339933;">=~</span> <span style="color: #000066;">m</span><span style="color: #339933;">!</span><span style="color: #0000ff;">\b</span><span style="color: #009900;">&#40;</span>https<span style="color: #339933;">?</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">://!</span>i<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Processing: $site&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    captureSite<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$site</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$relatedDomainId</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Sites Processed&quot;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'processed'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;=&quot;</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'succesfull'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;+&quot;</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'failed'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;+&quot;</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'unrendered'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;entre &quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'siteCount'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'percentage'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'processed'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">/</span><span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'siteCount'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
    updateStatus<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'stats'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">\%stats</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>file<span style="color: #339933;">&gt;</span></pre></div></div>

<p>And the captureSite sub is where the magic is, here it is:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">sub</span> captureSite <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$site</span>          <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$result</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$imgName</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$imageStatus</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">''</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$fileNameExit</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$imgCounter</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$imgFullName</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$thumbFile</span><span style="color: #339933;">;</span>
&nbsp;
    updateStatus<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'status'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Processing $site&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jobUpdate<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Processing $site&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Starting to capture: $site&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">##</span>
<span style="color: #666666; font-style: italic;"># Check the domain for valid parts</span>
<span style="color: #666666; font-style: italic;">##</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@domainParts</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$site</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">m/\b((?#protocol)https?|ftp):\/\/((?#domain)[-A-Z0-9.]+)((?#file)\/[-A-Z0-9+&amp;@#\/%=~_|!:,.;]*)?((?#parameters)\?[-A-Z0-9+&amp;@#\/%=~_|!:,.;]*)?/ig</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$domainParts</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #0000ff;">$domainParts</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$openedTabs</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000ff;">$maximumTabs</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Maximum Number of Opened Tabs Reached Killing Firefox pid $pid{'firefox'}&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">kill</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$pid</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'firefox'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$pid</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'firefox'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> spawn <span style="color: #0000ff;">$ffBin</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'-width 1024'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'-height 768'</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;spawn $!&quot;</span><span style="color: #339933;">;</span>
            logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;New Firefox Process Id: $pid{'firefox'}&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$openedTabs</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">#because ff is tabless the old page doesn't disappear until</span>
<span style="color: #666666; font-style: italic;">#all content is loaded, so I should remove content first.</span>
        <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ffBin</span> <span style="color: #339933;">.</span> <span style="color: #ff0000;">' -remote &quot;openUrl(http://localhost/blank.html)&quot;'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$res</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">`$cmd`</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ffBin</span> <span style="color: #339933;">.</span> <span style="color: #ff0000;">' -remote &quot;openUrl('</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$site</span><span style="color: #339933;">.</span><span style="color: #ff0000;">')&quot;'</span><span style="color: #339933;">;</span>
        logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Opening $site&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        logThis<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$cmd</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$res</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">`$cmd`</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$openedTabs</span><span style="color: #339933;">++;</span>
        logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Waiting $renderTime seconds to allow page rendering&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$renderTime</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">##</span>
<span style="color: #666666; font-style: italic;"># We remove harmfull charachters</span>
<span style="color: #666666; font-style: italic;"># maybe an md5sum would be better, because</span>
<span style="color: #666666; font-style: italic;"># we would always have the same number of chars</span>
<span style="color: #666666; font-style: italic;">##</span>
        <span style="color: #0000ff;">$imgName</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$site</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$imgName</span> <span style="color: #339933;">=~</span> <span style="color: #000066;">s</span><span style="color: #339933;">!</span><span style="color: #0000ff;">\b</span><span style="color: #009900;">&#40;</span>https<span style="color: #339933;">?</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">://|</span><span style="color: #009900;">&#40;</span>www\<span style="color: #339933;">.</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!!</span>g<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">#removes http://www</span>
            <span style="color: #0000ff;">$imgName</span> <span style="color: #339933;">=~</span> <span style="color: #000066;">s</span><span style="color: #339933;">!</span>\<span style="color: #339933;">/|</span>\<span style="color: #666666; font-style: italic;">#|\?$!!g; #removes \ # ? from the end</span>
            <span style="color: #0000ff;">$imgName</span> <span style="color: #339933;">=~</span> <span style="color: #000066;">s</span><span style="color: #339933;">!</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">^</span>A<span style="color: #339933;">-</span>Z<span style="color: #339933;">^</span>a<span style="color: #339933;">-</span>z<span style="color: #339933;">^</span>_<span style="color: #339933;">^.</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">!</span>_<span style="color: #339933;">!</span>g<span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">#cut excessive large filenames</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">length</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$imgName</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000ff;">$maxFileNameLength</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$imgName</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span> <span style="color: #0000ff;">$imgName</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$maxFileNameLength</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$baseImgName</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$imgName</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #0000ff;">$fileNameExit</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$imgFullName</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$saveDir</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">$imgName</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">$saveFormat</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$thumbFile</span>   <span style="color: #339933;">=</span> <span style="color: #0000ff;">$thumbsDir</span> <span style="color: #339933;">.</span> <span style="color: #ff0000;">'thumb_'</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">$imgName</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">$saveFormat</span><span style="color: #339933;">;</span>
            logThis<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$imgFullName</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Cecking if image already exists&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>e <span style="color: #0000ff;">$imgFullName</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$imgCounter</span><span style="color: #339933;">++;</span>
                <span style="color: #0000ff;">$imgName</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$baseImgName</span> <span style="color: #339933;">.</span> <span style="color: #ff0000;">'_'</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">$imgCounter</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$fileNameExit</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">#creating the screenshot</span>
        <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'import -window root '</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">$imgFullName</span><span style="color: #339933;">;</span>
        logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Command: &quot;</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">$cmd</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$res</span>   <span style="color: #339933;">=</span> <span style="color: #ff0000;">`$cmd`</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>e <span style="color: #0000ff;">$imgFullName</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;The image $imgFullName was created succesfully&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$imageStatus</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'success'</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$fileSize</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #000066;">s</span> <span style="color: #0000ff;">$imgFullName</span><span style="color: #339933;">;</span>
            logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;File Size for image created: $fileSize&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;"># Check the filesize, if its to low wait give more time to render the page</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$fileSize</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$minFileSize</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;File is too small, I think the page has not finished rendering, giving it more time...&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$exit</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$try</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #0000ff;">$exit</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Giving the page $renderTime more seconds to render...&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    updateStatus<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'status'</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Giving $site more time to render...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #000066;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$renderTime</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Command: &quot;</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">$cmd</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #0000ff;">$res</span>   <span style="color: #339933;">=</span> <span style="color: #ff0000;">`$cmd`</span><span style="color: #339933;">;</span>
                    <span style="color: #0000ff;">$fileSize</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #000066;">s</span> <span style="color: #0000ff;">$imgFullName</span><span style="color: #339933;">;</span>
                    logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;File Size for image created: $fileSize&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$fileSize</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000ff;">$minFileSize</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">$exit</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
                        <span style="color: #0000ff;">$imageStatus</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'success'</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">$try</span><span style="color: #339933;">++;</span>
                    <span style="color: #009900;">&#125;</span>
                    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$try</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">3</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">$exit</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
                        <span style="color: #0000ff;">$imageStatus</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'failed'</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Croping image...&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;convert $imgFullName -crop '1024x768+0+24' $imgFullName&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$res</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">`$cmd`</span><span style="color: #339933;">;</span>
&nbsp;
            logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Creating Thumbnail in $thumbFile&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;convert $imgFullName -resize '170x128' $thumbFile&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$res</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">`$cmd`</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">%image</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>
                    site   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">$site</span><span style="color: #339933;">,</span>
                    image  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">$imgFullName</span><span style="color: #339933;">,</span>
                    thumb  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">$thumbFile</span><span style="color: #339933;">,</span>
                    status <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">$imageStatus</span><span style="color: #339933;">,</span>
                    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@images</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">\%image</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            insertImage<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$site</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$imgFullName</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$thumbFile</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$relatedDomainId</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$imageStatus</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$imageStatus</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'success'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'succesfull'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">++;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'failed'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">++;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            logThis<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Fail creating the image&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'unrendered'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'unrendered'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #0000ff;">$stats</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'processed'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">++;</span>
    jobUpdate<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Finished processing $site&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>As you can see I&#8217;m updating the job status in the <strong>jobUpdate</strong> sub, also there are other subs to take care of &nbsp;inserting the screenshot info in the db.</p>
<p>When this program ends, it updates the db to let the inform the daemon that is ready to take more jobs.</p>
<p>In the next post I will be providing &nbsp;info on how the frontend works, and what the final results of this implementation ended.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivanvillareal.com/linux/automated-capture-of-webpages-main-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

