<?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>Mon, 23 Apr 2012 22:01:05 +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>Обновляем корейский  BlackVue DR400G-HD и меняем язык.</title>
		<link>http://tpoxa.com/2012/04/24/obnovlyaem-korejskij-blackvue-dr400g-hd-i-menyaem-yazyk/</link>
		<comments>http://tpoxa.com/2012/04/24/obnovlyaem-korejskij-blackvue-dr400g-hd-i-menyaem-yazyk/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 21:57:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=360</guid>
		<description><![CDATA[Приобрел себе недавно этот девайс на Ebay. Приехал он с корейской прошивкой версии 1.038 соответственно голосовые подсказки на корейском языке. На офф сайте на данный момент лежит последняя 1.040 &#8212; прошивка с англоязычными подсказками. Прошив ее я обнаружил что регистратор не хочет включаться заявив что версия прошивки и программного обеспечения не совпадает. &#171;version information is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://tpoxa.com/wp-content/uploads/2012/04/BlackVUE-DR400HD_03_enl.jpg"><img class="alignleft size-medium wp-image-361" title="BlackVUE-DR400HD_03_enl" src="http://tpoxa.com/wp-content/uploads/2012/04/BlackVUE-DR400HD_03_enl-300x160.jpg" alt="" width="300" height="160" /></a></p>
<p>Приобрел себе недавно этот девайс на Ebay. Приехал он с корейской прошивкой версии 1.038 соответственно голосовые подсказки на корейском языке.<br />
На офф сайте на данный момент лежит последняя 1.040 &#8212; прошивка с англоязычными подсказками. Прошив ее я обнаружил что регистратор не хочет включаться заявив что версия прошивки и программного обеспечения не совпадает. &#171;version information is different&#187; .<br />
Погуглив оказалось что с версии 1.038 регистраторы предназначенные для Кореи не прошиваются на отличные от корейского языки. <span id="more-360"></span></p>
<p>После тщетных поисков в рунете обнаружил этот пост.<br />
<a href="http://forums.redflagdeals.com/merged-official-blackvue-dr400g-hd-owners-thread-new-beta-f-w-4-18-a-1147913/58/#post14601440">http://forums.redflagdeals.com/merged-official-blackvue-dr400g-hd-owners-thread-new-beta-f-w-4-18-a-1147913/58/#post14601440</a></p>
<p><strong>Последовательность действий для обновление вашего регистратора к последней (на данный момент 1.040 ) с английскими голосовыми подсказками.</strong></p>
<ul>
<li>Форматируем карту с помощью <a href="http://eng.pittasoft.com/bbs/board.php?bo_table=download01&amp;wr_id=52">SD Card Formatter</a> &#8212; предварительно сохранив себе на компьютер папку Record если Вам нужны текущие записи.</li>
<li>Скачиваем английскую 1.040 <a href="http://www.blackvue.com/en/contents/sub3.asp?mode=view&amp;serboardsort=&amp;page=1&amp;idx=870&amp;search=&amp;searchstr=">http://www.blackvue.com/en/contents/sub3.asp?mode=view&amp;serboardsort=&amp;page=1&amp;idx=870&amp;search=&amp;searchstr=</a></li>
<li>Устанавливаем пользуясь подсказками.</li>
<li>Заходим на вашу карточку \BlackVue\Config\version.bin и меняем все English на Korean</li>
<li>Затем вставляем SD карту в регистратор, слышим на английском что тот обновляется, затем перезагружается и приветствие уже на корейском.</li>
<li>После этого опять вставляем карту в компьютер и меняем язык обратно с Korean yf English.</li>
<li>Возвращаем карту назад и радуемся последней не корейской прошивке на сером регистраторе!</li>
</ul>
<p>От себя добавлю что на самом деле классный регистратор мне есть уже с чем сравнивать. Технические характеристики можно посмотреть <a href="http://www.blackvue.com/en/contents/sub1.asp?idx=7">здесь </a></p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2012/04/24/obnovlyaem-korejskij-blackvue-dr400g-hd-i-menyaem-yazyk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yii ConsoleApplication and Gearman Workers  PSD to JPEG conversation</title>
		<link>http://tpoxa.com/2012/03/07/yii-consoleapplication-and-gearman-workers-psd-to-jpeg-conversation/</link>
		<comments>http://tpoxa.com/2012/03/07/yii-consoleapplication-and-gearman-workers-psd-to-jpeg-conversation/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 21:12:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Yii]]></category>
		<category><![CDATA[gearman]]></category>
		<category><![CDATA[workers]]></category>
		<category><![CDATA[yii]]></category>

		<guid isPermaLink="false">http://tpoxa.com/?p=338</guid>
		<description><![CDATA[Hi. I am going to provide small example of how I use gearman with my Yii applications. If someone doesn&#8217;t know what is gearman here is quick explanation from the official website http://gearman.org A Gearman powered application consists of three parts: a client, a worker, and a job server. The client is responsible for creating [...]]]></description>
			<content:encoded><![CDATA[<p>Hi. I am going to provide small example of how I use gearman with my Yii applications.<br />
If someone doesn&#8217;t know what is gearman here is quick explanation from the official website  <a href="http://gearman.org">http://gearman.org</a></p>
<blockquote><p>A Gearman powered application consists of three parts: a client, a worker, and a job server. The client is responsible for creating a job to be run and sending it to a job server. The job server will find a suitable worker that can run the job and forwards the job on. The worker performs the work requested by the client and sends a response to the client through the job server. Gearman provides client and worker APIs that your applications call to talk with the Gearman job server (also known as gearmand) so you don&#8217;t need to deal with networking or mapping of jobs. Internally, the gearman client and worker APIs communicate with the job server using TCP sockets.</p></blockquote>
<p>Our example application converts psd to jpeg. We have to install <strong>gearman job server</strong>, <strong>gearman pecl extension</strong> and <strong>ImageMagick</strong> on the server.<br />
<span id="more-338"></span><br />
We will use standart Yii application skeleton as playground. </p>
<p>First of all we gonna create new folder within our protected folder called &#171;workers&#187;.<br />
As our console application use separate config file. Usually called console.php place into config folder. We have import our newly create folder.</p>
<p>protected/config/console.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"><span class="co1">//....</span>
<span class="st_h">'import'</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
        <span class="st_h">'application.models.*'</span><span class="sy0">,</span>
        <span class="st_h">'application.components.*'</span><span class="sy0">,</span>
        <span class="st_h">'application.workers.*'</span><span class="sy0">,</span>
<span class="br0">&#41;</span><span class="sy0">,</span>
<span class="st_h">'params'</span><span class="sy0">=&gt;</span><span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'exportDir'</span> <span class="sy0">=&gt;</span> <span class="kw3">realpath</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="kw4">DIRECTORY_SEPARATOR</span> <span class="sy0">.</span> <span class="st_h">'..'</span> <span class="sy0">.</span> <span class="kw4">DIRECTORY_SEPARATOR</span> <span class="sy0">.</span> <span class="st_h">'..'</span> <span class="sy0">.</span> <span class="kw4">DIRECTORY_SEPARATOR</span> <span class="sy0">.</span> <span class="st_h">'www'</span> <span class="sy0">.</span> <span class="kw4">DIRECTORY_SEPARATOR</span> <span class="sy0">.</span> <span class="st_h">'export'</span><span class="br0">&#41;</span><span class="sy0">,</span>
    <span class="st_h">'exportUrl'</span> <span class="sy0">=&gt;</span> <span class="st_h">'/export'</span><span class="sy0">,</span>
<span class="br0">&#41;</span><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="co1">//.......</span></pre></div></div></div></div></div></div></div>


<p>From now all classes from workers directory will be autoloadable.<br />
Also we defined two variables <strong>exportDir </strong> and <strong>exportUrl</strong> which will be accessable globally within our app by calling this Yii::app()->params['exportUrl'] and Yii::app()->params['exportDir'] . Please correct this path to satisfy your needs. All generated PSD previews will be stored there.</p>
<p>Lets create our worker class.<br />
Here is example code of my worker which create jpg preview from the PSD file. It uses ImageMagick.</p>
<p>/protected/workers/Psd2JpegWorker.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">class</span> Psd2JpegWorker <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">private</span> <span class="re0">$dir</span><span class="sy0">;</span>
    <span class="kw2">private</span> <span class="re0">$args</span><span class="sy0">;</span>
&nbsp;
    <span class="kw2">public</span> <span class="kw2">function</span> psd2jpg<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">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>
        <span class="kw1">echo</span> <span class="st0">&quot;Received job psd2jpg: &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>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">args</span> <span class="sy0">=</span> CJSON<span class="sy0">::</span><span class="me2">decode</span><span class="br0">&#40;</span><span class="re0">$workload</span><span class="sy0">,</span> <span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="re0">$rnd</span> <span class="sy0">=</span> <span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">args</span><span class="sy0">-&gt;</span><span class="me1">rnd</span><span class="br0">&#41;</span> ? <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">args</span><span class="sy0">-&gt;</span><span class="me1">rnd</span> <span class="sy0">:</span> <span class="st_h">''</span><span class="sy0">;</span>
        <span class="re0">$psd</span> <span class="sy0">=</span> <span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">args</span><span class="sy0">-&gt;</span><span class="me1">psd</span><span class="br0">&#41;</span> ? <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">args</span><span class="sy0">-&gt;</span><span class="me1">psd</span> <span class="sy0">:</span> <span class="st_h">''</span><span class="sy0">;</span>
&nbsp;
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="kw3">dir</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">params</span><span class="br0">&#91;</span><span class="st_h">'exportDir'</span><span class="br0">&#93;</span> <span class="sy0">.</span> <span class="kw4">DIRECTORY_SEPARATOR</span> <span class="sy0">.</span> <span class="re0">$rnd</span><span class="sy0">;</span>
        <span class="kw1">echo</span> <span class="st0">&quot;trying to create directory &quot;</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="kw3">dir</span> <span class="sy0">.</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
&nbsp;
&nbsp;
        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">is_dir</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="kw3">dir</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">mkdir</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="kw3">dir</span><span class="sy0">,</span> <span class="nu8">0777</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">chmod</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="kw3">dir</span><span class="sy0">,</span> <span class="nu8">0777</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
            <span class="kw1">echo</span> <span class="st0">&quot;Directory created<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
            <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">convert</span><span class="br0">&#40;</span><span class="re0">$psd</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="kw3">dir</span> <span class="sy0">.</span> <span class="kw4">DIRECTORY_SEPARATOR</span> <span class="sy0">.</span> <span class="st_h">'preview.jpg'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
&nbsp;
&nbsp;
    <span class="kw2">private</span> <span class="kw2">function</span> convert<span class="br0">&#40;</span><span class="re0">$src</span><span class="sy0">,</span> <span class="re0">$target</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
        <span class="re0">$width</span> <span class="sy0">=</span> <span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">args</span><span class="sy0">-&gt;</span><span class="me1">width</span><span class="br0">&#41;</span> ? <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">args</span><span class="sy0">-&gt;</span><span class="me1">width</span> <span class="sy0">:</span> <span class="nu0">400</span><span class="sy0">;</span>
        <span class="re0">$height</span> <span class="sy0">=</span> <span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">args</span><span class="sy0">-&gt;</span><span class="me1">height</span><span class="br0">&#41;</span> ? <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">args</span><span class="sy0">-&gt;</span><span class="me1">height</span> <span class="sy0">:</span> <span class="nu0">300</span><span class="sy0">;</span>
&nbsp;
        <span class="kw1">echo</span> <span class="st0">&quot;Converting<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
        <span class="re0">$cmd</span> <span class="sy0">=</span> <span class="st0">&quot;convert &quot;</span> <span class="sy0">.</span> <span class="re0">$src</span> <span class="sy0">.</span> <span class="st0">&quot;[0] -thumbnail &quot;</span><span class="sy0">.</span><span class="re0">$width</span><span class="sy0">.</span><span class="st0">&quot;x&quot;</span><span class="sy0">.</span><span class="re0">$height</span><span class="sy0">.</span><span class="st0">&quot; &quot;</span> <span class="sy0">.</span> <span class="re0">$target</span> <span class="sy0">.</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
        <span class="kw1">echo</span> <span class="re0">$cmd</span><span class="sy0">;</span>
        <span class="kw3">exec</span><span class="br0">&#40;</span><span class="re0">$cmd</span><span class="br0">&#41;</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>Method psd2jpg receive GearmanJob object, Then we get required parameters as the psd location on the server and random folder name.<br />
We create new directory. All output will be placed there.<br />
After all preparings are done we call &#171;convert&#187; command (ImageMagick) with list of arguments.<br />
Everything is quite simple.</p>
<p>Let&#8217;s create Console command which will register this worker on the job server and run worker.</p>
<p>/protected/commands/ConvertCommand.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"><span class="kw2">&lt;?php</span>
<span class="kw2">class</span> ConvertCommand <span class="kw2">extends</span> CConsoleCommand <span class="br0">&#123;</span>
&nbsp;
    <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> Psd2JpegWorker<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;psd2jpg&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;psd2jpg&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&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>
            <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>
    <span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Here we registered new worker and it supports one function called &#171;psd2jpg&#187;.</p>
<p>For running console command we also have to create entire script which will instatiate new ConsoleApplication</p>
<p>/protected/dispatch.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"><span class="kw2">&lt;?php</span>
&nbsp;
<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">'/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>
 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>This code very similiar to standart Yii&#8217;s index.php but it runs ConsoleApplication instead of WebApplication</p>
<p>Now lets run our new worker.<br />
open console, change directory to the protected folder and run 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="bash"><pre class="de1">php dispatch.php</pre></div></div></div></div></div></div></div>


<p>Yii lookups commands directory and you may see something 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="bash"><pre class="de1">php dispatch.php
Yii <span class="kw3">command</span> runner <span class="br0">&#40;</span>based on Yii v1.1.10<span class="br0">&#41;</span>
Usage: dispatch.php <span class="sy0">&lt;</span>command-name<span class="sy0">&gt;</span> <span class="br0">&#91;</span>parameters...<span class="br0">&#93;</span>
&nbsp;
The following commands are available:
 - convert</pre></div></div></div></div></div></div></div>


<p>You have one command available &#8212; everything is ok. Run it!</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="bash"><pre class="de1">php dispatch convert</pre></div></div></div></div></div></div></div>




<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="bash"><pre class="de1">php dispatch.php convert
Waiting <span class="kw1">for</span> job...</pre></div></div></div></div></div></div></div>


<p>Our worker has been started and wait for job.<br />
Let&#8217;s give him some job.<br />
For doing this we have to use GearmanClient.</p>
<p>/protected/controllers/SiteController.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">public</span> <span class="kw2">function</span> actionIndex<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp;
      <span class="re0">$psd</span> <span class="sy0">=</span> <span class="st0">&quot;/var/www/website/www/psds/some.psd&quot;</span><span class="sy0">;</span>
      <span class="re0">$rnd</span> <span class="sy0">=</span> <span class="kw3">md5</span><span class="br0">&#40;</span><span class="re0">$psd</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <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>
      <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="re0">$params</span> <span class="sy0">=</span> CJSON<span class="sy0">::</span><span class="me2">encode</span><span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'psd'</span> <span class="sy0">=&gt;</span> <span class="re0">$psd</span><span class="sy0">,</span> <span class="st_h">'width'</span> <span class="sy0">=&gt;</span> <span class="nu0">400</span><span class="sy0">,</span> <span class="st_h">'height'</span> <span class="sy0">=&gt;</span> <span class="nu0">300</span><span class="sy0">,</span> <span class="st_h">'rnd'</span> <span class="sy0">=&gt;</span> <span class="re0">$rnd</span><span class="br0">&#41;</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="kw1">do</span><span class="br0">&#40;</span><span class="st0">&quot;psd2jpg&quot;</span><span class="sy0">,</span> <span class="re0">$params</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="re0">$targetUrl</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">params</span><span class="br0">&#91;</span><span class="st_h">'exportUrl'</span><span class="br0">&#93;</span> <span class="sy0">.</span> <span class="kw4">DIRECTORY_SEPARATOR</span> <span class="sy0">.</span> <span class="re0">$rnd</span> <span class="sy0">.</span> <span class="kw4">DIRECTORY_SEPARATOR</span> <span class="sy0">.</span> <span class="st_h">'preview.jpg'</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><span class="re0">$targetUrl</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
   <span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>After psd will be converted prowser will be redirected to resulted file.<br />
Run this action by typing %websitename&#038;/index.php?r=site/index<br />
Ensure that each requrest to this action initiate worker.<br />
Play with number of instances of workers runned (&#171;php dispatch convert &#038;&#187;, &#171;php dispatch convert &#038;&#187;, &#171;php dispatch convert &#038;&#187;)<br />
Try to change</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="re0">$client</span><span class="sy0">-&gt;</span><span class="kw1">do</span><span class="br0">&#40;</span><span class="st0">&quot;psd2jpg&quot;</span><span class="sy0">,</span> <span class="re0">$params</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>to</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="re0">$client</span><span class="sy0">-&gt;</span><span class="me1">doBackground</span><span class="br0">&#40;</span><span class="st0">&quot;psd2jpg&quot;</span><span class="sy0">,</span> <span class="re0">$params</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Hope this article will help someone. Have fun!<br />
PS. I found <a href="http://www.yiiframework.com/extension/gearman/">this extension</a> which make work with gearman even easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://tpoxa.com/2012/03/07/yii-consoleapplication-and-gearman-workers-psd-to-jpeg-conversation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>8</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>12</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>
	</channel>
</rss>

