<?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>The Rpsl Blog &#187; php</title>
	<atom:link href="http://blog.rpsl.info/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rpsl.info</link>
	<description></description>
	<lastBuildDate>Sun, 20 May 2012 12:09:21 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Failed to validate oauth signature and token</title>
		<link>http://blog.rpsl.info/2012/02/failed-to-validate-oauth-signature-and-token/</link>
		<comments>http://blog.rpsl.info/2012/02/failed-to-validate-oauth-signature-and-token/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 18:05:32 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Полезное]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=31728</guid>
		<description><![CDATA[На досуге, решил навоять один сервис, который тесно интегрирован с социальными сетями, в частности с твиттером. Во время работы, натолкнулся на интересную ошибку, в &#171;некоторый момент&#187;, апи твиттера вылетает и начинает на любые запросы отдавать 401 ошибку. Не авторизован ты и все. Ну, а я чё? Я парень простой и решил идти по дебаг трейсу и разбираться в чем ошибка. Предварительно я конечно погуглил эту проблему и даже почитал автора либы которую я использую для связи с твиттером, но решений там не нашел. Тихо и не спеша, я просрал на это дело около трех вечеров, по 1-2 часа вечером выделяю [...]]]></description>
			<content:encoded><![CDATA[<p>На досуге, решил навоять один сервис, который тесно интегрирован с социальными сетями, в частности с твиттером. Во время работы, натолкнулся на интересную ошибку, в &#171;некоторый момент&#187;, апи твиттера вылетает и начинает на любые запросы отдавать 401 ошибку. Не авторизован ты и все.</p>
<p>Ну, а я чё? Я парень простой и решил идти по дебаг трейсу и разбираться в чем ошибка. Предварительно я конечно погуглил эту проблему и даже почитал автора либы которую я использую для связи с твиттером, но решений там не нашел.
<p>Тихо и не спеша, я просрал на это дело около трех вечеров, по 1-2 часа вечером выделяю на проекты. Что самое странное, апи то работало, то не работало и уловить динамику появления ошибки у меня не получалось.</p>
<p>А решение, как обычно было рядом, проблема была в том, что я захлопывал крушку ноутбука :D Точнее так, сервисы я стараюсь сразу делать в родной среде, тобишь на линуксе, для этих делов, у меня есть virtualbox, в котором живут виртуалки с линуксом. Пока я работаю над одним сервисом, выключать виртуалки не приходится. Я их просто перетащил на другой рабочий стол и сижу себе спокойно по ssh, делаю tail -f на лог ошибок. Собственно, паттерн работы с ноутбуком, подразумевает что выключать его приходится редко, а засыпать часто. Ну и вот, после просыпания, в виртуалках время не синхронизировалось, а оставалось тем, в какой момент ноутбук засыпал. Из-за этого, при подписывание запросов, они подписывались не правильно и апи твиттера посылал меня на болт считая жуликом.<br />
]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2012/02/failed-to-validate-oauth-signature-and-token/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP &#8212; fastcgi_finish_request</title>
		<link>http://blog.rpsl.info/2011/09/php-fastcgi_finish_request/</link>
		<comments>http://blog.rpsl.info/2011/09/php-fastcgi_finish_request/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 07:49:56 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Полезное]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=31695</guid>
		<description><![CDATA[А вы знаете про эту замечательную функцию? Если кратко, то используя ее можно заставить приложение отдавать контент пользователю гораздо быстрее, разделяя логику приложения на &#171;это необходимо пользователю&#187; и &#171;это пользователю не очень важно&#187;. Когда php работает в fastcgi режиме, например в популярной связке nginx+php-fcgi, у вас появляется возможность сначала посчитать все данные которые необходимы что бы отдать пользователю страницу, а уже потом, когда страница отдана и nginx отдает ее клиенту, можно выполнить все остальные действия, например отправить письма или обновить кэш или запустить некие механизмы очистки. Нужно отдельно упомянуть, что для правильной работы, fastcgi_finish_request должен запускать после session_write_close и ob_* [...]]]></description>
			<content:encoded><![CDATA[<p>А вы знаете про эту замечательную функцию?</p>
<p>Если кратко, то используя ее можно заставить приложение отдавать контент пользователю гораздо быстрее, разделяя логику приложения на &#171;это необходимо пользователю&#187; и &#171;это пользователю не очень важно&#187;. Когда php работает в fastcgi режиме, например в популярной связке nginx+php-fcgi, у вас появляется возможность сначала посчитать все данные которые необходимы что бы отдать пользователю страницу, а уже потом, когда страница отдана и nginx отдает ее клиенту, можно выполнить все остальные действия, например отправить письма или обновить кэш или запустить некие механизмы очистки.</p>
<p>Нужно отдельно упомянуть, что для правильной работы, fastcgi_finish_request должен запускать после session_write_close и ob_* функций.</p>
<p>Простой пример:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Hello word'</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// В данной реализации, данные отдадутся в клиенту сразу,</span>
    <span style="color: #666666; font-style: italic;">// а если закомментировать вызов fastcgi_finish_request(),</span>
    <span style="color: #666666; font-style: italic;">// клиент будет ждать 10 секунд, до того, как получит ответ.</span>
    fastcgi_finish_request<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #990000;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2011/09/php-fastcgi_finish_request/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9 million hits/day with 120 megs RAM</title>
		<link>http://blog.rpsl.info/2011/09/9-million-hits-day-with-120-megs-ram/</link>
		<comments>http://blog.rpsl.info/2011/09/9-million-hits-day-with-120-megs-ram/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 18:55:37 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Полезное]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=31680</guid>
		<description><![CDATA[Оставлю у себя в закладках. After checking this for about 9 months, I can tell you this almost always reads that number: 300 microseconds. This is about one third the time a camera flash illuminates. That’s, well, pretty quick. When I started, my software was taking about 0.25 seconds (250 000 microseconds) to produce the front page of my website. I needed to improve performance by over 800x. Далее]]></description>
			<content:encoded><![CDATA[<p>Оставлю у себя в закладках.</p>
<blockquote><p>After checking this for about 9 months, I can tell you this almost always reads that number: 300 microseconds. This is about one third the time a camera flash illuminates. That’s, well, pretty quick. When I started, my software was taking about 0.25 seconds (250 000 microseconds) to produce the front page of my website. I needed to improve performance by over 800x.</p></blockquote>
<p><a href="http://tumbledry.org/2011/08/31/9_million_hits_day_with_120">Далее</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2011/09/9-million-hits-day-with-120-megs-ram/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Node Saver</title>
		<link>http://blog.rpsl.info/2011/08/node-saver/</link>
		<comments>http://blog.rpsl.info/2011/08/node-saver/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 00:00:45 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Полезное]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=31622</guid>
		<description><![CDATA[Примерно в марте месяце, пока мне было скучно и хотелось поиграться с MongoDB, я решил сделать свой аналог замечательного сайта peeep.us. Дело в том, что peeep.us хоть и жутко удобный, но не совсем безопастный, добавленные туда страницы потом хрен удалишь и самое ужасное, он открыт к индексации. Кстати все кто хочет почитать лепру но не имеют туда доступа могут &#8230;, ну короче намек поняли, все как с мегафоном. Первую версию, которая на момент публикации поста, живет на save.rpsl.info я написал часа за четыре, из них примерно два часа я искал у кого своровать дизайн :D После этого, я решил что [...]]]></description>
			<content:encoded><![CDATA[<p>Примерно в марте месяце, пока мне было скучно и хотелось поиграться с MongoDB, я решил сделать свой аналог замечательного сайта <a href="http://www.peeep.us/" target="_blank">peeep.us</a>. Дело в том, что peeep.us хоть и жутко удобный, но не совсем безопастный, добавленные туда страницы потом хрен удалишь и самое ужасное, он открыт к индексации. Кстати все кто хочет почитать лепру но не имеют туда доступа могут &#8230;, ну короче намек поняли, все как с мегафоном.</p>
<p><a href="http://blog.rpsl.info/wp-content/uploads/2011/08/Snimok-e-krana-2011-08-29-v-23.29.27.png"><img src="http://blog.rpsl.info/wp-content/uploads/2011/08/Snimok-e-krana-2011-08-29-v-23.29.27-300x279.png" alt="" title="Saver by Rpsl" width="300" height="279" class="alignleft size-medium wp-image-31623 colorbox-31622" /></a></p>
<p>Первую версию, которая на момент публикации поста, живет на <a href="http://save.rpsl.info" target="_blank">save.rpsl.info</a> я написал часа за четыре, из них примерно два часа я искал у кого своровать дизайн :D</p>
<p>После этого, я решил что связка php и mongodb для такой микрозадачи не нужна и решил переписать ее на node.js. За несколько вечеров я разобрался и сделал и то, что хотел. В конечном варианте полностью отказалася от MongoDB и заменил его на Memcached. Зачем мне тут монго? Данные я кладу на несколько дней, данных мало, заодно и решится вопрос с их очисткой, а то, что не надежно, ну и фиг с ним. Ничего ценного там хранить смысла нету, а статистика ребута memcached&#8217;a на серваке говорит о том, что если раз в полгода я и потеряю данные, то ничего страшного не произойдет.</p>
<p>И все бы было хорошо, но я не решил главную проблему &#8212; сохранение работает только для открытых источников, как передавать страницу с сайта, которая закрыта basic auth я не придумал. У меня есть конечно несколько идей, но проверять их мне слишком лениво. Вторая проблема в том, что мне не хочется из-за этой мелочи поднимать на боевом серваке Node.JS, в какой-то момент пробовал взять виртуалку у clodo.ru, заодно потестировать его, но тесты оказались плачевными, потом хотел у alice2k стрельнуть кусочек vds, но уехал в Испанию и снова забил на это.</p>
<p>В итоге с марта месяца, у меня на рабочем столе лежит папка node, которую я все время хочу удалить и в последний момент вспоминаю, что этого делать не стоит. Несколько раз приходилось доставать из бэкапа.</p>
<p>Сегодня мне захотелось ее удалить, поэтому я решил выложить сорцы на github</p>
<p>В общем форкайте меня, все дела. <a href="https://github.com/Rpsl/node-saver">https://github.com/Rpsl/node-saver</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2011/08/node-saver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Проверка multi_query в mysqli</title>
		<link>http://blog.rpsl.info/2011/08/proverka-multi_query-v-mysqli/</link>
		<comments>http://blog.rpsl.info/2011/08/proverka-multi_query-v-mysqli/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 08:06:22 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Полезное]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=31618</guid>
		<description><![CDATA[Увидел сегодня красивое решение проверки выполнения мультизапроса в mysqli. Если кто не в курсе, то можно сформировать в одну строку кучу запросов, разделяемых точкой с запятой, а потом отдать это на выполнение. Так вот проверять ошибки можно разными способами, а можно просто в конец добавить некий абстрактный SELECT &#8216;complete&#8217;. Это подходит для запросов типа INSERT, DELETE, UPDATE. Eще, у меня в примере указан не прямой вызов multi_query, а обертка для запросов, думаю что это и зачем вам объяснять не нужно. if &#40; $DB&#40;&#41;-&#62;multi&#40;&#34; UPDATE someshit SET bla=bla-1 WHERE id='%d'; DELETE FROM someshit WHERE category='%d'; DELETE FROM someshit WHERE id='%d'; SELECT [...]]]></description>
			<content:encoded><![CDATA[<p>Увидел сегодня красивое решение проверки выполнения <a href="http://php.net/manual/en/mysqli.multi-query.php" target="_blank">мультизапроса в mysqli</a>.</p>
<p>Если кто не в курсе, то можно сформировать в одну строку кучу запросов, разделяемых точкой с запятой, а потом отдать это на выполнение. Так вот проверять ошибки можно разными способами, а можно просто в конец добавить некий абстрактный SELECT &#8216;complete&#8217;. Это подходит для запросов типа INSERT, DELETE, UPDATE.</p>
<p>Eще, у меня в примере указан не прямой вызов multi_query, а обертка для запросов, думаю что это и зачем вам объяснять не нужно.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$DB</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">multi</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;
    UPDATE someshit SET bla=bla-1 WHERE id='<span style="color: #009933; font-weight: bold;">%d</span>';
    DELETE FROM someshit WHERE category='<span style="color: #009933; font-weight: bold;">%d</span>';
    DELETE FROM someshit WHERE id='<span style="color: #009933; font-weight: bold;">%d</span>';
    SELECT 'complete';&quot;</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$category</span><span style="color: #339933;">,</span> <span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">&quot;complete&quot;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$resultCode</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">DB_ERROR</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$resultCode</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">SUCCESS</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2011/08/proverka-multi_query-v-mysqli/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>PHP &#8212; Переворот числа</title>
		<link>http://blog.rpsl.info/2011/08/php-perevorot-chisla/</link>
		<comments>http://blog.rpsl.info/2011/08/php-perevorot-chisla/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 18:14:11 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Полезное]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[работа]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=28183</guid>
		<description><![CDATA[Видать dotZero почувствовал, что я уже устал переворачивать строки, поэтому подкинул сегодня задачу, которую я до этого не решал. Днем разбираться с ней было некогда, а вечером, решил все-таки уделить ей внимание и разобраться как это работает. Задача простая. Перевернуть любое целое число используя только математические операторы. Было 5432, должно стать 2345. &#60;?php &#160; function reverseInt&#40; $a &#41; &#123; $tmp = $a; $return = 0; &#160; while&#40; $tmp &#62; 0 &#41; &#123; /* &#160; Играть с числами очень весело, можно находить и открывать для себя их волшебные свойства. Так, например, если 432 разделить на 10, то мы получим 43.2 &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Видать <a href="http://dotzero.ru/" target="_blank">dotZero</a> почувствовал, что я уже устал переворачивать строки, поэтому подкинул сегодня задачу, которую я до этого не решал. Днем разбираться с ней было некогда, а вечером, решил все-таки уделить ей внимание и разобраться как это работает.</p>
<p>Задача простая. Перевернуть любое целое число используя только математические операторы. Было 5432, должно стать 2345.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> reverseInt<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$tmp</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$return</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$tmp</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">/* 
&nbsp;
            Играть с числами очень весело, можно находить и открывать для себя
            их волшебные свойства. Так, например, если 432 разделить на 10, 
            то мы получим 43.2
&nbsp;
            Выделяя остаток от деления, нам очень легко решить нашу 
            задачу по перестановке числа.
&nbsp;
            Таким образом, проходим по каждому разряду числа, 
            умножая его после каждой итерации на 10
            и прибавляя к результату остаток от деления,
            получаем нужное нам число.
&nbsp;
            */</span>
&nbsp;
            <span style="color: #000088;">$return</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$return</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">10</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$tmp</span> <span style="color: #339933;">%</span> <span style="color: #cc66cc;">10</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">/*
            Каждый раз делим исходное число на 10, что-бы обойти каждый его разряд.
            */</span>
&nbsp;
            <span style="color: #000088;">$tmp</span> <span style="color: #339933;">=</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$tmp</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">10</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$return</span> <span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000088;">$foo</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">123456789</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Start: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$foo</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$bar</span> <span style="color: #339933;">=</span> reverseInt<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$foo</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'End: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$bar</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Как видно, все достаточно просто, нужно просто понять как это работает. Теперь хочу найти все варианты с решением этой задачи, думаю что если сделать это с помощью битовых операций получится еще быстрее и красивее.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2011/08/php-perevorot-chisla/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Request uri в nginx</title>
		<link>http://blog.rpsl.info/2011/08/request-uri-v-nginx/</link>
		<comments>http://blog.rpsl.info/2011/08/request-uri-v-nginx/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 12:28:27 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Заметки]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=28077</guid>
		<description><![CDATA[Второй раз натыкаюсь. В первый раз я не мог понять почему на php скрипт приходил GET запрос, хотя я отправлял POST и при этом массив был пустой, но при просмотре php://input нужные мне переменные были видны. Тут ситуация была простой, но не очевидной, при запросе, я не попадал в нужный location и nginx успешно отправлял меня на @404, в следствие чего, php получал уже GET запрос. Сейчас, эта фича, помогает работать с ssi включениями, т.к. при сборе &#187;блоков&#187; страницы у нас есть возможность получить оригинальный URL и добраться до нужных нам GET параметров. Из доков nginx: $request_uri, эта переменная равна полному первоначальному [...]]]></description>
			<content:encoded><![CDATA[<p>Второй раз натыкаюсь.</p>
<p>В первый раз я не мог понять почему на php скрипт приходил GET запрос, хотя я отправлял POST и при этом массив был пустой, но при просмотре php://input нужные мне переменные были видны.</p>
<blockquote><p>Тут ситуация была простой, но не очевидной, при запросе, я не попадал в нужный location и nginx успешно отправлял меня на @404, в следствие чего, php получал уже GET запрос.</p></blockquote>
<p>Сейчас, эта фича, помогает работать с ssi включениями, т.к. при сборе &#187;блоков&#187; страницы у нас есть возможность получить оригинальный URL и добраться до нужных нам GET параметров.</p>
<p>Из доков nginx:</p>
<blockquote><p>$request_uri, эта переменная равна полному первоначальному URI вместе с<br />
аргументами;</p></blockquote>
<p>Пример, вывод $_SERVER из подключенного ssi блока:</p>
<blockquote><p>[QUERY_STRING] =&gt; do=search&amp;action=search<br/><br />
[REQUEST_URI] =&gt; /?q=творог&amp;lr=213</p></blockquote>
<p>Что бы получить нужный нам фэйковый $_GET, можно сделать что-нибудь типо этого:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">parse_str</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/?'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #990000;">getenv</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'REQUEST_URI'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$original_get</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2011/08/request-uri-v-nginx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Хитрожопые инкорпорейтед</title>
		<link>http://blog.rpsl.info/2011/08/khitrozhopye-inkorporejjted/</link>
		<comments>http://blog.rpsl.info/2011/08/khitrozhopye-inkorporejjted/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 10:23:16 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Заметки]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[работа]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=28034</guid>
		<description><![CDATA[Наткнулся сегодня на еще одно решение задачи, про переворот строки. Вспомнил этот комикс. &#60;?php &#160; $a = 'abcdefgh'; // Напишите здесь недостающий код, // чтобы результатом работы скрипта // была строка $a, повернутая наоборот echo $a; ?&#62; &#60;?php &#160; $a = 'abcdefgh'; $a='hgfedcba'; echo $a; &#160; ?&#62;]]></description>
			<content:encoded><![CDATA[<p>Наткнулся сегодня на еще одно решение задачи, про переворот строки. Вспомнил этот комикс.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
&nbsp;
<span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'abcdefgh'</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">// Напишите здесь недостающий код, </span>
<span style="color: #666666; font-style: italic;">// чтобы результатом работы скрипта </span>
<span style="color: #666666; font-style: italic;">// была строка $a, повернутая наоборот </span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
&nbsp;
<span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'abcdefgh'</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$a</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'hgfedcba'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p style="text-align: center;"><a><img class="colorbox-28034"  src='http://blog.rpsl.info/wp-content/uploads/2011/08/6d646c58b05853ba4b92d3338ffecf26.png' alt='' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2011/08/khitrozhopye-inkorporejjted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Про блоги</title>
		<link>http://blog.rpsl.info/2011/08/pro-blogi/</link>
		<comments>http://blog.rpsl.info/2011/08/pro-blogi/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 19:48:17 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Заметки]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[e2]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=27050</guid>
		<description><![CDATA[Давно уже в голове крутится мысль, что современные блог движки, они такие сухие, безидейные, не вдохновляющие. Вот тот-же самый wordpress, есть он, у меня на нем блог работает, при этом я 100500 раз переезжал на другие движки и пробовал вести блог на них, но все равно возвращался обратно. Они не вдохновляют на то, что-бы в них писать. Тем на которые можно и хочется написать много, а желания нету. Это не потому что я такой ленивый, а потому что написать новый пост превращается в тягомотину. Когда-то давно, когда у меня не было стандалон блога, я тусил в жж. В 2004 году [...]]]></description>
			<content:encoded><![CDATA[<p>Давно уже в голове крутится мысль, что современные блог движки, они такие сухие, безидейные, не вдохновляющие. Вот тот-же самый wordpress, есть он, у меня на нем блог работает, при этом я 100500 раз переезжал на другие движки и пробовал вести блог на них, но все равно возвращался обратно. Они не вдохновляют на то, что-бы в них писать. Тем на которые можно и хочется написать много, а желания нету. Это не потому что я такой ленивый, а потому что написать новый пост превращается в тягомотину.</p>
<p>Когда-то давно, когда у меня не было стандалон блога, я тусил в жж. В 2004 году в жж было интересно, а сейчас он стал убогим, политизированным уг.
</p>
<p>Идея написать свой блог движег не покидает меня уже миллион лет, но это такая морока, что мне не хочется этим заниматься. Читая интернеты, обнаружил что Бирман выложил очередной релиз своего блог <a href="http://blogengine.ru">движка</a>. Снаружи очень красивая, внутри какой-то дикий пиздец творится. Я всегда был уверен, что дизайнеры не должны заниматься программированием, а программисты дизайном ( именно поэтому, в моем блоге, такой убогий диз ). Но учитывая, что Эгея носит еще статус беты, я не буду выражать свое &#171;фи&#187;, ведь если не заглядывать под капот, то это действительно очень красивый и лаконичный продукт.
</p>
<p>Вот честно, я заинсталил его себе и даже тешил себя мыслями, что смогу перенести свой блог туда, мол буду писать там, но две вещи меня держат:</p>
<blockquote><p>
1. Все ссылки на страницы моего блога поломаются, но это не проблема, это решаемо.<br />
2. Оформление постов в данном движке происходит с помощью wiki разметки и соответсвенно все посты едут, полез в гугл поискать механизм который умеет конвертировать html в wiki формат, но адекватных механизмов не нашел.
</p></blockquote>
<p>На этом и забил.</p>
<p>Но все же мысль избавить от WordPress&#8217;a не дает мне покоя. Он меня жутко достал. Он медленный. Он уродует контент. #hate, #hate.</p>
<p>Мне тут подсказывали еще попробовать LiveStreet в качестве личного блога. Но спасибо, я на LiveStreet сейчас веду один проект, в основном <a href="http://ihiphop.ru">клипы хип-хоп тематики</a> и затрахался с ним до глубины души. Я не знаю что в головах у авторов, но внутреннее устройство движка это такой лютый бред. Навернуть такое кол-во ООП на единицу кода и при этом суметь использовать все анти-паттерны визуального оформления кода, это надо быть действительно смелым и уверенным в себе человеком.</p>
<p>
Вот опять я всех обругал, а ведь не хотел. ((</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2011/08/pro-blogi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP Перевернуть строку без буфера.</title>
		<link>http://blog.rpsl.info/2011/03/php-perevernut-stroku-bez-bufera/</link>
		<comments>http://blog.rpsl.info/2011/03/php-perevernut-stroku-bez-bufera/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 12:45:17 +0000</pubDate>
		<dc:creator>Rpsl</dc:creator>
				<category><![CDATA[Заметки]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://blog.rpsl.info/?p=25012</guid>
		<description><![CDATA[Еще один способ как перевернуть строку. Не используется дополнительный буфер, просто красивая работа с данными. &#60;? &#160; $str = &#40;string&#41; '123456789'; &#160; echo $str . &#34;\n&#34;; &#160; $count = strlen&#40; $str &#41; - 1 ; &#160; for&#40; $i=0; $i&#60;=$count; $i++ &#41; &#123; $str&#91; $count + $i + 1 &#93; = $str&#91; $count - $i &#93;; $str&#91; $count - $i &#93; = ''; &#125; &#160; echo $str . &#34;\n&#34;; Результатом выполнения будет 123456789 987654321 Все просто.]]></description>
			<content:encoded><![CDATA[<p>Еще один способ как перевернуть строку. Не используется дополнительный буфер, просто красивая работа с данными.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?</span>
&nbsp;
    <span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">'123456789'</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$str</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$count</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$str</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span>  <span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">&lt;=</span><span style="color: #000088;">$count</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$str</span><span style="color: #009900;">&#91;</span> <span style="color: #000088;">$count</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$str</span><span style="color: #009900;">&#91;</span> <span style="color: #000088;">$count</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$i</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$str</span><span style="color: #009900;">&#91;</span> <span style="color: #000088;">$count</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$i</span> <span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$str</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Результатом выполнения будет</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #cc66cc;">123456789</span>
<span style="color: #cc66cc;">987654321</span></pre></div></div>

<p>Все просто.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rpsl.info/2011/03/php-perevernut-stroku-bez-bufera/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

