<?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>Tpoxa&#039;s blog</title>
	<atom:link href="http://tpoxa.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tpoxa.com</link>
	<description></description>
	<lastBuildDate>Sun, 19 Jun 2011 21:11:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Bitcoin биржа Mt.Gox &#8212; взломана</title>
		<link>http://tpoxa.com/2011/06/20/bitcoin-birzha-mt-gox-vzlomana/</link>
		<comments>http://tpoxa.com/2011/06/20/bitcoin-birzha-mt-gox-vzlomana/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 21:11:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[bitcoin]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=333</guid>
		<description><![CDATA[Японская биржа торгующая bitcoin была взломана. Как пишет администрация злоумышленники получили доступ ко всей базе в том числе к зашифрованным паролям. Всем пользователям рекомендовано сменить пароли (в случае если они используют одинаковые) в других сервисах. https://support.mtgox.com/entries/20208066-huge-bitcoin-sell-off-due-to-a-compromised-account-rollback]]></description>
			<content:encoded><![CDATA[<p>Японская биржа торгующая bitcoin была взломана. Как пишет администрация злоумышленники получили доступ ко всей базе в том числе к зашифрованным паролям.  Всем пользователям рекомендовано сменить пароли (в случае если они используют одинаковые) в других сервисах.</p>
<p>https://support.mtgox.com/entries/20208066-huge-bitcoin-sell-off-due-to-a-compromised-account-rollback</p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2011/06/20/bitcoin-birzha-mt-gox-vzlomana/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fully ajax website with Yii – Part 2</title>
		<link>http://tpoxa.com/2011/04/19/fully-ajax-website-with-yii-%e2%80%93-part-2/</link>
		<comments>http://tpoxa.com/2011/04/19/fully-ajax-website-with-yii-%e2%80%93-part-2/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 12:28:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Yii]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[yii]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=300</guid>
		<description><![CDATA[In previous post I described how to create simple full ajax web application without changing basically logic of the application. All changes was made to the layout, view and to the base classes. But as you maybe already noticed not everything works well. For example if you tried to sign-in -menu won&#8217;t be updated. In [...]]]></description>
			<content:encoded><![CDATA[<p>In previous post I described how to create simple full ajax web application without changing basically logic of the application. All changes was made to the layout, view and to the base classes.<br />
But as you maybe already noticed not everything works well. For example if you tried to sign-in -menu won&#8217;t be updated. In this short article I will show how to fix such kind of problems.<br/><br />
All data which ouputs for ajax request collecting with help of flash messages (built-in Yii functionality);<br/><br />
So basically if you wand update something on your page you have to set flash message with name <strong>updatedata</strong> wich contains an array with key value elements</p>
<p>Example   <strong>protected/controllers/SiteController.php</strong> ;  actionLoginMethod</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">                <span class="sy0">...</span>
                <span class="co1">// collect user input data</span>
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'LoginForm'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
		<span class="br0">&#123;</span>
			<span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">attributes</span><span class="sy0">=</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'LoginForm'</span><span class="br0">&#93;</span><span class="sy0">;</span>
			<span class="co1">// validate user input and redirect to the previous page if valid</span>
                        <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">validate</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">login</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                               Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">setFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
 						<span class="st_h">'#mainmenu'</span><span class="sy0">=&gt;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderPartial</span><span class="br0">&#40;</span><span class="st_h">'/includes/menu'</span><span class="sy0">,</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>                   
                               <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">redirect</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">homeUrl</span><span class="br0">&#41;</span><span class="sy0">;</span>
                        <span class="br0">&#125;</span>
                <span class="sy0">...</span></pre></div></div></div></div></div></div></div>


<p>As you can see I put all mainmenu to separate file. Here is it&#8217;s content</p>
<p><strong>protected/views/includes/menu.php</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">	<span class="kw2">&lt;?php</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">widget</span><span class="br0">&#40;</span><span class="st_h">'zii.widgets.CMenu'</span><span class="sy0">,</span><span class="kw3">array</span><span class="br0">&#40;</span>
			<span class="st_h">'items'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span>
				<span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'label'</span><span class="sy0">=&gt;</span><span class="st_h">'Home'</span><span class="sy0">,</span> <span class="st_h">'url'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'/site/index'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span>
				<span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'label'</span><span class="sy0">=&gt;</span><span class="st_h">'About'</span><span class="sy0">,</span> <span class="st_h">'url'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'/site/page'</span><span class="sy0">,</span> <span class="st_h">'view'</span><span class="sy0">=&gt;</span><span class="st_h">'about'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span>
				<span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'label'</span><span class="sy0">=&gt;</span><span class="st_h">'Contact'</span><span class="sy0">,</span> <span class="st_h">'url'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'/site/contact'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span>
				<span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'label'</span><span class="sy0">=&gt;</span><span class="st_h">'Login'</span><span class="sy0">,</span> <span class="st_h">'url'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'/site/login'</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'visible'</span><span class="sy0">=&gt;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">isGuest</span><span class="br0">&#41;</span><span class="sy0">,</span>
				<span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'label'</span><span class="sy0">=&gt;</span><span class="st_h">'Logout ('</span><span class="sy0">.</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">name</span><span class="sy0">.</span><span class="st_h">')'</span><span class="sy0">,</span> <span class="st_h">'url'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'/site/logout'</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'visible'</span><span class="sy0">=&gt;!</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">isGuest</span><span class="br0">&#41;</span>
			<span class="br0">&#41;</span><span class="sy0">,</span>
		<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy1">?&gt;</span></pre></div></div></div></div></div></div></div>


<p>For avoiding dublicating data I cut this code from main layout and put there <strong>renderPartial</strong> instead.</p>
<p><strong>protected/views/layout/main.php</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="html"><pre class="de1">...
&lt;div id=&quot;mainmenu&quot; &gt;
		&lt;?php $this-&gt;renderPartial('/includes/menu');?&gt;
&lt;/div&gt;&lt;!-- mainmenu --&gt;
...</pre></div></div></div></div></div></div></div>


<p>So all blocks that might be updated via ajax better to move to includes folder. Now after sign -in main menu is changing.<br/></p>
<p>Now we have to add the same code to sign-out method</p>
<p><strong>protected/controllers/SiteController.php</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="sy0">...</span>
<span class="kw2">public</span> <span class="kw2">function</span> actionLogout<span class="br0">&#40;</span><span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">logout</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">setFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span>
 						<span class="st_h">'#mainmenu'</span><span class="sy0">=&gt;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderPartial</span><span class="br0">&#40;</span><span class="st_h">'/includes/menu'</span><span class="sy0">,</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">redirect</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">homeUrl</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
<span class="sy0">...</span></pre></div></div></div></div></div></div></div>


<p>
In that way you can update everyrhing you want on the webpage. Good luck!<br/>P.S. Suggestions are welcome!<br/> </p>
<p><a href="http://filin.impressweb.org" target="_blank"></p>
<h3>
Full ajax Yii webapp demo<br />
</h3>
<p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2011/04/19/fully-ajax-website-with-yii-%e2%80%93-part-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Fully ajax website with Yii &#8212; Part 1</title>
		<link>http://tpoxa.com/2011/04/19/fully-ajax-website-with-yii/</link>
		<comments>http://tpoxa.com/2011/04/19/fully-ajax-website-with-yii/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 11:07:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Yii]]></category>
		<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[yii]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=264</guid>
		<description><![CDATA[This article will be suitable for who made fully ajax site like  Gmail with best PHP Framework &#8212; Yii. Main requirements are: All pages should be loaded via ajax. All forms should be submitted via ajax. Pages should be reachable by search engines. History support. Window title support Minimal additional code. Here  is my solution. [...]]]></description>
			<content:encoded><![CDATA[<p>This article will be suitable for who made fully ajax site like  Gmail with best <a href="http://www.yiiframework.com/" target="_blank">PHP Framework &#8212; Yii.</a><br />
Main requirements are:</p>
<ol>
<li>All pages should be loaded via ajax.</li>
<li>All forms should be submitted via ajax.</li>
<li>Pages should be reachable by search engines.</li>
<li>History support.</li>
<li>Window title support</li>
<li>Minimal additional code.</li>
</ol>
<p>Here  is my solution.<br />
I get for example simple web application which you can made with help of <a title="Quick start first app" href="http://www.yiiframework.com/doc/guide/1.0/en/quickstart.first-app" target="_blank">yiic utility</a>.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="shell"><pre class="de1">cd /home/www/mywebsite
wget http://yii.googlecode.com/files/yii-1.1.7.r3135.tar.gz
gunzip yii-1.1.7.r3135.tar.gz
tar -xvf yii-1.1.7.r3135.tar
mv yii-1.1.7.r3135/framework/ ./
php framework/yiic.php webapp ./</pre></div></div></div></div></div></div></div>


<p>That is it your application has been created!</p>
<p>Add this code to the <strong>protected/views/layout/main.php</strong> file  before   &lt;/head&gt; tag.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">&nbsp;
<span class="kw2">&lt;?php</span> 
		<span class="re0">$cs</span> <span class="sy0">=</span> Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getClientScript</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  		<span class="re0">$cs</span><span class="sy0">-&gt;</span><span class="me1">registerCoreScript</span><span class="br0">&#40;</span><span class="st_h">'jquery'</span><span class="br0">&#41;</span><span class="sy0">;</span>
  		<span class="re0">$cs</span><span class="sy0">-&gt;</span><span class="me1">registerCoreScript</span><span class="br0">&#40;</span><span class="st_h">'bbq'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="sy1">?&gt;</span>
&nbsp;
  	<span class="kw2">&lt;?php</span> 
<span class="re0">$script</span><span class="sy0">=</span><span class="co3">&lt;&lt;&lt;HTML
			function applychanges(obj) {
					for(k in obj) {
						jQuery(k).html(obj[k]);
					}	
			}
HTML</span><span class="sy0">;</span>
<span class="re0">$cs</span><span class="sy0">-&gt;</span><span class="me1">registerScript</span><span class="br0">&#40;</span><span class="st_h">'applychanges'</span><span class="sy0">,</span> <span class="re0">$script</span><span class="sy0">,</span> CClientScript<span class="sy0">::</span><span class="me2">POS_HEAD</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="sy1">?&gt;</span>	
&nbsp;
  	<span class="kw2">&lt;?php</span> 
<span class="re0">$script</span><span class="sy0">=</span><span class="co3">&lt;&lt;&lt;HTML
		var headline = $(&quot;#loading&quot;);
&nbsp;
		$(document).ajaxSend(function() {
    		headline
        	.attr(&quot;class&quot;, &quot;activity&quot;)
		});
&nbsp;
		$(document).ajaxStop(function() {
    		headline.removeAttr(&quot;class&quot;)
		 	});
HTML</span><span class="sy0">;</span>
<span class="re0">$cs</span><span class="sy0">-&gt;</span><span class="me1">registerScript</span><span class="br0">&#40;</span><span class="st_h">'loading-indicator'</span><span class="sy0">,</span> <span class="re0">$script</span><span class="sy0">,</span> CClientScript<span class="sy0">::</span><span class="me2">POS_READY</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="sy1">?&gt;</span>
&nbsp;
&nbsp;
&nbsp;
<span class="kw2">&lt;?php</span> 
<span class="re0">$script</span><span class="sy0">=</span><span class="co3">&lt;&lt;&lt;HTML
&nbsp;
  // handling links and forms
&nbsp;
  $(&quot;a:not(.direct)&quot;).live(&quot;click&quot;, function(){		  	
		    var href = $(this).attr( &quot;href&quot; );		    
		    if(href==&quot;#&quot;)
		    	return false;	
&nbsp;
		    $.bbq.pushState({ url: href});  
		    return false;
		  });
&nbsp;
&nbsp;
&nbsp;
		  $(&quot;form:not(.direct)&quot;).live(&quot;submit&quot;, function(){
		  	var url = &quot;&quot;;
&nbsp;
			var type = jQuery(this).attr(&quot;method&quot;);
&nbsp;
			if(type==undefined)
		  		type = &quot;get&quot;;
&nbsp;
		  	if(type==&quot;get&quot;) {
&nbsp;
		  		var action = jQuery(this).attr(&quot;action&quot;);
		  		if(action.indexOf(&quot;?&quot;)==-1)
		  			url = action + &quot;?&quot; + jQuery(this).serialize();
		  		else 
		  			url = action + &quot;&amp;&quot;	+ jQuery(this).serialize();
&nbsp;
		  		$.bbq.pushState({ url: url});
&nbsp;
		  	} else {
		  		jQuery.ajax({
					type:&quot;post&quot;,
					data:$(this).serialize(),
					url:jQuery(this).attr(&quot;action&quot;),
						success:applychanges
					});
				}	
&nbsp;
&nbsp;
		  	return false;
		  })
&nbsp;
&nbsp;
		   $(window).bind( &quot;hashchange&quot;, function(e) {	    
    		var url = $.bbq.getState( &quot;url&quot; );    		
&nbsp;
    		if(!url)
    			return;
&nbsp;
		    $(&quot;a&quot;).each(function(){
		      var href = $(this).attr( &quot;href&quot; );
&nbsp;
		      if ( href === url ) {
		      	$(this).addClass( &quot;current&quot; ); $(this).parent(&quot;li&quot;).addClass( &quot;active&quot; );
&nbsp;
		      } else {
		        $(this).removeClass( &quot;current&quot; ); $(this).parent(&quot;li&quot;).removeClass( &quot;active&quot; );
		      }
		    });
&nbsp;
				jQuery.ajax({
					type:&quot;get&quot;,
					url:url,
					success:applychanges
				});
&nbsp;
		  });
&nbsp;
		  $(window).trigger( &quot;hashchange&quot; );
&nbsp;
HTML</span><span class="sy0">;</span>
<span class="re0">$cs</span><span class="sy0">-&gt;</span><span class="me1">registerScript</span><span class="br0">&#40;</span><span class="st_h">'ajaxlinks-and-forms'</span><span class="sy0">,</span> <span class="re0">$script</span><span class="sy0">,</span> CClientScript<span class="sy0">::</span><span class="me2">POS_READY</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="sy1">?&gt;</span></pre></div></div></div></div></div></div></div>


<p>Next code should be added after &lt;body&gt; tag</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="html"><pre class="de1">&lt;div id=&quot;loading&quot;&gt;&lt;?php echo Yii::t('main','Loading');?&gt;&lt;/div&gt;</pre></div></div></div></div></div></div></div>


<p>We&#8217;ve jus added javascript code which will handle all client side job<br/> Then we extend Base controller class &#171;Controller&#187;.</p>
<p><strong>protected/componens/Controller.php</strong>; Add new methods below:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">public</span> <span class="kw2">function</span> ajaxRender<span class="br0">&#40;</span><span class="re0">$file</span><span class="sy0">,</span> <span class="re0">$data</span><span class="sy0">=</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
		<span class="re0">$data</span><span class="br0">&#91;</span><span class="st_h">'title'</span><span class="br0">&#93;</span> <span class="sy0">=</span> CHtml<span class="sy0">::</span><span class="me2">encode</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pageTitle</span><span class="br0">&#41;</span><span class="sy0">;</span>			
		<span class="kw3">header</span><span class="br0">&#40;</span><span class="st_h">'Content-type: text/x-json'</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw1">echo</span> CJSON<span class="sy0">::</span><span class="me2">encode</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="sy0">;</span>
		Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="kw3">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw2">public</span> <span class="kw2">function</span> render<span class="br0">&#40;</span><span class="re0">$file</span><span class="sy0">,</span> <span class="re0">$params</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$data</span><span class="sy0">=</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
		<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">request</span><span class="sy0">-&gt;</span><span class="me1">isAjaxRequest</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp;
			<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">hasFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
				<span class="re0">$flashdata</span> <span class="sy0">=</span> Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">getFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="sy0">;</span>		
				<span class="re0">$data</span> <span class="sy0">=</span> <span class="re0">$data</span> <span class="sy0">+</span> <span class="re0">$flashdata</span><span class="sy0">;</span>	
			<span class="br0">&#125;</span>
&nbsp;
&nbsp;
			<span class="re0">$data</span><span class="br0">&#91;</span><span class="st_h">'#content'</span><span class="br0">&#93;</span> <span class="sy0">=</span> parent<span class="sy0">::</span><span class="me2">renderPartial</span><span class="br0">&#40;</span><span class="re0">$file</span><span class="sy0">,</span> <span class="re0">$params</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="re0">$data</span><span class="br0">&#91;</span><span class="st_h">'title'</span><span class="br0">&#93;</span> <span class="sy0">=</span> CHtml<span class="sy0">::</span><span class="me2">encode</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pageTitle</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw3">header</span><span class="br0">&#40;</span><span class="st_h">'Content-type: text/x-json'</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="kw1">echo</span> CJSON<span class="sy0">::</span><span class="me2">encode</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="sy0">;</span>
			Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="kw3">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>			
			<span class="kw1">echo</span> parent<span class="sy0">::</span><span class="me2">render</span><span class="br0">&#40;</span><span class="re0">$file</span><span class="sy0">,</span> <span class="re0">$params</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>	
		<span class="br0">&#125;</span>	
&nbsp;
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw2">public</span> <span class="kw2">function</span> redirect<span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
			<span class="re0">$url</span> <span class="sy0">=</span> <span class="re0">$url</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">request</span><span class="sy0">-&gt;</span><span class="me1">isAjaxRequest</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp;
			<span class="re0">$data</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">hasFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
				<span class="re0">$flashdata</span> <span class="sy0">=</span> Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">getFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="sy0">;</span>		
				<span class="re0">$data</span> <span class="sy0">=</span> <span class="re0">$data</span> <span class="sy0">+</span> <span class="re0">$flashdata</span><span class="sy0">;</span>	
			<span class="br0">&#125;</span>
&nbsp;
			<span class="re0">$data</span><span class="br0">&#91;</span><span class="st_h">'#content'</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="st_h">'&lt;script type=&quot;text/javascript&quot;&gt;
&nbsp;
				jQuery.ajax({
					url:&quot;'</span><span class="sy0">.</span><span class="re0">$url</span><span class="sy0">.</span><span class="st_h">'&quot;,
					type:&quot;get&quot;,
					success:applychanges
				});
&nbsp;
			&lt;/script&gt;'</span><span class="sy0">;</span>
&nbsp;
&nbsp;
&nbsp;
			<span class="kw3">header</span><span class="br0">&#40;</span><span class="st_h">'Content-type: text/x-json'</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="kw1">echo</span> CJSON<span class="sy0">::</span><span class="me2">encode</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="sy0">;</span>
			Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="kw3">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
			parent<span class="sy0">::</span><span class="me2">redirect</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw2">public</span> <span class="kw2">function</span> refresh<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">request</span><span class="sy0">-&gt;</span><span class="me1">isAjaxRequest</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp;
			<span class="re0">$data</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">hasFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
				<span class="re0">$flashdata</span> <span class="sy0">=</span> Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">getFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="sy0">;</span>		
				<span class="re0">$data</span> <span class="sy0">=</span> <span class="re0">$data</span> <span class="sy0">+</span> <span class="re0">$flashdata</span><span class="sy0">;</span>	
			<span class="br0">&#125;</span>
&nbsp;
&nbsp;
			<span class="re0">$data</span><span class="br0">&#91;</span><span class="st_h">'#content'</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="st_h">'&lt;script type=&quot;text/javascript&quot;&gt;
			var url = $.bbq.getState( &quot;url&quot; );
&nbsp;
			jQuery.ajax({
					url:url,
					type:&quot;get&quot;,
					success:applychanges
				});
&nbsp;
			&lt;/script&gt;'</span><span class="sy0">;</span>
&nbsp;
			<span class="kw3">header</span><span class="br0">&#40;</span><span class="st_h">'Content-type: text/x-json'</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="kw1">echo</span> CJSON<span class="sy0">::</span><span class="me2">encode</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="sy0">;</span>
			Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="kw3">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
			parent<span class="sy0">::</span><span class="me2">refresh</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p> Then you have to override some Request methods to support CWebUser redirects:</p>
<p>Put content below to new file with name <strong>protected/components/EHttpRequest.php</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span> 
&nbsp;
<span class="kw2">class</span> EHttpRequest <span class="kw2">extends</span> CHttpRequest
<span class="br0">&#123;</span>
&nbsp;
	<span class="kw2">public</span> <span class="kw2">function</span> redirect<span class="br0">&#40;</span><span class="re0">$url</span><span class="sy0">,</span><span class="re0">$terminate</span><span class="sy0">=</span><span class="kw4">true</span><span class="sy0">,</span><span class="re0">$statusCode</span><span class="sy0">=</span><span class="nu0">302</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
			<span class="re0">$url</span> <span class="sy0">=</span> <span class="re0">$url</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">request</span><span class="sy0">-&gt;</span><span class="me1">isAjaxRequest</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp;
			<span class="re0">$data</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">hasFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
				<span class="re0">$flashdata</span> <span class="sy0">=</span> Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">getFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="sy0">;</span>		
				<span class="re0">$data</span> <span class="sy0">=</span> <span class="re0">$data</span> <span class="sy0">+</span> <span class="re0">$flashdata</span><span class="sy0">;</span>	
			<span class="br0">&#125;</span>
&nbsp;
			<span class="re0">$data</span><span class="br0">&#91;</span><span class="st_h">'#content'</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="st_h">'&lt;script type=&quot;text/javascript&quot;&gt;
&nbsp;
				jQuery.ajax({
					url:&quot;'</span><span class="sy0">.</span><span class="re0">$url</span><span class="sy0">.</span><span class="st_h">'&quot;,
					type:&quot;get&quot;,
					success:applychanges
				});
&nbsp;
			&lt;/script&gt;'</span><span class="sy0">;</span>
&nbsp;
			<span class="kw3">header</span><span class="br0">&#40;</span><span class="st_h">'Content-type: text/x-json'</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="kw1">echo</span> CJSON<span class="sy0">::</span><span class="me2">encode</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="kw3">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>	
		<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
			parent<span class="sy0">::</span><span class="me2">redirect</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw2">public</span> <span class="kw2">function</span> refresh<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">request</span><span class="sy0">-&gt;</span><span class="me1">isAjaxRequest</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp;
			<span class="re0">$data</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw1">if</span><span class="br0">&#40;</span>Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">hasFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
				<span class="re0">$flashdata</span> <span class="sy0">=</span> Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">getFlash</span><span class="br0">&#40;</span><span class="st_h">'updatedata'</span><span class="br0">&#41;</span><span class="sy0">;</span>		
				<span class="re0">$data</span> <span class="sy0">=</span> <span class="re0">$data</span> <span class="sy0">+</span> <span class="re0">$flashdata</span><span class="sy0">;</span>	
			<span class="br0">&#125;</span>
&nbsp;
&nbsp;
			<span class="re0">$data</span><span class="br0">&#91;</span><span class="st_h">'#content'</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="st_h">'&lt;script type=&quot;text/javascript&quot;&gt;
			var url = $.bbq.getState( &quot;url&quot; );
&nbsp;
			jQuery.ajax({
					url:url,
					type:&quot;get&quot;,
					success:applychanges
				});
&nbsp;
			&lt;/script&gt;'</span><span class="sy0">;</span>
&nbsp;
			<span class="kw3">header</span><span class="br0">&#40;</span><span class="st_h">'Content-type: text/x-json'</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="kw1">echo</span> CJSON<span class="sy0">::</span><span class="me2">encode</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp;
			Yii<span class="sy0">::</span><span class="me2">app</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="kw3">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>	
		<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
			parent<span class="sy0">::</span><span class="me2">refresh</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p> Set new class name for request component in your main config <strong>protected/config/main.php</strong>
<p>It should looks like this</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">  <span class="sy0">....</span> 
  <span class="st_h">'components'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span>
		<span class="st_h">'user'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span>
			<span class="co1">// enable cookie-based authentication</span>
			<span class="st_h">'allowAutoLogin'</span><span class="sy0">=&gt;</span><span class="kw4">true</span><span class="sy0">,</span>
		<span class="br0">&#41;</span><span class="sy0">,</span>
&nbsp;
		<span class="st_h">'request'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span>
                     <span class="st_h">'class'</span><span class="sy0">=&gt;</span><span class="st_h">'EHttpRequest'</span><span class="sy0">,</span>
               <span class="br0">&#41;</span><span class="sy0">,</span>
&nbsp;
   <span class="sy0">....</span></pre></div></div></div></div></div></div></div>


<p> That&#8217;s all. Now you have full ajax simple web application.<br/><br />
Offcourse it has some limitations and issues, further I&#8217;ll extend this article.</p>
<p>P.S. I have forgotten to say about styles.<br/> Just add these lines to your css file.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="css"><pre class="de1"><span class="re0">#loading</span> <span class="br0">&#123;</span>
	<span class="kw1">position</span><span class="sy0">:</span><span class="kw2">fixed</span><span class="sy0">;</span>
	<span class="kw1">padding</span><span class="sy0">:</span><span class="re3">3px</span><span class="sy0">;</span>
	<span class="kw1">background</span><span class="sy0">:</span><span class="re0">#80B646</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span><span class="re0">#fff</span><span class="sy0">;</span>
	<span class="kw1">display</span><span class="sy0">:</span><span class="kw2">none</span><span class="sy0">;</span>
	<span class="kw1">z-index</span><span class="sy0">:</span><span class="nu0">999</span><span class="sy0">;</span>
	<span class="kw1">right</span><span class="sy0">:</span><span class="nu0">0</span><span class="sy0">;</span>
	<span class="kw1">top</span><span class="sy0">:</span><span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="re0">#loading</span><span class="re1">.activity</span> <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span><span class="kw2">block</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2011/04/19/fully-ajax-website-with-yii/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Impress File Share Script</title>
		<link>http://tpoxa.com/2011/03/06/impress-file-share-script/</link>
		<comments>http://tpoxa.com/2011/03/06/impress-file-share-script/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 10:39:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Сайты]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=255</guid>
		<description><![CDATA[Представляю Impress File Share Script скрипт который позволит Вам создать собственный профессиональный файловый хостинг. Скрипт написан на PHP5 используя Yii Framework, для работы скрипт требует использование Nginx сервера. Возможности: Использование в высоко нагруженных системах. Использование не ограниченного количества серверов. Мониторинг использования ресурсов на серверах в следствие которого для отдачи и/или загрузки файла будет выбран наиболее [...]]]></description>
			<content:encoded><![CDATA[<p>Представляю <a href="http://fss.impressweb.org/">Impress File Share Script</a> скрипт который позволит Вам создать собственный профессиональный файловый хостинг.<br />
Скрипт написан на PHP5 используя  <a href="http://www.yiiframework.com/">Yii Framework</a>, для работы скрипт требует использование Nginx сервера.</p>
<p>Возможности:</p>
<ul>
<li> Использование в высоко нагруженных системах.</li>
<li> Использование не ограниченного количества серверов.</li>
<li> Мониторинг использования ресурсов на серверах в следствие которого  для отдачи и/или загрузки файла будет выбран наиболее подходящий сервер.</li>
<li> Логирование всех ошибок, всех серверов.</li>
<li> Загрузка больших файлов. (с индикатором прогресса)</li>
<li> Загрузка больших файлов из сети. (с индикатором прогресса)</li>
<li> Загрузка одновременно нескольких файлов.</li>
<li> Гибкая настройка тарифов и продуктов. Вы всегда можете сделать любое предложение для своих пользователей.</li>
<li> Доступны следующие модули страницы, форма обратной связи, каталог файлов, поиск, теги, профили пользователей, внутренняя переписка, управление своими файлами, управление и слежение за загрузками из сети интернет. Оплата с помощью Webmoney</li>
</ul>
<p>Запланированные улучшения/дополнения</p>
<ul>
<li>Новые платежные модули</li>
<li>Сложный поиск файлов</li>
</ul>
<p>Требования</p>
<ul>
<li> Выделенный сервер</li>
</ul>
<p>Стоимость &#8212; 280 USD.  В стоимость входит установка основного сайта и одного файлового сервера (они могут находится физически на одном сервере)</p>
<p>Демо</p>
<p>Front-end  <a href="http://fss.impressweb.org/">http://fss.impressweb.org/</a></p>
<p>Username  &#8212; admin</p>
<p>Password &#8212; admin</p>
<p>Back-end (Admin panel) <a href="http://fss.impressweb.org/backend">http://fss.impressweb.org/backend</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2011/03/06/impress-file-share-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Эмуляция статических страниц в WordPress</title>
		<link>http://tpoxa.com/2011/02/13/emulyaciya-staticheskix-stranic-v-wordpress/</link>
		<comments>http://tpoxa.com/2011/02/13/emulyaciya-staticheskix-stranic-v-wordpress/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 01:11:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=243</guid>
		<description><![CDATA[Когда для сайта не совсем подходит WordPress CMS, а очень хочется &#8212; разработчики идут на всякие хитрости, благо WordPress их предоставляет с головой. Например выполнение собственных запросов уже в файлах темы ( query_posts). Для этого обычно создают в панели управления статическую страницу, а в директории с темой &#8212; или же кастомную тему (/** Template name [...]]]></description>
			<content:encoded><![CDATA[<p>Когда для сайта не совсем подходит WordPress CMS, а очень хочется &#8212; разработчики идут на всякие хитрости, благо WordPress их предоставляет с головой. <span id="more-243"></span></p>
<p>Например выполнение собственных запросов уже в файлах темы ( query_posts).</p>
<p>Для этого обычно создают в панели управления статическую страницу, а в директории с темой &#8212; или же кастомную тему (/** Template name **/) или файл с именем  <strong>page-(pageSlug).php</strong> или что еще хуже &#8212; <strong>page-(pageId).php</strong>.  Для справок смотрите <a href="http://codex.wordpress.org/images/1/18/Template_Hierarchy.png">иерархию файлов</a> в шаблонах WP</p>
<p>В этом подходе есть значительный минус &#8212; заказчик сайта, которому вы скорее всего передадите доступ к панели управления, может нечаянно или по незнанию удалить страницу чем нарушит работу сайта в целом.</p>
<p>Код:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span> 
add_action<span class="br0">&#40;</span><span class="st_h">'template_redirect'</span><span class="sy0">,</span><span class="st_h">'impress_template_redirect'</span><span class="br0">&#41;</span><span class="sy0">;</span>
add_action<span class="br0">&#40;</span><span class="st_h">'rewrite_rules_array'</span><span class="sy0">,</span><span class="st_h">'impress_add_rewrite_rule'</span><span class="br0">&#41;</span><span class="sy0">;</span>
add_action<span class="br0">&#40;</span><span class="st_h">'query_vars'</span><span class="sy0">,</span> <span class="st_h">'impressweb_query_vars'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp;
<span class="kw2">function</span> impressweb_query_vars<span class="br0">&#40;</span><span class="re0">$qvars</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="re0">$qvars</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st_h">'pseudo_static_page'</span><span class="sy0">;</span>
	<span class="re0">$qvars</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st_h">'pseudo_static_title'</span><span class="sy0">;</span>
	<span class="re0">$qvars</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st_h">'pseudo_static_param1'</span><span class="sy0">;</span>
	<span class="kw1">return</span> <span class="re0">$qvars</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
&nbsp;
<span class="kw2">function</span> impress_template_redirect<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="kw2">global</span> <span class="re0">$wp_query</span><span class="sy0">,</span> <span class="re0">$impress_pages_titles</span><span class="sy0">;</span>
	<span class="co1">//print_r($wp_query);</span>
&nbsp;
	<span class="kw1">if</span><span class="br0">&#40;</span>get_query_var<span class="br0">&#40;</span><span class="st_h">'pseudo_static_page'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>		
&nbsp;
&nbsp;
		<span class="re0">$queried_object</span> <span class="sy0">=</span> <span class="kw2">new</span> stdClass<span class="sy0">;</span>			
		<span class="re0">$queried_object</span><span class="sy0">-&gt;</span><span class="me1">post_title</span> <span class="sy0">=</span> get_query_var<span class="br0">&#40;</span><span class="st_h">'pseudo_static_title'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="re0">$wp_query</span><span class="sy0">-&gt;</span><span class="me1">queried_object</span> <span class="sy0">=</span> <span class="re0">$queried_object</span><span class="sy0">;</span>
		<span class="re0">$wp_query</span><span class="sy0">-&gt;</span><span class="me1">queried_object_id</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span>
		<span class="re0">$wp_query</span><span class="sy0">-&gt;</span><span class="me1">found_posts</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span>
		<span class="re0">$wp_query</span><span class="sy0">-&gt;</span><span class="me1">is_page</span> <span class="sy0">=</span> <span class="nu0">1</span> <span class="sy0">;</span>
		<span class="re0">$wp_query</span><span class="sy0">-&gt;</span><span class="me1">is_home</span> <span class="sy0">=</span> <span class="nu0">0</span> <span class="sy0">;</span>
		<span class="re0">$wp_query</span><span class="sy0">-&gt;</span><span class="me1">post_count</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span>
&nbsp;
		<span class="re0">$template</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span> <span class="st0">&quot;page-&quot;</span><span class="sy0">.</span>get_query_var<span class="br0">&#40;</span><span class="st_h">'pseudo_static_page'</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;.php&quot;</span> <span class="br0">&#41;</span><span class="sy0">;</span>	
		locate_template<span class="br0">&#40;</span> <span class="re0">$template</span><span class="sy0">,</span> <span class="kw4">true</span> <span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw3">die</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	<span class="br0">&#125;</span>	
<span class="br0">&#125;</span>
&nbsp;
<span class="kw2">function</span> impress_add_rewrite_rule<span class="br0">&#40;</span><span class="re0">$rules</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="kw2">global</span> <span class="re0">$impress_pages</span><span class="sy0">;</span>
&nbsp;
	<span class="re0">$newrules</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	<span class="re0">$newrules</span><span class="br0">&#91;</span><span class="st_h">'dnepropetrovsk/events-archive/?$'</span><span class="br0">&#93;</span> <span class="sy0">=</span> 
		<span class="st_h">'index.php?pseudo_static_page=events-archive&amp;pseudo_static_param1=dnepropetrovsk&amp;pseudo_static_title='</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="st_h">'Архив событий | Днепропетровск'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	<span class="re0">$newrules</span><span class="br0">&#91;</span><span class="st_h">'dnepropetrovsk/events-calendar/?$'</span><span class="br0">&#93;</span> <span class="sy0">=</span> 
		<span class="st_h">'index.php?pseudo_static_page=events-calendar&amp;pseudo_static_param1=dnepropetrovsk&amp;pseudo_static_title='</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="st_h">'Календарь событий | Днепропетровск'</span><span class="br0">&#41;</span><span class="sy0">;</span>	
&nbsp;
	<span class="re0">$newrules</span><span class="br0">&#91;</span><span class="st_h">'dnepropetrovsk/event-announcements/?$'</span><span class="br0">&#93;</span> <span class="sy0">=</span> 
		<span class="st_h">'index.php?pseudo_static_page=event-announcements&amp;pseudo_static_param1=dnepropetrovsk&amp;pseudo_static_title='</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="st_h">'Анонс событий | Днепропетровск'</span><span class="br0">&#41;</span><span class="sy0">;</span>	
&nbsp;
	<span class="re0">$newrules</span><span class="br0">&#91;</span><span class="st_h">'/?$'</span><span class="br0">&#93;</span> <span class="sy0">=</span> 
		<span class="st_h">'index.php?pseudo_static_page=event-announcements&amp;pseudo_static_param1=dnepropetrovsk&amp;pseudo_static_title='</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="st_h">'Анонс событий | Днепропетровск'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	<span class="re0">$newrules</span><span class="br0">&#91;</span><span class="st_h">'dnepropetrovsk/weekly-events/?$'</span><span class="br0">&#93;</span> <span class="sy0">=</span> 
		<span class="st_h">'index.php?pseudo_static_page=weekly-events&amp;pseudo_static_param1=ukraine&amp;pseudo_static_title='</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="st_h">'Еженедельные события | Днепропетровск'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	<span class="re0">$newrules</span><span class="br0">&#91;</span><span class="st_h">'dnepropetrovsk/reports/?$'</span><span class="br0">&#93;</span> <span class="sy0">=</span> 
		<span class="st_h">'index.php?pseudo_static_page=reports&amp;pseudo_static_param1=dnepropetrovsk&amp;pseudo_static_title='</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="st_h">'Отчеты | Днепропетровск'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp;
	<span class="re0">$newrules</span><span class="br0">&#91;</span><span class="st_h">'ukraine/events-archive/?$'</span><span class="br0">&#93;</span> <span class="sy0">=</span> 
		<span class="st_h">'index.php?pseudo_static_page=events-archive&amp;pseudo_static_param1=ukraine&amp;pseudo_static_title='</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="st_h">'Архив событий | Украина'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	<span class="re0">$newrules</span><span class="br0">&#91;</span><span class="st_h">'ukraine/events-calendar/?$'</span><span class="br0">&#93;</span> <span class="sy0">=</span> 
		<span class="st_h">'index.php?pseudo_static_page=events-archive&amp;pseudo_static_param1=ukraine&amp;pseudo_static_title='</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="st_h">'Календарь событий | Украина'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
	<span class="kw1">return</span> <span class="re0">$newrules</span> <span class="sy0">+</span> <span class="re0">$rules</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
&nbsp;
<span class="sy1">?&gt;</span></pre></div></div></div></div></div></div></div>


]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2011/02/13/emulyaciya-staticheskix-stranic-v-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magnetizer</title>
		<link>http://tpoxa.com/2011/02/05/magnetizer/</link>
		<comments>http://tpoxa.com/2011/02/05/magnetizer/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 12:15:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[magnet-link]]></category>
		<category><![CDATA[torrent]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=228</guid>
		<description><![CDATA[Представляю вам сервис который позволяет получить магнет ссылку из торрент файла. Magnetizer.com.ua]]></description>
			<content:encoded><![CDATA[<p>Представляю вам сервис который позволяет получить магнет ссылку из торрент файла.<br />
<a href="http://magnetizer.com.ua/">Magnetizer.com.ua</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2011/02/05/magnetizer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Привет Solr, Sphinx &#8212; пока, пока!</title>
		<link>http://tpoxa.com/2011/02/03/privet-solr-sphinx-poka-poka/</link>
		<comments>http://tpoxa.com/2011/02/03/privet-solr-sphinx-poka-poka/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 16:59:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=219</guid>
		<description><![CDATA[Недавно для одно из своих проектов понадобился полноценный поиск. В первую очередь я обратился к Sphinx но вскоре был вынужден от него отказаться в пользу поискового движка Solr от Apache Software Foundation Основные преимущества (для меня) Solr поставляется с более либеральной лицензией. (чтобы изменить функционал или использовать Sphinx как часть коммерческого приложения нужно покупать коммерческую [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно для одно из своих проектов понадобился полноценный поиск. В первую очередь я обратился к Sphinx но вскоре был вынужден от него отказаться в пользу поискового движка Solr от Apache Software Foundation</p>
<p>Основные преимущества (для меня)</p>
<ul>
<li> Solr поставляется с более либеральной лицензией. (чтобы изменить функционал или использовать Sphinx как часть коммерческого приложения нужно покупать коммерческую лицензию)</li>
<li> Solr не нуждается в предоставлении уникального идентификатора для документа. Для Sphinx нужен числовое уникальное значение.</li>
<li> В Solr тоже есть посдветка искомых слов.</li>
<li> В Solr также есть поддержка русской морфологии, подсветка искомого запроса в результатах поиска.</li>
<li> Для Solr не проблема удалить единичный или набор документов которые просто подходят определенному критерию поиска. Например можно все результаты поиска по определенному слову. В случае со Sphinx для этого нужно проводить переиндексацию. Также в единичном порядке можно добавить документы в индекс.</li>
<li> В Solr встроена поддержка проверки орфографии и утилита позволяющая не использовать дубликаты документов в поиске.</li>
<li> Solr может индексировать документы такие как Microsoft Word, PDF и другие</li>
<li> Solr   работает везде где есть Java</li>
<li> Для Solr есть отличное PHP extension под PHP http://www.php.net/manual/en/book.solr.php  Позволяющее проводить поиск, добавлять, удалять документы</li>
</ul>
<p>Думаю преимуществ достаточно чтобы выбрать Solr как поисковый движок для Вашего сайта.</p>
<p>Кратко о установке и использовании. На примере Freebsd.</p>
<p>Обновляем порты  (portsnap fetch, portsnap extract, portsnap update) или любым другим удобным для Вас способом</p>
<p>cd /usr/ports/textproc/apache-solr<br />
make install clean</p>
<p>В директории порта,  появится папка work в которой будет  готовый к работе дистрибутив. Переместим его в более удобное для работы место.</p>
<p>Далее.</p>
<p>cd apache-solr-1.4.1/example</p>
<p>java -jar start.jar</p>
<p>Все, Solr запускается.</p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2011/02/03/privet-solr-sphinx-poka-poka/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gearman воркер для скачивания файлов по URl</title>
		<link>http://tpoxa.com/2010/12/03/gearman-vorker-dlya-skachivaniya-fajlov-po-url/</link>
		<comments>http://tpoxa.com/2010/12/03/gearman-vorker-dlya-skachivaniya-fajlov-po-url/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 11:13:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Yii]]></category>
		<category><![CDATA[gearman]]></category>
		<category><![CDATA[yii]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=203</guid>
		<description><![CDATA[Gearman, сервер организации и распределения задач, более подробно можно узнать на оффициальном сайте http://gearman.org/ Данную статью я пишу для тех кто уже знает для чего он нужен и как его устанавливать.  В одном из моих проектов gearman воркеры скачивают файлы по ссылке. Также они во время работы отсылают статусы о прогрессе. Вы можете запустить нужно [...]]]></description>
			<content:encoded><![CDATA[<p>Gearman, сервер организации и распределения задач, более подробно можно узнать на оффициальном сайте http://gearman.org/</p>
<p>Данную статью я пишу для тех кто уже знает для чего он нужен и как его устанавливать.  В одном из моих проектов gearman воркеры скачивают файлы по ссылке. Также они во время работы отсылают статусы о прогрессе. Вы можете запустить нужно количество воркеров в зависимости от доступного интернет канала и конфигурации серверов.</p>
<p>Собственно сам класс воркера</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span> 
&nbsp;
<span class="kw2">class</span> FetchWorker <span class="kw2">extends</span> GearmanWorker <span class="br0">&#123;</span>
&nbsp;
	<span class="kw2">public</span> <span class="re0">$job</span><span class="sy0">;</span>
	<span class="kw2">public</span> <span class="re0">$downloaded</span><span class="sy0">;</span>
	<span class="kw2">public</span> <span class="re0">$tmp_file_name</span><span class="sy0">;</span>
	<span class="kw2">public</span> <span class="re0">$tmp_file_pointer</span><span class="sy0">;</span>
	<span class="kw2">public</span> <span class="re0">$download_size</span><span class="sy0">;</span>
	<span class="kw2">public</span> <span class="re0">$username</span><span class="sy0">;</span>
	<span class="kw2">public</span> <span class="re0">$pswd</span><span class="sy0">;</span>
	<span class="kw2">public</span> <span class="re0">$url</span><span class="sy0">;</span>
	<span class="kw2">public</span> <span class="re0">$referrer</span><span class="sy0">;</span>
	<span class="kw2">public</span> <span class="re0">$last_part_time</span><span class="sy0">;</span>
&nbsp;
&nbsp;
	<span class="kw2">private</span> <span class="kw2">function</span> resetvalues<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">download_size</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">downloaded</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">username</span> <span class="sy0">=</span> <span class="st_h">''</span><span class="sy0">;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pswd</span> <span class="sy0">=</span> <span class="st_h">''</span><span class="sy0">;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">referrer</span> <span class="sy0">=</span> <span class="st_h">''</span><span class="sy0">;</span>
&nbsp;
	<span class="br0">&#125;</span>
	<span class="kw2">private</span> <span class="kw2">function</span> closefp<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="sy0">@</span><span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">tmp_file_pointer</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw2">private</span>	<span class="kw2">function</span> remote_filesize<span class="br0">&#40;</span><span class="br0">&#41;</span>
	<span class="br0">&#123;</span>	
		<span class="kw3">ob_start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="re0">$ch</span> <span class="sy0">=</span> <span class="kw3">curl_init</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">url</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_HEADER<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_NOBODY<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
	    <span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_FOLLOWLOCATION<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
	    <span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_REFERER<span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">referrer</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">empty</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">username</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span><span class="kw3">empty</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pswd</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
			<span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_USERPWD<span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">username</span><span class="sy0">.</span><span class="st_h">':'</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pswd</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="re0">$ok</span> <span class="sy0">=</span> <span class="kw3">curl_exec</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw3">curl_close</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="re0">$head</span> <span class="sy0">=</span> <span class="kw3">ob_get_contents</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw3">ob_end_clean</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="re0">$regex</span> <span class="sy0">=</span> <span class="st_h">'/Content-Length:\s([0-9].+?)\s/'</span><span class="sy0">;</span>
		<span class="re0">$count</span> <span class="sy0">=</span> <span class="kw3">preg_match</span><span class="br0">&#40;</span><span class="re0">$regex</span><span class="sy0">,</span> <span class="re0">$head</span><span class="sy0">,</span> <span class="re0">$matches</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">return</span> <span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$matches</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> ? <span class="re0">$matches</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
&nbsp;
&nbsp;
	<span class="kw2">function</span> fetchfile<span class="br0">&#40;</span><span class="re0">$job</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">resetvalues</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">job</span> <span class="sy0">=</span> <span class="re0">$job</span><span class="sy0">;</span>
		<span class="re0">$workload</span><span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">job</span><span class="sy0">-&gt;</span><span class="me1">workload</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">echo</span> <span class="st0">&quot;Received job: &quot;</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">job</span><span class="sy0">-&gt;</span><span class="me1">handle</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
&nbsp;
		<span class="re0">$args</span> <span class="sy0">=</span> <span class="kw3">json_decode</span><span class="br0">&#40;</span><span class="re0">$workload</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">url</span><span class="br0">&#41;</span> <span class="sy0">||</span> <span class="sy0">!</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">tmp_file</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
			<span class="kw1">print</span> <span class="st0">&quot;Url and tmp_file are required&quot;</span><span class="sy0">;</span>
			<span class="kw1">return</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">url</span> <span class="sy0">=</span> <span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">url</span><span class="sy0">;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pswd</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">password</span><span class="br0">&#41;</span><span class="br0">&#41;</span>? <span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">password</span> <span class="sy0">:</span> <span class="st_h">''</span><span class="sy0">;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">username</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">username</span><span class="br0">&#41;</span><span class="br0">&#41;</span>? <span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">username</span> <span class="sy0">:</span> <span class="st_h">''</span><span class="sy0">;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">referrer</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">referrer</span><span class="br0">&#41;</span><span class="br0">&#41;</span> ? <span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">referrer</span> <span class="sy0">:</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">url</span><span class="sy0">;</span>
&nbsp;
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">download_size</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">remote_filesize</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">download_size</span><span class="sy0">==</span><span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
			<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">resetvalues</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="kw1">print</span> <span class="st0">&quot;Can't get size header of the remote file&quot;</span><span class="sy0">;</span>
			<span class="kw1">return</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">tmp_file_name</span> <span class="sy0">=</span> <span class="re0">$args</span><span class="sy0">-&gt;</span><span class="me1">tmp_file</span><span class="sy0">;</span>
		<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">tmp_file_pointer</span> <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">tmp_file_name</span><span class="sy0">,</span> <span class="st0">&quot;wb&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">tmp_file_pointer</span><span class="br0">&#41;</span>
			<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">fetchurl</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw1">else</span> <span class="br0">&#123;</span>
				<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">resetvalues</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
				<span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">&quot;Couldn't open tmp file&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
				<span class="kw1">return</span><span class="sy0">;</span>
			 <span class="br0">&#125;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw2">function</span> percent<span class="br0">&#40;</span><span class="re0">$num_amount</span><span class="sy0">,</span> <span class="re0">$num_total</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="re0">$count1</span> <span class="sy0">=</span> <span class="re0">$num_amount</span> <span class="sy0">/</span> <span class="re0">$num_total</span><span class="sy0">;</span>
		<span class="re0">$count2</span> <span class="sy0">=</span> <span class="re0">$count1</span> <span class="sy0">*</span> <span class="nu0">100</span><span class="sy0">;</span>
		<span class="re0">$count</span> <span class="sy0">=</span> <span class="kw3">ceil</span><span class="br0">&#40;</span><span class="re0">$count2</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw1">return</span> <span class="re0">$count</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw2">function</span> fetchurl<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
		<span class="re0">$ch</span> <span class="sy0">=</span> <span class="kw3">curl_init</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">url</span><span class="br0">&#41;</span><span class="sy0">;</span>	
		<span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_NOPROGRESS<span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_WRITEFUNCTION<span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">'fetchcallback'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_REFERER<span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">referrer</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_FOLLOWLOCATION<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">empty</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">username</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span><span class="kw3">empty</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pswd</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
			<span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_USERPWD<span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">username</span><span class="sy0">.</span><span class="st_h">':'</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pswd</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="kw3">curl_setopt</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> CURLOPT_HEADERFUNCTION<span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">'readHeader'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw3">curl_exec</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw3">curl_close</span><span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw2">function</span> readHeader<span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> <span class="re0">$headers_text</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">return</span> <span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re0">$headers_text</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw2">function</span> fetchcallback<span class="br0">&#40;</span><span class="re0">$ch</span><span class="sy0">,</span> <span class="re0">$str</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
			<span class="re0">$length</span> <span class="sy0">=</span>  <span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re0">$str</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">downloaded</span> <span class="sy0">+=</span><span class="re0">$length</span><span class="sy0">;</span>
			<span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">fwrite</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">tmp_file_pointer</span><span class="sy0">,</span><span class="re0">$str</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
				<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">resetvalues</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
				<span class="kw1">print</span> <span class="st0">&quot;Can't write to tmp file<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
				<span class="kw1">return</span><span class="sy0">;</span>
			<span class="br0">&#125;</span> 
&nbsp;
			<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">downloaded</span> <span class="sy0">&gt;=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">download_size</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
				 <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">resetvalues</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
				 <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">job</span><span class="sy0">-&gt;</span><span class="me1">sendStatus</span><span class="br0">&#40;</span><span class="nu0">100</span><span class="sy0">,</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="sy0">;</span>
				 <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">job</span><span class="sy0">-&gt;</span><span class="me1">sendComplete</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
				 <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">closefp</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>			
				 <span class="kw1">print</span> <span class="st0">&quot;100% Done<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>	
				 <span class="kw1">return</span><span class="sy0">;</span>
			<span class="br0">&#125;</span>		
&nbsp;
			<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">last_part_time</span> <span class="sy0">&gt;</span> <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="co1">// 2 seconds</span>
			<span class="kw1">return</span> <span class="re0">$length</span><span class="sy0">;</span>
&nbsp;
			<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">last_part_time</span> <span class="sy0">=</span> <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">job</span><span class="sy0">-&gt;</span><span class="me1">sendStatus</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">percent</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">downloaded</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">download_size</span><span class="br0">&#41;</span> <span class="sy0">,</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw1">print</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">percent</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">downloaded</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">download_size</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;%...&quot;</span><span class="sy0">;</span>
			<span class="kw1">return</span> <span class="re0">$length</span><span class="sy0">;</span>	
	<span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Как видите для скачивания используется curl.<br />
Далее прилагаю код демона, который поднимает вышеуказанный класс. У меня это реализовано как консольная комманда Yii фреймворка, но вы можете реализовать демон как угодно.</p>
<p>Версия с использованием Yii</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span> 
<span class="co1">//FetchCommand.php |  placed in commands folder of Yii protected dir</span>
<span class="kw2">class</span> FetchCommand <span class="kw2">extends</span> CConsoleCommand
<span class="br0">&#123;</span>
	<span class="kw2">public</span> <span class="kw2">function</span> run<span class="br0">&#40;</span><span class="re0">$args</span><span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
&nbsp;
		<span class="re0">$worker</span> <span class="sy0">=</span> <span class="kw2">new</span> FetchWorker<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="re0">$worker</span><span class="sy0">-&gt;</span><span class="me1">addServer</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> 
		<span class="re0">$worker</span><span class="sy0">-&gt;</span><span class="me1">addFunction</span><span class="br0">&#40;</span><span class="st0">&quot;fetchfile&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="re0">$worker</span><span class="sy0">,</span> <span class="st0">&quot;fetchfile&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> 
&nbsp;
&nbsp;
		<span class="kw1">while</span> <span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>
		<span class="br0">&#123;</span>
		  <span class="kw1">print</span> <span class="st0">&quot;Waiting for job...<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
&nbsp;
		  <span class="re0">$ret</span><span class="sy0">=</span> <span class="re0">$worker</span><span class="sy0">-&gt;</span><span class="me1">work</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		  <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$worker</span><span class="sy0">-&gt;</span><span class="me1">returnCode</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">!=</span> GEARMAN_SUCCESS<span class="br0">&#41;</span>
		    <span class="kw1">break</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
&nbsp;
	<span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Standalone версия</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">&nbsp;
<span class="kw2">&lt;?php</span> 
<span class="co1">//worker.php</span>
&nbsp;
		<span class="re0">$worker</span> <span class="sy0">=</span> <span class="kw2">new</span> FetchWorker<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="re0">$worker</span><span class="sy0">-&gt;</span><span class="me1">addServer</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> 
		<span class="re0">$worker</span><span class="sy0">-&gt;</span><span class="me1">addFunction</span><span class="br0">&#40;</span><span class="st0">&quot;fetchfile&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="re0">$worker</span><span class="sy0">,</span> <span class="st0">&quot;fetchfile&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> 
&nbsp;
&nbsp;
		<span class="kw1">while</span> <span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>
		<span class="br0">&#123;</span>
		  <span class="kw1">print</span> <span class="st0">&quot;Waiting for job...<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
&nbsp;
		  <span class="re0">$ret</span><span class="sy0">=</span> <span class="re0">$worker</span><span class="sy0">-&gt;</span><span class="me1">work</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		  <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$worker</span><span class="sy0">-&gt;</span><span class="me1">returnCode</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">!=</span> GEARMAN_SUCCESS<span class="br0">&#41;</span>
		    <span class="kw1">break</span><span class="sy0">;</span>
		<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Запуск standalone версии</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="shell"><pre class="de1">&nbsp;
php worker.php</pre></div></div></div></div></div></div></div>


<p>Запус версии с использованием Yii</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="shell"><pre class="de1">php dispatch.php Fetch</pre></div></div></div></div></div></div></div>


<p>Ну и наконец чтобы статья была исчерпывающей я приведу скрипт (точку входа) dispatch.php для Yii. В принципе он очень похож на обычный index.php  для Yii application</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="kw3">dirname</span><span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">'/framework/yii.php'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$config</span><span class="sy0">=</span><span class="kw3">dirname</span><span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">'/protected/config/console.php'</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// remove the following line when in production mode</span>
<span class="kw3">defined</span><span class="br0">&#40;</span><span class="st_h">'YII_DEBUG'</span><span class="br0">&#41;</span> or <span class="kw3">define</span><span class="br0">&#40;</span><span class="st_h">'YII_DEBUG'</span><span class="sy0">,</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
Yii<span class="sy0">::</span><span class="me2">createConsoleApplication</span><span class="br0">&#40;</span><span class="re0">$config</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Нужно только создать отдельный конфиг для консоли. Как минимум скопируйте содержимое main config<br />
Все, будем считать что наши демоны <img src='http://tpoxa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  запущены и ждут камманды от gearman jоb сервера чтобы начать работу.</p>
<p>Даем комманду job серверу</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span> 
<span class="co1">//index.php</span>
&nbsp;
<span class="co2"># Create our client object.
</span><span class="re0">$client</span><span class="sy0">=</span> <span class="kw2">new</span> GearmanClient<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co2"># Add default server (localhost).
</span><span class="re0">$client</span><span class="sy0">-&gt;</span><span class="me1">addServer</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st_h">'handle'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
	<span class="re0">$handle</span> <span class="sy0">=</span> <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st_h">'handle'</span><span class="br0">&#93;</span><span class="sy0">;</span>
	<span class="re0">$status</span> <span class="sy0">=</span> <span class="re0">$client</span><span class="sy0">-&gt;</span><span class="me1">jobStatus</span><span class="br0">&#40;</span><span class="re0">$handle</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="kw3">print_r</span><span class="br0">&#40;</span><span class="re0">$status</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="kw3">die</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re0">$params</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span>
		<span class="st_h">'referrer'</span><span class="sy0">=&gt;</span><span class="st_h">''</span><span class="sy0">,</span>
		<span class="st_h">'tmp_file'</span><span class="sy0">=&gt;</span><span class="kw3">dirname</span><span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">'/test.file'</span><span class="sy0">,</span>
		<span class="st_h">'url'</span><span class="sy0">=&gt;</span><span class="st_h">'http://dl1.overload.in.ua/files/2050/SOD3z9jF3LiXdxO/file.zip'</span><span class="sy0">,</span>
		<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="re0">$params</span> <span class="sy0">=</span> <span class="kw3">json_encode</span><span class="br0">&#40;</span><span class="re0">$params</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$handle</span> <span class="sy0">=</span> <span class="re0">$client</span><span class="sy0">-&gt;</span><span class="me1">doBackground</span><span class="br0">&#40;</span><span class="st0">&quot;fetchfile&quot;</span><span class="sy0">,</span> <span class="re0">$params</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">header</span><span class="br0">&#40;</span><span class="st_h">'Location: index.php?handle='</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="re0">$handle</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>В примере идет подключение к job серверу, дается фоновая команда с параметрами. Далее работа скрипта заканчивается и идет редирект с параметром именем задачи job-handle<br />
Далее по этому параметру скрипт может следить за прогрессом выполнения именно этого таска.</p>
<p>Конец.</p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2010/12/03/gearman-vorker-dlya-skachivaniya-fajlov-po-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Не пользуйтесь Яндекс.Деньгами</title>
		<link>http://tpoxa.com/2010/11/07/do-not-use-yandex-money/</link>
		<comments>http://tpoxa.com/2010/11/07/do-not-use-yandex-money/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 07:33:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=192</guid>
		<description><![CDATA[Вчера волей случая пришлось завести себе счет. Я и до этого был настроен против Яндекса, но это уже ни в какие рамки не лезит. В конце концов по большому счету Яндекс.Деньги абсолютно не предназначены для не граждан РФ. О чем можно догадаться только начав пользоваться этой системой. Чтобы вывести ЯД на вебмани через сам Яндекс [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера волей случая пришлось завести себе счет. Я и до этого был настроен против Яндекса, но это уже ни в какие рамки не лезит. В конце концов по большому счету Яндекс.Деньги абсолютно не предназначены для не граждан РФ. О чем можно догадаться только начав пользоваться этой системой.</p>
<p>Чтобы вывести ЯД на вебмани через сам Яндекс нужно идентифицироват свой счет в ЯД а также иметь Атестат не ниже формального для Webmoney. Ваши данные (фамилия,имя) должны совпадать для обоих акаунтов. Комиссия 4.5%!</p>
<p>Пройти идентификацию оказывается не так уж и просто. Интересная информация по этому поводу <a href="http://www.klubok.net/reviews237.html">здесь</a></p>
<p>Также можно вывести с помощью сервисов http://yad.co.ua/ и http://www.yd.dp.ua/ что я и попытаюсь сделать, можете посмотреть с какими потерями я это сделаю. Но это все ничего. Ведь оказывается Вы вообще можете остаться без своих денег в любой момент. (см ссылку выше)</p>
<p>Вопрос, к чему этот пиар, рекламные кампании в Украине если полный спектр услуг и гарантий предоставляют только жителям РФ.</p>
<p>PS. БАГИ ЯНДЕКС.ДЕНЕГ</p>
<p>Проходил регистрацию, указал свой мобильный номер МТС УКРАИНА, СМС с кодом пришла почти сразу.</p>
<p>После регистрации захожу в настройки:</p>
<p><a href="http://tpoxa.com/wp-content/uploads/2010/11/Tv0wtPN5lUS4tCr24WSnRw.jpg"><img class="size-medium wp-image-194 alignnone" title="ЯндексГавно" src="http://tpoxa.com/wp-content/uploads/2010/11/Tv0wtPN5lUS4tCr24WSnRw-300x180.jpg" alt="" width="300" height="180" /></a></p>
<p>Мой совет &#8212; избегать использования Яндекс.Денег не гражданам России.</p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2010/11/07/do-not-use-yandex-money/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Работа с сессиями в плагинах WordPress</title>
		<link>http://tpoxa.com/2010/10/20/using-sessions-in-wordpress-plugins/</link>
		<comments>http://tpoxa.com/2010/10/20/using-sessions-in-wordpress-plugins/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 19:29:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=185</guid>
		<description><![CDATA[Для разработчиков под WordPress может быть полезно. Запускаем PHP сессию из плагина &#160; function my_plugin_init&#40;&#41; &#123; if &#40;!session_id&#40;&#41;&#41; session_start&#40;&#41;; &#160; &#125; &#160; add_action&#40;'init','my_plugin_init'&#41;; После этого можно свободно пользоваться суперглобальным массивом $_SESSION]]></description>
			<content:encoded><![CDATA[<p>Для разработчиков под WordPress может быть полезно. Запускаем PHP сессию из плагина</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">&nbsp;
<span class="kw2">function</span> my_plugin_init<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">session_id</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="kw3">session_start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="br0">&#125;</span>
&nbsp;
add_action<span class="br0">&#40;</span><span class="st_h">'init'</span><span class="sy0">,</span><span class="st_h">'my_plugin_init'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>После этого можно свободно пользоваться суперглобальным массивом $_SESSION</p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2010/10/20/using-sessions-in-wordpress-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

