<?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>Pais porrada de Bethrezen &#187; Code</title> <atom:link href="http://blog.bethrezen.ru/category/code/feed" rel="self" type="application/rss+xml" /><link>http://blog.bethrezen.ru</link> <description>Блог веб-программиста</description> <lastBuildDate>Sat, 27 Aug 2011 08:51:33 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.2.1</generator> <item><title>Бесконечная очередь и отказ от сообщений в RabbitMQ + Thumper + PHP AMPQlib</title><link>http://blog.bethrezen.ru/2011/08/beskonechnaya-ochered-i-otkaz-ot-soobshhenijj-v-rabbitmq-thumper-php-ampqlib.html</link> <comments>http://blog.bethrezen.ru/2011/08/beskonechnaya-ochered-i-otkaz-ot-soobshhenijj-v-rabbitmq-thumper-php-ampqlib.html#comments</comments> <pubDate>Sat, 27 Aug 2011 08:50:45 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[php]]></category> <category><![CDATA[phpampqlib]]></category> <category><![CDATA[rabbitmq]]></category> <category><![CDATA[thumper]]></category><guid
isPermaLink="false">http://blog.bethrezen.ru/?p=299</guid> <description><![CDATA[По работе столкнулся с одной задачей и решил использовать сервер очереди сообщений RabbitMQ в связке с PHP 5.3 через PHP-ampqlib и библиотеку Thumper. Чтобы сделать Consumer(worker), который будет обрабатывать бесконечную очередь надо задать $consumer-&#62;consume(-1);. Тогда в цикле Thumper, где проверяется нужно ли нам выходить всё будет хорошо и наш обработчик будет работать вечно. Но появился ещё [...]]]></description> <content:encoded><![CDATA[<p>По работе столкнулся с одной задачей и решил использовать сервер очереди сообщений <a
href="http://www.rabbitmq.com/" rel="nofollow" target="_blank">RabbitMQ</a> в связке с PHP 5.3 через <a
href="https://github.com/tnc/php-amqplib" rel="nofollow" target="_blank">PHP-ampqlib</a> и библиотеку <a
href="https://github.com/videlalvaro/Thumper" rel="nofollow" target="_blank">Thumper</a>.</p><p>Чтобы сделать Consumer(worker), который будет обрабатывать бесконечную очередь надо задать $consumer-&gt;consume(-1);. Тогда в цикле Thumper, где проверяется нужно ли нам выходить всё будет хорошо и наш обработчик будет работать вечно.</p><p>Но появился ещё один интересный вопрос &#8211; что делать, если внутри функции обработки сообщения произошел Exception? Я решил, что тогда мы отказываемся от этого сообщение и оно идет к другому обработчику. Реализовывать это лучше расширением класса Consumer:</p><pre ">class MyConsumer extends Consumer {
	public function processMessage($msg) {
		try {
			parent::processMessage($msg);
		} catch (Exception $e) {
			echo "Message rejected due to exception.\n".$e-&gt;getMessage()."\n";
			$msg-&gt;delivery_info['channel']-&gt;basic_reject($msg-&gt;delivery_info['delivery_tag'],true);
			//throw $e;
		}
	}
}</pre><p>Соответственно ваш Consumer должен быть объектом класса MyConsumer.<br
/> Если же всё таки нужно кинуть этот Exception выше &#8211; убираем комментарий со строки throw $e;</p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2011/08/beskonechnaya-ochered-i-otkaz-ot-soobshhenijj-v-rabbitmq-thumper-php-ampqlib.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Запаковываем проект в один JAR для запуска на Hadoop</title><link>http://blog.bethrezen.ru/2010/06/packing-java-project-into-one-jar-for-hadoop.html</link> <comments>http://blog.bethrezen.ru/2010/06/packing-java-project-into-one-jar-for-hadoop.html#comments</comments> <pubDate>Sat, 05 Jun 2010 08:12:36 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[ant]]></category> <category><![CDATA[hadoop]]></category> <category><![CDATA[jar]]></category> <category><![CDATA[java]]></category> <category><![CDATA[tips]]></category><guid
isPermaLink="false">http://blog.bethrezen.ru/?p=276</guid> <description><![CDATA[Сегодня потребовалось запаковать проект на Java в один JAR файл. Нужно мне это для того, чтобы не мучиться с подключением сторонних jar и их дистрибьюции на кластер Hadoop Map Reduce. Да и к тому же, параметр -libjars из документации у меня почему то не работал. Проект мой компилируется через ant. Поэтому самым простым  решением для [...]]]></description> <content:encoded><![CDATA[<p>Сегодня потребовалось запаковать проект на Java в <strong>один JAR файл</strong>. Нужно мне это для того, чтобы не мучиться с подключением сторонних jar и их дистрибьюции на кластер <strong>Hadoop Map Reduce</strong>. Да и к тому же, параметр -libjars из документации у меня почему то не работал.</p><p><span
id="more-276"></span></p><p>Проект мой компилируется через ant. Поэтому самым простым  решением для этой задачи является модификация build.xml.</p><p>Открываем build.xml и прямо перед закрывающим тегом <code>&lt;/project&gt;</code> пишем:</p><p><code
lang="xml"><br
/> &lt;target name="package-for-store" depends="jar"&gt;<br
/> &lt;property name="store.jar.name" value="<em>YourProjectNameHere</em>"/&gt;</code></p><p><code
lang="xml">&lt;!-- don't edit below this line --&gt;</code></p><p><code
lang="xml">&lt;property name="store.dir" value="store"/&gt;<br
/> &lt;property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/&gt;</code></p><p><code
lang="xml"> </code></p><p><code
lang="xml">&lt;echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/&gt;</code></p><p><code
lang="xml">&lt;delete dir="${store.dir}"/&gt;<br
/> &lt;mkdir dir="${store.dir}"/&gt;</p><p>&lt;jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip"&gt;<br
/> &lt;zipgroupfileset dir="dist" includes="*.jar"/&gt;<br
/> &lt;zipgroupfileset dir="dist/lib" includes="*.jar"/&gt;</p><p>&lt;manifest&gt;<br
/> &lt;attribute name="Main-Class" value="${main.class}"/&gt;<br
/> &lt;/manifest&gt;<br
/> &lt;/jar&gt;</p><p>&lt;zip destfile="${store.jar}"&gt;<br
/> &lt;zipfileset src="${store.dir}/temp_final.jar"<br
/> excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/&gt;<br
/> &lt;/zip&gt;</p><p>&lt;delete file="${store.dir}/temp_final.jar"/&gt;</p><p></code></p><p><code
lang="xml"> &lt;/target&gt;<br
/> </code></p><p>В итоге при компиляции <strong>ant package-for-store</strong> у нас появится пакет YourProjectName.jar в папке store со всеми сторонними библиотеками. Такой способ напомнил мне статичную линковку в C++..</p><p>Всё, теперь мой JAVA проект спокойно запускается в Hadoop кластере. А теперь можно заняться и с<a
href="http://devgroup.ru/services/sozdanie-saitov.html">озданием сайтов</a> <img
src='http://blog.bethrezen.ru/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Запаковываем проект в один JAR для запуска на Hadoop" class='wp-smiley' title="Запаковываем проект в один JAR для запуска на Hadoop" /></p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2010/06/packing-java-project-into-one-jar-for-hadoop.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Создаём расширяемую структуру на Yii Framework</title><link>http://blog.bethrezen.ru/2009/09/yii-framework-addons-structure.html</link> <comments>http://blog.bethrezen.ru/2009/09/yii-framework-addons-structure.html#comments</comments> <pubDate>Wed, 16 Sep 2009 15:36:38 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[caction]]></category> <category><![CDATA[dotplant]]></category> <category><![CDATA[yii]]></category><guid
isPermaLink="false">http://blog.bethrezen.ru/?p=222</guid> <description><![CDATA[Хочу предложить Вашему вниманию концепт расширяемой структуры приложения на Yii Framework. Я уже писал как сделать свои Actions на Yii. Сегодня же речь пойдёт о написании стандартных экшенов для контроллеров и их расширения. Предположим, в приложении у нас все контроллеры наследуются от класса dotPlantFrontMainController. Нам необходимо, чтобы у всех контроллеров было действие Breadcrumb. Для этого, [...]]]></description> <content:encoded><![CDATA[<p>Хочу предложить Вашему вниманию концепт расширяемой структуры приложения на <strong>Yii Framework</strong>. Я уже писал как сделать <a
href="http://blog.bethrezen.ru/2009/05/yii-action.html">свои Actions на Yii</a>.</p><p>Сегодня же речь пойдёт о написании стандартных экшенов для контроллеров и их расширения.</p><p>Предположим, в приложении у нас все контроллеры наследуются от класса dotPlantFrontMainController.</p><p>Нам необходимо, чтобы у всех контроллеров было действие Breadcrumb.</p><p>Для этого, в базовом контроллере dotPlantFrontMainController переопределяем функцию <strong>actions</strong>() следующим образом:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span> actions<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #b1b100;color:#DD2A24;font-weight:bold;">return</span> <span style="color: #990000;color: #8FB394;">array</span><span style="color: #009900;color: #CCC;">&#40;</span>
 <span style="color: #0000ff;">'breadcrumb'</span> <span style="color: #339933;color: #CCC;">=&gt;</span> <span style="color: #0000ff;">'application.extensions.actionBreadcrumb'</span><span style="color: #339933;color: #CCC;">,</span>
 <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>Если в унаследованном контроллере(скажем News) мы используем экшены из других файлов, то нам необходимо также переопределить функцию примерно вот так:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span> actions<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #666666; font-style: italic;color: #CDC;">// return external action classes, e.g.:</span>
 <span style="color: #b1b100;color:#DD2A24;font-weight:bold;">return</span> <span style="color: #990000;color: #8FB394;">array_merge</span><span style="color: #009900;color: #CCC;">&#40;</span>
 parent<span style="color: #339933;color: #CCC;">::</span><span style="color: #004000;">actions</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">,</span>
 <span style="color: #990000;color: #8FB394;">array</span><span style="color: #009900;color: #CCC;">&#40;</span>
 <span style="color: #0000ff;">'admin'</span><span style="color: #339933;color: #CCC;">=&gt;</span><span style="color: #0000ff;">'application.controllers.News.ActionAdmin'</span><span style="color: #339933;color: #CCC;">,</span>
 <span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>Таким образом, в News будут экшены определенные в базовом классе <strong>dotPlantFrontMainController</strong> плюс ActionAdmin.</p><p>Переписать же actionBreadcrumb можно уже в теле самого News.</p><p>В итоге имеем легко расширяемую структуру. В самом же базовом классе массив actions можно автоматически генерировать в соответствии с установленными расширениями. Всё легко и просто <img
src='http://blog.bethrezen.ru/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Создаём расширяемую структуру на Yii Framework" class='wp-smiley' title="Создаём расширяемую структуру на Yii Framework" /></p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2009/09/yii-framework-addons-structure.html/feed</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Декодируем gzip страницу на PHP</title><link>http://blog.bethrezen.ru/2009/09/curl-content-type-gzip-decode-in-php.html</link> <comments>http://blog.bethrezen.ru/2009/09/curl-content-type-gzip-decode-in-php.html#comments</comments> <pubDate>Fri, 04 Sep 2009 06:08:17 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[curl]]></category> <category><![CDATA[gzip]]></category> <category><![CDATA[php]]></category> <category><![CDATA[tips]]></category><guid
isPermaLink="false">http://blog.bethrezen.ru/?p=195</guid> <description><![CDATA[Недавно при разработке одного сайта, столкнулся с проблемой декодирования на PHP полученной через curl страницы, сжатой в gzip. Допустим у нас есть код, который делает запрос через php-CURL с возвращением заголовков: $ch = curl_init&#40;&#41;; curl_setopt&#40;$ch, CURLOPT_URL,$url&#41;; &#160; //curl_setopt ($ch, CURLOPT_VERBOSE, 2); // Отображать детальную информацию о соединении curl_setopt &#40;$ch, CURLOPT_USERAGENT, 'Mozilla/5.0'&#41;; //Прописываем User Agent, чтобы [...]]]></description> <content:encoded><![CDATA[<p>Недавно при разработке одного сайта, столкнулся с проблемой декодирования на PHP полученной через <strong>curl</strong> страницы, сжатой в <strong>gzip</strong>.</p><p>Допустим у нас есть код, который делает запрос через php-CURL с возвращением заголовков:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000088;">$ch</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #990000;color: #8FB394;">curl_init</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #990000;color: #8FB394;">curl_setopt</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_URL<span style="color: #339933;color: #CCC;">,</span><span style="color: #000088;">$url</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;color: #CDC;">//curl_setopt ($ch, CURLOPT_VERBOSE, 2); // Отображать детальную информацию о соединении</span>
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_USERAGENT<span style="color: #339933;color: #CCC;">,</span> <span style="color: #0000ff;">'Mozilla/5.0'</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #666666; font-style: italic;color: #CDC;">//Прописываем User Agent, чтобы приняли за своего</span>
&nbsp;
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>  <span style="color: #666666; font-style: italic;color: #CDC;">// Возвращать результат</span>
&nbsp;
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_HEADER<span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #666666; font-style: italic;color: #CDC;">// Наши заголовочки</span>
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLINFO_HEADER_OUT<span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #666666; font-style: italic;color: #CDC;">// Где то наткнулся на этот параметр, решил оставить</span>
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_CONNECTTIMEOUT<span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">30</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
 <span style="color: #000088;">$result</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #990000;color: #8FB394;">curl_exec</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span></pre></div></div><p>В итоге получаем в $result нашу страницу с заголовками сервера. Проверим, закодированна ли она и дешифруем её, если нужно:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #b1b100;color:#DD2A24;font-weight:bold;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #990000;color: #8FB394;">strstr</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;color: #111;">&quot;Content-Encoding: gzip&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000088;">$result</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #990000;color: #8FB394;">preg_replace</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;color: #111;">&quot;/(.*)Content\-Encoding: gzip\s+/isU&quot;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;color: #111;">&quot;&quot;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #000088;">$result</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000088;">$result</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #990000;color: #8FB394;">gzinflate</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #990000;color: #8FB394;">substr</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">13</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>Вот и всё. Если Вам нужно просто gzip контент расшифровать, то можно в substr заменить 13 на 10. (+3 из-за \n после заголовков).</p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2009/09/curl-content-type-gzip-decode-in-php.html/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Почему disabled input элементы формы не передаются?</title><link>http://blog.bethrezen.ru/2009/06/disabled-input-fields.html</link> <comments>http://blog.bethrezen.ru/2009/06/disabled-input-fields.html#comments</comments> <pubDate>Tue, 30 Jun 2009 09:42:00 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[html]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[jquery]]></category><guid
isPermaLink="false"></guid> <description><![CDATA[Сегодня столкнулся с одной особенностью INPUT элементов с атрибутом disabled. Как оказалось &#8211; они не передаются серверу при сабмите формы. Вышел из положения вот таким изящным способом на jQuery: $&#40;function&#40;&#41;&#123; $&#40;&#34;form&#34;&#41;.submit&#40;function&#40;&#41;&#123; $&#40;&#34;input&#34;&#41;.attr&#40;&#34;disabled&#34;, &#34;&#34;&#41;; $&#40;&#34;select&#34;&#41;.attr&#40;&#34;disabled&#34;, &#34;&#34;&#41;; &#125;&#41;; &#125;&#41;; Таким образом, при действии submit у всех input и select элементов убирается атрибут disabled. Один минус &#8211; не [...]]]></description> <content:encoded><![CDATA[<p>Сегодня столкнулся с одной особенностью INPUT элементов с атрибутом disabled. Как оказалось &#8211; они не передаются серверу при сабмите формы.<br
/> Вышел из положения вот таким изящным способом на jQuery:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;color: #FCFFBA;">$<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #003366; font-weight: bold;color: #577A61;">function</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#123;</span>
 $<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #3366CC;color: #111;">&quot;form&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span>.<span style="color: #660066;">submit</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #003366; font-weight: bold;color: #577A61;">function</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#123;</span>
 $<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #3366CC;color: #111;">&quot;input&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #3366CC;color: #111;">&quot;disabled&quot;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #3366CC;color: #111;">&quot;&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> $<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #3366CC;color: #111;">&quot;select&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #3366CC;color: #111;">&quot;disabled&quot;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #3366CC;color: #111;">&quot;&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span></pre></div></div><p>Таким образом, при действии submit у всех input и select элементов убирается атрибут disabled. Один минус &#8211; не работает при отключенных скриптах. Но в моём случае без JavaScript и jQuery не работает вообще всё приложение, так что это не так страшно.</p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2009/06/disabled-input-fields.html/feed</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>jQuery Serialize &#8211; PHP like serialize function for jQuery</title><link>http://blog.bethrezen.ru/2009/06/jquery-serialize-php-function-for-jquery.html</link> <comments>http://blog.bethrezen.ru/2009/06/jquery-serialize-php-function-for-jquery.html#comments</comments> <pubDate>Thu, 25 Jun 2009 09:04:00 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[jquery]]></category> <category><![CDATA[php]]></category> <category><![CDATA[serialize]]></category><guid
isPermaLink="false"></guid> <description><![CDATA[ENG: I&#8217;ve addapted a JavaScript serialize function by Kevin van Zonneveld to jQuery. Function works like the same named function in PHP. Be free to use it in your projects. It is especially needed when you want to post Object in AJAX (in jQuery &#171;$.ajax()&#187;). RUS: Я адаптировал JavaScript serialize функцию, написанную Kevin van Zonneveld, [...]]]></description> <content:encoded><![CDATA[<p><span
style="font-weight: bold;">ENG</span>: I&#8217;ve addapted a <span
style="font-weight: bold;">JavaScript serialize function</span> by <a
rel="nofollow" href="http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_serialize/">Kevin van Zonneveld</a> to <span
style="font-weight: bold;">jQuery</span>. Function works like the same named function in PHP. Be free to use it in your projects. It is especially needed when you want to post Object in AJAX (in jQuery &laquo;$.ajax()&raquo;).<br
/> <span
style="font-weight: bold;">RUS</span>: Я адаптировал JavaScript serialize функцию, написанную Kevin van Zonneveld, для использования с jQuery. Serialize работает также как и одноименная функция в PHP. Она хорошо выручит Вас, если Вы захотите передать в AJAX запросе Объект (JavaScript object).</p><p>Example of using: $.serialize({data: &#8216;value&#8217;});<br
/> <span
id="more-54"></span><br
/> Source code<span
style="font-weight: bold;">(UPDATE-1)</span>:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;color: #FCFFBA;">jQuery.<span style="color: #660066;">extend</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#123;</span>
 serialize<span style="color: #339933;color: #CCC;">:</span> <span style="color: #003366; font-weight: bold;color: #577A61;">function</span> <span style="color: #009900;color: #CCC;">&#40;</span> mixed_value <span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// Returns a string representation of variable (which can later be unserialized)</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">//</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// version: 906.1807</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// discuss at: http://phpjs.org/functions/serialize</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// +   original by: Arpad Ray (mailto:arpad@php.net)</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// +   improved by: Dino</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// +   bugfixed by: Andrej Pavlovic</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// +   bugfixed by: Garagoth</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// +      input by: DtTvB (http://dt.in.th/2008-09-16.string-length-in-bytes.html)</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// +   bugfixed by: Russell Walker (http://www.nbill.co.uk/)</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// %          note: We feel the main purpose of this function should be to ease the transport of data between php &amp; js</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// %          note: Aiming for PHP-compatibility, we have to translate objects to arrays</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// *     example 1: serialize(['Kevin', 'van', 'Zonneveld']);</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// *     returns 1: 'a:3:{i:0;s:5:&quot;Kevin&quot;;i:1;s:3:&quot;van&quot;;i:2;s:9:&quot;Zonneveld&quot;;}'</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// *     example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">// *     returns 2: 'a:3:{s:9:&quot;firstName&quot;;s:5:&quot;Kevin&quot;;s:7:&quot;midName&quot;;s:3:&quot;van&quot;;s:7:&quot;surName&quot;;s:9:&quot;Zonneveld&quot;;}'</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> _getType <span style="color: #339933;color: #CCC;">=</span> <span style="color: #003366; font-weight: bold;color: #577A61;">function</span><span style="color: #009900;color: #CCC;">&#40;</span> inp <span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> type <span style="color: #339933;color: #CCC;">=</span> <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">typeof</span> inp<span style="color: #339933;color: #CCC;">,</span> match<span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> key<span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span>type <span style="color: #339933;color: #CCC;">==</span> <span style="color: #3366CC;color: #111;">'object'</span> <span style="color: #339933;color: #CCC;">&amp;&amp;</span> <span style="color: #339933;color: #CCC;">!</span>inp<span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">return</span> <span style="color: #3366CC;color: #111;">'null'</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span>type <span style="color: #339933;color: #CCC;">==</span> <span style="color: #3366CC;color: #111;">&quot;object&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #339933;color: #CCC;">!</span>inp.<span style="color: #660066;">constructor</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">return</span> <span style="color: #3366CC;color: #111;">'object'</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> cons <span style="color: #339933;color: #CCC;">=</span> inp.<span style="color: #660066;">constructor</span>.<span style="color: #660066;">toString</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 match <span style="color: #339933;color: #CCC;">=</span> cons.<span style="color: #660066;">match</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009966; font-style: italic;">/(\w+)\(/</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span>match<span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 cons <span style="color: #339933;color: #CCC;">=</span> match<span style="color: #009900;color: #CCC;">&#91;</span><span style="color: #CC0000;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#93;</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> types <span style="color: #339933;color: #CCC;">=</span> <span style="color: #009900;color: #CCC;">&#91;</span><span style="color: #3366CC;color: #111;">&quot;boolean&quot;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #3366CC;color: #111;">&quot;number&quot;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #3366CC;color: #111;">&quot;string&quot;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #3366CC;color: #111;">&quot;array&quot;</span><span style="color: #009900;color: #CCC;">&#93;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">for</span> <span style="color: #009900;color: #CCC;">&#40;</span>key <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">in</span> types<span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span>cons <span style="color: #339933;color: #CCC;">==</span> types<span style="color: #009900;color: #CCC;">&#91;</span>key<span style="color: #009900;color: #CCC;">&#93;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 type <span style="color: #339933;color: #CCC;">=</span> types<span style="color: #009900;color: #CCC;">&#91;</span>key<span style="color: #009900;color: #CCC;">&#93;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">break</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">return</span> type<span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> type <span style="color: #339933;color: #CCC;">=</span> _getType<span style="color: #009900;color: #CCC;">&#40;</span>mixed_value<span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> val<span style="color: #339933;color: #CCC;">,</span> ktype <span style="color: #339933;color: #CCC;">=</span> <span style="color: #3366CC;color: #111;">''</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">switch</span> <span style="color: #009900;color: #CCC;">&#40;</span>type<span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">case</span> <span style="color: #3366CC;color: #111;">&quot;function&quot;</span><span style="color: #339933;color: #CCC;">:</span>
 val <span style="color: #339933;color: #CCC;">=</span> <span style="color: #3366CC;color: #111;">&quot;&quot;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">break</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">case</span> <span style="color: #3366CC;color: #111;">&quot;boolean&quot;</span><span style="color: #339933;color: #CCC;">:</span>
 val <span style="color: #339933;color: #CCC;">=</span> <span style="color: #3366CC;color: #111;">&quot;b:&quot;</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #009900;color: #CCC;">&#40;</span>mixed_value <span style="color: #339933;color: #CCC;">?</span> <span style="color: #3366CC;color: #111;">&quot;1&quot;</span> <span style="color: #339933;color: #CCC;">:</span> <span style="color: #3366CC;color: #111;">&quot;0&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">break</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">case</span> <span style="color: #3366CC;color: #111;">&quot;number&quot;</span><span style="color: #339933;color: #CCC;">:</span>
 val <span style="color: #339933;color: #CCC;">=</span> <span style="color: #009900;color: #CCC;">&#40;</span>Math.<span style="color: #660066;">round</span><span style="color: #009900;color: #CCC;">&#40;</span>mixed_value<span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">==</span> mixed_value <span style="color: #339933;color: #CCC;">?</span> <span style="color: #3366CC;color: #111;">&quot;i&quot;</span> <span style="color: #339933;color: #CCC;">:</span> <span style="color: #3366CC;color: #111;">&quot;d&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #3366CC;color: #111;">&quot;:&quot;</span> <span style="color: #339933;color: #CCC;">+</span> mixed_value<span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">break</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">case</span> <span style="color: #3366CC;color: #111;">&quot;string&quot;</span><span style="color: #339933;color: #CCC;">:</span>
 val <span style="color: #339933;color: #CCC;">=</span> <span style="color: #3366CC;color: #111;">&quot;s:&quot;</span> <span style="color: #339933;color: #CCC;">+</span> encodeURIComponent<span style="color: #009900;color: #CCC;">&#40;</span>mixed_value<span style="color: #009900;color: #CCC;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009966; font-style: italic;">/%../g</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #3366CC;color: #111;">'x'</span><span style="color: #009900;color: #CCC;">&#41;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #3366CC;color: #111;">&quot;:<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933;color: #CCC;">+</span> mixed_value <span style="color: #339933;color: #CCC;">+</span> <span style="color: #3366CC;color: #111;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">break</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">case</span> <span style="color: #3366CC;color: #111;">&quot;array&quot;</span><span style="color: #339933;color: #CCC;">:</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">case</span> <span style="color: #3366CC;color: #111;">&quot;object&quot;</span><span style="color: #339933;color: #CCC;">:</span>
 val <span style="color: #339933;color: #CCC;">=</span> <span style="color: #3366CC;color: #111;">&quot;a&quot;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #006600; font-style: italic;color: #CDC;">/*
 if (type == &quot;object&quot;) {
 var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
 if (objname == undefined) {
 return;
 }
 objname[1] = serialize(objname[1]);
 val = &quot;O&quot; + objname[1].substring(1, objname[1].length - 1);
 }
 */</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> count <span style="color: #339933;color: #CCC;">=</span> <span style="color: #CC0000;color: #DDD;">0</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> vals <span style="color: #339933;color: #CCC;">=</span> <span style="color: #3366CC;color: #111;">&quot;&quot;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> okey<span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">var</span> key<span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">for</span> <span style="color: #009900;color: #CCC;">&#40;</span>key <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">in</span> mixed_value<span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 ktype <span style="color: #339933;color: #CCC;">=</span> _getType<span style="color: #009900;color: #CCC;">&#40;</span>mixed_value<span style="color: #009900;color: #CCC;">&#91;</span>key<span style="color: #009900;color: #CCC;">&#93;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span>ktype <span style="color: #339933;color: #CCC;">==</span> <span style="color: #3366CC;color: #111;">&quot;function&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">continue</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
okey <span style="color: #339933;color: #CCC;">=</span> <span style="color: #009900;color: #CCC;">&#40;</span>key.<span style="color: #660066;">match</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009966; font-style: italic;">/^[0-9]+$/</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">?</span> parseInt<span style="color: #009900;color: #CCC;">&#40;</span>key<span style="color: #339933;color: #CCC;">,</span> <span style="color: #CC0000;color: #DDD;">10</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">:</span> key<span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 vals <span style="color: #339933;color: #CCC;">+=</span> $.<span style="color: #660066;">serialize</span><span style="color: #009900;color: #CCC;">&#40;</span>okey<span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">+</span>
 $.<span style="color: #660066;">serialize</span><span style="color: #009900;color: #CCC;">&#40;</span>mixed_value<span style="color: #009900;color: #CCC;">&#91;</span>key<span style="color: #009900;color: #CCC;">&#93;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 count<span style="color: #339933;color: #CCC;">++;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 val <span style="color: #339933;color: #CCC;">+=</span> <span style="color: #3366CC;color: #111;">&quot;:&quot;</span> <span style="color: #339933;color: #CCC;">+</span> count <span style="color: #339933;color: #CCC;">+</span> <span style="color: #3366CC;color: #111;">&quot;:{&quot;</span> <span style="color: #339933;color: #CCC;">+</span> vals <span style="color: #339933;color: #CCC;">+</span> <span style="color: #3366CC;color: #111;">&quot;}&quot;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">break</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">case</span> <span style="color: #3366CC;color: #111;">&quot;undefined&quot;</span><span style="color: #339933;color: #CCC;">:</span> <span style="color: #006600; font-style: italic;color: #CDC;">// Fall-through</span>
 <span style="color: #003366; font-weight: bold;color: #577A61;">default</span><span style="color: #339933;color: #CCC;">:</span> <span style="color: #006600; font-style: italic;color: #CDC;">// if the JS object has a property which contains a null value, the string cannot be unserialized by PHP</span>
 val <span style="color: #339933;color: #CCC;">=</span> <span style="color: #3366CC;color: #111;">&quot;N&quot;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">break</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span>type <span style="color: #339933;color: #CCC;">!=</span> <span style="color: #3366CC;color: #111;">&quot;object&quot;</span> <span style="color: #339933;color: #CCC;">&amp;&amp;</span> type <span style="color: #339933;color: #CCC;">!=</span> <span style="color: #3366CC;color: #111;">&quot;array&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
 val <span style="color: #339933;color: #CCC;">+=</span> <span style="color: #3366CC;color: #111;">&quot;;&quot;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #000066; font-weight: bold;color:#DD2A24;font-weight:bold;">return</span> val<span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span></pre></div></div><p>UPDATES:<br
/> #1 &#8211; Patched version for working correctly with null, undefined values, subobjects.</p><p>NJoy</p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2009/06/jquery-serialize-php-function-for-jquery.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Yii &#8211; создание своих типов Action-ов</title><link>http://blog.bethrezen.ru/2009/05/yii-action.html</link> <comments>http://blog.bethrezen.ru/2009/05/yii-action.html#comments</comments> <pubDate>Fri, 29 May 2009 12:49:00 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[php]]></category> <category><![CDATA[yii]]></category><guid
isPermaLink="false"></guid> <description><![CDATA[Пишу одно прлиожение на Yii Framework. Структура приложения такова, что необходимо разграничить экшены контроллеров(CController) по папкам и сделать их типовыми. Экшены разграничиваются легко. Предположим, что у нас есть ряд экшенов для администрирования. Всем им надо установить какие-либо свойства или же сделать при их вызове какие-то типовые действия. Рассмотрим на примере изменения титла страницы. Вот код [...]]]></description> <content:encoded><![CDATA[<p>Пишу одно прлиожение на <strong>Yii Framework</strong>. Структура приложения такова, что необходимо разграничить экшены контроллеров(<strong>CController</strong>) по папкам и сделать их типовыми.<br
/> Экшены разграничиваются легко.<br
/> Предположим, что у нас есть ряд экшенов для администрирования. Всем им надо установить какие-либо свойства или же сделать при их вызове какие-то типовые действия.<br
/> Рассмотрим на примере изменения титла страницы.<br
/> Вот код моего базового экшена:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000000; font-weight: bold;color: #577A61;">class</span> dotPlantAdminAction <span style="color: #000000; font-weight: bold;color: #577A61;">extends</span> CAction
 <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #009933; font-style: italic;">/**
 * Constructor.
 * Runs CAction constructor and makes some changes for Admin action type
 */</span>
 <span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span>  __construct<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$controller</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #000088;">$id</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
 parent<span style="color: #339933;color: #CCC;">::</span>__construct<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$controller</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #000088;">$id</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000088;">$this</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #004000;">controller</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #004000;">pageTitle</span>       <span style="color: #339933;color: #CCC;">=</span> dotPlant<span style="color: #339933;color: #CCC;">::</span><span style="color: #004000;">getName</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">.</span> <span style="color: #0000ff;color: #111;">&quot; - Admin &quot;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span> run<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
&nbsp;
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>В конструкторе мы сначала вызываем <span
style="font-family: courier new,courier;">parent::__construct</span> с необходимыми параметрами. Это грубо-говоря идёт инициализация базового <strong>CAction</strong>.</p><p>Допустим у нас есть контроллер SettingsController. И нам нужно сделать его на основе нашего экшена. Создаем папку  <strong>protected/controllers/Settings/</strong>. В ней создаем файл <strong>ActionAdmin.php</strong> с таким вот кодом:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000000; font-weight: bold;color: #577A61;">class</span> ActionAdmin <span style="color: #000000; font-weight: bold;color: #577A61;">extends</span> dotPlantAdminAction
<span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span> run<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #004000;">controller</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>    
 <span style="color: #009900;color: #CCC;">&#125;</span>
<span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>Видите? Нам достаточно только объявить run() и уже всё готово. При загрузке запустится необходимый нам конструктор базового контроллера с нашими действиями.</p><p>Вот по такому принципу я разграничиваю например админку в своей CMS <a
title="dotPlant CMS based on Yii Framework" href="http://code.google.com/p/dotplant/">dotPlant</a> на Yii Framework. Слава PHP пятому!</p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2009/05/yii-action.html/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Yet Another Tip: Всегда проверяйте входные параметры</title><link>http://blog.bethrezen.ru/2007/08/yet-another-tip-%d0%b2%d1%81%d0%b5%d0%b3%d0%b4%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d1%8f%d0%b9%d1%82%d0%b5-%d0%b2%d1%85%d0%be%d0%b4%d0%bd%d1%8b%d0%b5-%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82.html</link> <comments>http://blog.bethrezen.ru/2007/08/yet-another-tip-%d0%b2%d1%81%d0%b5%d0%b3%d0%b4%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d1%8f%d0%b9%d1%82%d0%b5-%d0%b2%d1%85%d0%be%d0%b4%d0%bd%d1%8b%d0%b5-%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82.html#comments</comments> <pubDate>Fri, 10 Aug 2007 13:59:00 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[php]]></category> <category><![CDATA[security]]></category><guid
isPermaLink="false"></guid> <description><![CDATA[Данная статья находится в стадии написания. Не обращайте внимание на ашипки. Ани сделаны спицальна. &#171;Вот и все&#8230; и нету Билла&#8230; жадность Билла погубила!&#187; &#8211; м/ф &#171;Остров сокровищ&#187;, Россия Вот сколько народу не говори: &#171;Проверяйте входные параметры! Не доверяйте им! Юзер может их изменить! Особенно, если эти данные потом идут в базу!&#187;, а всё равно народ [...]]]></description> <content:encoded><![CDATA[<p><cite>Данная статья находится в стадии написания. Не обращайте внимание на ашипки. Ани сделаны спицальна.</cite></p><blockquote><p> &laquo;Вот и все&#8230; и нету Билла&#8230; жадность Билла погубила!&raquo; &#8211; м/ф &laquo;Остров сокровищ&raquo;, Россия</p></blockquote><p>Вот сколько народу не говори: &laquo;Проверяйте входные параметры! Не доверяйте им! Юзер может их изменить! Особенно, если эти данные потом идут в базу!&raquo;, а всё равно народ про это забывает. Вот совсем недавно. В одном казино заметил такую фишку..</p><p>Товарищ, писавший его наверное где-то встречал подобные статьи на сабж, но или они были написаны чайником для промо своего сайта, или просто этот человек плохо читать умеет. Кодер сий написал однажды интернет казино.. Увы ООПом тут и не пахнет&#8230; Даже массивы используются раза два-три за весь проект&#8230; Контент сайта инклудится из обычных файлов. Да, эти файлы нельзя просто так нагло прочитать, религия <strong>htaccess</strong> не позволяет. Да и выйти на папку выше тоже не получается, проверяется этот параметр регэкспом вида альфанумерик. Это умно, это молодец. Кое какие параметры у него даже проверяются на содержание коварных символов &laquo;,`,&#8217; .. Да&#8230; Это он конечно молодец и несмотря на всю убогость кода, этот момент он пытался(именно пытался) продумать&#8230;</p><p>Главная убогость кода в том, что он работает только при <strong>register_globals = on</strong>! Но это вряд ли поможет, ибо зачастую(не всегда, но бывает) переменные определяются ручками. Однако! Перейдем к игре&#8230;</p><p>В казино есть игры, которые просто работают через &lt;form&gt; и метод POST. Игрок делает ставку, нажимает и получает результат. Все вроде нормально. Однако! Кодер ЛОПУХ! Разве можно доверять входным данным? Никак нет! НИКОГДА! Я даже своей бабушке верю больше чем им! Так вот попробуем догадаться как выглядит исходник&#8230; Напишу на родном русском языке:<br
/>если ставка больше суммы_на_счету то пошел на фиг;<br
/>если все нормально играем;<br
/>если мы выиграли то сумма_на_счету=сумма_на_счету + ставка умноженная на коеффициент выигрыша в игре, если мы проиграли, то сумма_на_счету=сумма_на_счету &#8211; ставка;</p><p>Поскольку все люди жадные, особенно те, что заведуют казино, то естественно выиграть вам там не дадут&#8230;. От того мы проигрываем больше чем выигрываем. С этим все согласятся&#8230; Ну и отсюда естественный вывод. А что если нам проиграть, но с отрицательной ставкой? А? Словили фишку? Вот тут то весь и прикол. Если параметр не проверяется, то будет так:<br
/>сумма_на_счету = сумма_на_счету &#8211; отрицательная_ставка;<br
/>Кто хотя бы отдаленно был когда то в далеком детстве знаком с математикой помнит глупое правило: минус на минус дают плюс&#8230; Да! Оно тут срабатывает, ибо параметр не проверяется. Эта штука также подходит к условию, что ставка должна быть меньше либа равна суммы на счету, ибо отрицательное число всегда меньше неотрицательного:) Истина)</p><p>Вот такие вот косяки и приводят к огромным проблемам!</p><p>А теперь бонус, кусок злого кода на PHP:</p><p>PHP:<br
/><code><br
/>mysql_query("update users set cash=cash-'$stavka' where login='$l'"); /** Юзер проиграл */</p><p> if ($card==$tuz2) /** Юзер выиграл */</p><p>{</p><p>$priz=$stavka*3;</p><p>mysql_query("update game_bank  set wmr=wmr-'$priz' where name='lloto'");</p><p>mysql_query("update users set cash=cash+'$priz' where login='$l'");</p><p> }</p><p></code></p><p><b>Послесловие</b>:<br
/>Также, ещё одно вполне разумное умозаключение имеет место быть. Допустим у нас игра наперстки. Это три наперстка, надо угадать где приз. Скрипту может передаваться также ведь и параметр с номером выбранного наперстка. Если же он не проверяется, то заменив его допустим на номер 4 мы будим всегда проигрывать!<br
/>Естественно я об этой фигне сказал админу этого казино, которому было кстати 17! Он все закрыл и отблагодарил меня) Трави бобров.. ой.. твори добро.. во!</p><p>Внимание, данные действия могут попадать под статьи УК РФ!<br
/><b>Bethrezen</b></p><p><i>настроение: Довольное<br
/>слушаю: Lamb Of God &#8211; Purified</i></p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2007/08/yet-another-tip-%d0%b2%d1%81%d0%b5%d0%b3%d0%b4%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d1%8f%d0%b9%d1%82%d0%b5-%d0%b2%d1%85%d0%be%d0%b4%d0%bd%d1%8b%d0%b5-%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using apc
Page Caching using apc
Database Caching 59/115 queries in 0.036 seconds using apc

Served from: blog.bethrezen.ru @ 2012-02-06 13:54:16 -->
