<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Блог Сказкина</title>
	
	<link>http://www.skazkin.ru</link>
	<description>Мне надоел блоггинг</description>
	<lastBuildDate>Fri, 04 May 2012 10:07:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/skazkinwp" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="skazkinwp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Вычистить текст от тегов MS Word</title>
		<link>http://www.skazkin.ru/p/vychistit-tekst-ot-tegov-ms-word.html</link>
		<comments>http://www.skazkin.ru/p/vychistit-tekst-ot-tegov-ms-word.html#comments</comments>
		<pubDate>Fri, 04 May 2012 10:07:34 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[сниппеты]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=814</guid>
		<description><![CDATA[Внезапно случается, что когда текст вносится напрямую из Word в WYSWYG-редактор&#160;&#8212; получается плохо. Чтобы не переделывать руками каждую запись через админку, было принято решение переделать все через консоль. В итоге: &#60;? if(!mysql_connect('host',&#160;'user',&#160;'password')){ &#160;&#160;&#160;&#160;die(mysql_error()); } if(!mysql_select_db('db')){ &#160;&#160;&#160;&#160;die(mysql_error()); } mysql_query("SET&#160;NAMES&#160;UTF8"); $tables&#160;=&#160;array( &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'news'&#160;&#160;=&#62;&#160;&#160;array( &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'id'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#62;&#160;'id', &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'content'&#160;&#160;&#160;=&#62;&#160;'content_field' &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;), &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'pages'&#160;=&#62;&#160;&#160;array( &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'id'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#62;&#160;&#160;'page_id', &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'content'&#160;&#160;&#160;=&#62;&#160;'content_field' &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;); $mask&#160;=&#160;array('mso',&#160;'\"'); foreach($tables&#160;as&#160;$table=&#62;$data){ &#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;foreach($mask&#160;as&#160;$mask_value){ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo&#160;"Searching&#160;".$mask_value."\n"; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$query&#160;=&#160;"SELECT&#160;COUNT(*)&#160;FROM&#160;".$table."&#160;WHERE&#160;".$data['content']."&#160;LIKE&#160;'%".$mask_value."%'"; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$result&#160;=&#160;mysql_query($query); [...]]]></description>
			<content:encoded><![CDATA[<p>Внезапно случается, что когда текст вносится напрямую из Word в WYSWYG-редактор&nbsp;&mdash; получается плохо.</p>
<p>Чтобы не переделывать руками каждую запись через админку, было принято решение переделать все через консоль.</p>
<p>В итоге:</p>
<blockquote>
<p>
<code>&lt;?</p>
<p>if(!mysql_connect('host',&nbsp;'user',&nbsp;'password')){<br />
&nbsp;&nbsp;&nbsp;&nbsp;die(mysql_error());<br />
}</p>
<p>if(!mysql_select_db('db')){<br />
&nbsp;&nbsp;&nbsp;&nbsp;die(mysql_error());<br />
}</p>
<p>mysql_query("SET&nbsp;NAMES&nbsp;UTF8");</p>
<p>$tables&nbsp;=&nbsp;array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'news'&nbsp;&nbsp;=&gt;&nbsp;&nbsp;array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'id'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;'id',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'content'&nbsp;&nbsp;&nbsp;=&gt;&nbsp;'content_field'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'pages'&nbsp;=&gt;&nbsp;&nbsp;array(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'id'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;&nbsp;'page_id',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'content'&nbsp;&nbsp;&nbsp;=&gt;&nbsp;'content_field'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</p>
<p>$mask&nbsp;=&nbsp;array('mso',&nbsp;'\"');</p>
<p>foreach($tables&nbsp;as&nbsp;$table=&gt;$data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;foreach($mask&nbsp;as&nbsp;$mask_value){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Searching&nbsp;".$mask_value."\n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$query&nbsp;=&nbsp;"SELECT&nbsp;COUNT(*)&nbsp;FROM&nbsp;".$table."&nbsp;WHERE&nbsp;".$data['content']."&nbsp;LIKE&nbsp;'%".$mask_value."%'";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;mysql_query($query);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$row&nbsp;=&nbsp;mysql_fetch_row($result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"\t".$row[0]."&nbsp;from&nbsp;".$table."\n\n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$query&nbsp;=&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;".$data['id'].",&nbsp;".$data['content']."<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;".$table."<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;".$data['content']."&nbsp;LIKE&nbsp;'%mso%'&nbsp;LIMIT&nbsp;1";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;mysql_query($query);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($result&nbsp;&#038;&&nbsp;mysql_num_rows($result)&nbsp;==&nbsp;1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$row&nbsp;=&nbsp;mysql_fetch_assoc($result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$row[$data['content']]."\n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"--------------------\n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$true_content&nbsp;=&nbsp;clean($row[$data['content']]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$true_content;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"\n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'Content&nbsp;is&nbsp;correct?&nbsp;[y\N]&nbsp;';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$d&nbsp;=&nbsp;trim(fgets(STDIN));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($d){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$query&nbsp;=&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UPDATE&nbsp;".$table."<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;".$data['content']."&nbsp;=&nbsp;'".mysql_real_escape_string($true_content)."'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;".$data['id']."&nbsp;=&nbsp;".$row[$data['id']];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql_query($query);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</p>
<p>function&nbsp;clean($content){<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;preg_replace("/\r/",'',$content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;stripslashes($content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;preg_replace('/&lt;p[^&gt;]+&gt;(.+?)&lt;\/p&gt;/is',&nbsp;"&lt;p&gt;$1&lt;/p&gt;",&nbsp;$content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;preg_replace('/&lt;span[^&gt;]+&gt;(.+?)&lt;\/span&gt;/is',&nbsp;"&lt;span&gt;$1&lt;/span&gt;",&nbsp;$content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;preg_replace('/&lt;!.+?(?:\-\-|\])&gt;/','',$content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;preg_replace('/&lt;style.+?&lt;\/style&gt;/is','',$content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;preg_replace('/&lt;xml.+?&lt;\/xml&gt;/is','',$content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;strip_tags($content,'&lt;span&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;u&gt;&lt;a&gt;&lt;img&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;td&gt;&lt;thead&gt;&lt;tbody&gt;&lt;br&gt;');<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;str_replace("&nbsp;","&nbsp;",&nbsp;$content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;preg_replace("/&lt;(?:span|p)&gt;\s*&lt;\/(?:span|p)&gt;/is","",$content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content&nbsp;=&nbsp;preg_replace("/\n\n+/","\n",$content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$content;<br />
}<br />
?&gt;</code>
</p>
</blockquote>

<p><a href="http://feedads.g.doubleclick.net/~a/TODZ0Ay_jXVyAAKXigyrhk10wi0/0/da"><img src="http://feedads.g.doubleclick.net/~a/TODZ0Ay_jXVyAAKXigyrhk10wi0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TODZ0Ay_jXVyAAKXigyrhk10wi0/1/da"><img src="http://feedads.g.doubleclick.net/~a/TODZ0Ay_jXVyAAKXigyrhk10wi0/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/vychistit-tekst-ot-tegov-ms-word.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Логин и парсер Яндекс.Вебмастера</title>
		<link>http://www.skazkin.ru/p/login-i-parser-yandeks-vebmastera.html</link>
		<comments>http://www.skazkin.ru/p/login-i-parser-yandeks-vebmastera.html#comments</comments>
		<pubDate>Wed, 02 May 2012 14:48:09 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[сниппеты]]></category>
		<category><![CDATA[яндекс]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=809</guid>
		<description><![CDATA[Волею судеб захотелось отфильтровать в одном дампе индексат от неиндексата&#160;&#8212; полез в Яндекс.Вебмастер. Ну, сразу перейду к расстройству что даже в Я.Вебмастер показывается только первая 1000 проиндексированных страниц&#160;&#8212; но парсер уже был готов, допиливать его не стал. С использованием Jum::Web::Crawler&#160;&#8212; функцию под него я уже постил use strict; use Jum::Web::Crawler; my $login = q[]; my [...]]]></description>
			<content:encoded><![CDATA[<p>Волею судеб захотелось отфильтровать в одном дампе индексат от неиндексата&nbsp;&mdash; полез в Яндекс.Вебмастер.</p>
<p>Ну, сразу перейду к расстройству что даже в Я.Вебмастер показывается только первая 1000 проиндексированных страниц&nbsp;&mdash; но парсер уже был готов, допиливать его не стал.</p>
<p>С использованием Jum::Web::Crawler&nbsp;&mdash; функцию под него я уже <a href="http://www.skazkin.ru/p/lyubimaya-funkciya-dlya-polucheniya-kontenta.html">постил</a></p>
<blockquote>
<p><code>use strict;<br />
use Jum::Web::Crawler;</p>
<p>my $login = q[];<br />
my $password = q[];<br />
my $cookie_file = q[./yandex.cookie];</p>
<p>print qq[Enter site ID: ];<br />
my $site_id = &lt;STDIN&gt;;<br />
chop $site_id;<br />
print $site_id." in process..\n";</p>
<p>my $webmaster_href  =   q[http://webmaster.yandex.ru/site/indexed-pages.xml?host=%d&#038;path=*&#038;page_num=%d];<br />
my $auth_href   =   q[https://passport.yandex.ru/passport?mode=auth];<br />
my $post_data   =   q[display=page];<br />
$post_data      .=  q[&#038;from=passport];<br />
$post_data      .=  q[&#038;idkey=%s];<br />
$post_data      .=  q[&#038;retpath=http://webmaster.yandex.ru];<br />
$post_data      .=  q[&#038;login=]$login;<br />
$post_data      .=  q[&#038;passwd=].$password;<br />
$post_data      .=  q[&#038;twoweeks=yes];<br />
$post_data      .=  q[&#038;timestamp=].time().q[520];</p>
<p>my $login_data = Jum::Web::Crawler::getURL({href=&gt;$auth_href, cookie_file=&gt;$cookie_file});<br />
my $idkey = $1 if $login_data-&gt;{content} =~ /"idkey" value="([^"]+)/;</p>
<p>$post_data = sprintf($post_data, $idkey);</p>
<p>$login_data = Jum::Web::Crawler::getURL({<br />
                                            href    =&gt;  $auth_href,<br />
                                            post    =&gt;  $post_data,<br />
                                            cookie_file =&gt;  $cookie_file,<br />
                                            referer =&gt;  $auth_href<br />
                                        });</p>
<p>if($login_data-&gt;{content} =~ /Refresh" content="0;/){<br />
    print qq[Success!\n];<br />
}</p>
<p>my $i = 0;<br />
open F,"&gt;".$site_id.".links";<br />
while(1){<br />
    my $href = sprintf($webmaster_href, $site_id, $i);<br />
    print qq[Getting $href ...\n];<br />
    $i++;<br />
    my $content = Jum::Web::Crawler::getURL({href=&gt;$href, cookie_file=&gt;$cookie_file});<br />
    while($content-&gt;{content} =~ /target="_blank" href="([^"]+)/isg){<br />
        my $found_href = $1;<br />
        print "\t".$found_href."\n";<br />
        print F $found_href;<br />
    }<br />
    # Цикл бесконечный - имейте в виду. Надо останавливать когда дошли до конца.<br />
}<br />
close F;</code></p>
</blockquote>
<p>Одно расстройство с этой 1000 страниц. Прицельно бить Яндекс очень не хочется.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/OwpXaXQ9jOdUspV-PzeJQRmY1sc/0/da"><img src="http://feedads.g.doubleclick.net/~a/OwpXaXQ9jOdUspV-PzeJQRmY1sc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/OwpXaXQ9jOdUspV-PzeJQRmY1sc/1/da"><img src="http://feedads.g.doubleclick.net/~a/OwpXaXQ9jOdUspV-PzeJQRmY1sc/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/login-i-parser-yandeks-vebmastera.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Восстановить софтверный RAID-1 в Hetzner</title>
		<link>http://www.skazkin.ru/p/vosstanovit-softvernyj-raid-1-v-hetzner.html</link>
		<comments>http://www.skazkin.ru/p/vosstanovit-softvernyj-raid-1-v-hetzner.html#comments</comments>
		<pubDate>Wed, 18 Apr 2012 19:17:51 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[hetzner]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[raid]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=806</guid>
		<description><![CDATA[Чумовейшая чума. Вчера вырубил все фильтры, которые блокировали разного рода рассылки в почте. И моментально свалилось три письма, с содержанием примерно о том что you have degraded array at /dev/mda0 и тому подобное&#160;&#8212; на все три партиции винта, стоящего в рейде и меньше года проработавшего. В Hetzner. Просмотрел почту&#160;&#8212; валились такие письма уже месяца два. [...]]]></description>
			<content:encoded><![CDATA[<p>Чумовейшая чума.<br />
Вчера вырубил все фильтры, которые блокировали разного рода рассылки в почте. И моментально свалилось три письма, с содержанием примерно о том что you have degraded array at /dev/mda0 и тому подобное&nbsp;&mdash; на все три партиции винта, стоящего в рейде и меньше года проработавшего. В Hetzner.</p>
<p>Просмотрел почту&nbsp;&mdash; валились такие письма уже месяца два. Написал в Hetzner&nbsp;&mdash; так мол и так&nbsp;&mdash; винт подох, не откликается по </p>
<blockquote>
<p>
hdparm -i /dev/sdb | grep SerialNo<br />
 HDIO_DRIVE_CMD (identify) failed: Input/output error<br />
 HDIO_GET_IDENTITY failed: No message of desired type
</p>
</blockquote>
<p>И пишут они мне человеческим языком&nbsp;&mdash; давайте, мол, запустим мы вам хардвар чек на 10 часов с отключением сервера.<br />
Я так немножечко удивился&nbsp;&mdash; отвечаю&nbsp;&mdash; братюни, у меня винт из рейда выпал&nbsp;&mdash; вот, посмотрите&nbsp;&mdash; </p>
<blockquote>
<p>
cat /proc/mdstat</p>
<p>Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]<br />
md2 : active raid1 sda3[0]<br />
     1462516672 blocks [2/1] [U_]</p>
<p>md1 : active raid1 sda2[0]<br />
     524224 blocks [2/1] [U_]</p>
<p>md0 : active raid1 sda1[0]<br />
     2096064 blocks [2/1] [U_]</p>
<p>unused devices: <none>
</p>
</blockquote>
<p>А они такие&nbsp;&mdash; ну отлично&nbsp;&mdash; давайте тогда мы вам винт поменяем просто. 20 минут работы всего делов.<br />
Ну, я по scp слил бекапы /etc, /home и /var&nbsp;&mdash; и говорю&nbsp;&mdash; ну, меняйте, чертяки языкастые. Даром чтоль вам плачу-то.</p>
<p>Пишут через полчаса&nbsp;&mdash; поменяли, проверяйте. Проверяю&nbsp;&mdash; и вправду, диск подключили, серийник его высвечивается. А вот в рейд его не впихнули. Пишу&nbsp;&mdash; мол, своими руками-то в рейд его колбасить? Отвечают&nbsp;&mdash; ну, своими и колбась, вот тебе ссылка на нашу вики что и как там делать.</p>
<p>ОК. Посмотрел вики. Сделал первому винту fdisk /dev/sda -l&nbsp;&mdash; запомнил все, что написали. Начал делать такое же для второго, новенького. </p>
<p>А винты-то кстати на полтора тера оба.</p>
<p>И второй в GPT притом. Правда, не сразу заметил. Ну, в общем, шаманил и шаманил с fstab, sfstab, cfstab,&nbsp;&mdash; даже потом в parted полез,&nbsp;&mdash; чтоб убедиться что последний ext3 не знает как системы до сих пор.</p>
<p>Что-то вроде было:</p>
<blockquote>
<p>
<strong>sfdisk -d /dev/sda | sfdisk /dev/sdb</strong><br />
Checking that no-one is using this disk right now ...<br />
OK</p>
<p>Disk /dev/sdb: 182401 cylinders, 255 heads, 63 sectors/track</p>
<p>sfdisk: ERROR: sector 0 does not have an msdos signature<br />
 /dev/sdb: unrecognized partition table type<br />
Old situation:<br />
No partitions found<br />
New situation:<br />
Units = sectors of 512 bytes, counting from 0</p>
<p>  Device Boot    Start       End   #sectors  Id  System<br />
/dev/sdb1          2048   4194303    4192256  fd  Linux raid autodetect<br />
/dev/sdb2       4194304   5242879    1048576  fd  Linux raid autodetect<br />
/dev/sdb3       5242880 2930276351 2925033472  fd  Linux raid autodetect<br />
/dev/sdb4             0&nbsp;&mdash;          0   0  Empty<br />
Warning: partition 1 does not end at a cylinder boundary</p>
<p>sfdisk: I don&#39;t like these partitions&nbsp;&mdash; nothing changed.<br />
(If you really want this, use the --force option.)<br />
<strong> sfdisk -d /dev/sda | sfdisk /dev/sdb --force</strong><br />
Checking that no-one is using this disk right now ...<br />
OK</p>
<p>Disk /dev/sdb: 182401 cylinders, 255 heads, 63 sectors/track</p>
<p>sfdisk: ERROR: sector 0 does not have an msdos signature<br />
 /dev/sdb: unrecognized partition table type<br />
Old situation:<br />
No partitions found<br />
New situation:<br />
Units = sectors of 512 bytes, counting from 0</p>
<p>  Device Boot    Start       End   #sectors  Id  System<br />
/dev/sdb1          2048   4194303    4192256  fd  Linux raid autodetect<br />
/dev/sdb2       4194304   5242879    1048576  fd  Linux raid autodetect<br />
/dev/sdb3       5242880 2930276351 2925033472  fd  Linux raid autodetect<br />
/dev/sdb4             0&nbsp;&mdash;          0   0  Empty<br />
Warning: partition 1 does not end at a cylinder boundary<br />
Successfully wrote the new partition table</p>
<p>Re-reading the partition table ...</p>
<p>If you created or changed a DOS partition, /dev/foo7, say, then use dd (1)<br />
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1<br />
(See fdisk (8).)<br />
<strong>fdisk /dev/sda -l</strong></p>
<p>Disk /dev/sda: 1500.3 GB, 1500301910016 bytes<br />
64 heads, 32 sectors/track, 1430799 cylinders<br />
Units = cylinders of 2048 * 512 = 1048576 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0x0005d36c</p>
<p>  Device Boot      Start         End      Blocks   Id  System<br />
/dev/sda1               2        2048     2096128   fd  Linux raid autodetect<br />
/dev/sda2            2049        2560      524288   fd  Linux raid autodetect<br />
/dev/sda3            2561     1430799  1462516736   fd  Linux raid autodetect<br />
<strong> fdisk /dev/sdb -l</strong></p>
<p>Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes<br />
255 heads, 63 sectors/track, 182401 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0&times;00000000</p>
<p>  Device Boot      Start         End      Blocks   Id  System<br />
/dev/sdb1               1         262     2096128   fd  Linux raid autodetect<br />
Partition 1 does not end on cylinder boundary.<br />
/dev/sdb2             262         327      524288   fd  Linux raid autodetect<br />
Partition 2 does not end on cylinder boundary.<br />
/dev/sdb3             327      182402  1462516736   fd  Linux raid autodetect
</p>
</blockquote>
<p>Ничем в общем все заканчивалось&nbsp;&mdash; видать, где-то сам дурак был, недоразметил ему шапку дисковую. Хотя и dd пробовал подтесать ему, и с fdisk ms-dos-ил... В итоге просто в какой-то момент переписка моя с саппортом зашла в тупик и полез курить маны, куренные в последний раз года три назад.</p>
<p>В итоге забил мощный болт на их вики и несколькими мощными рывками кончил процесс следующим:</p>
<blockquote>
<p>
dd if=/dev/sda of=/tmp/sda.mbr bs=512 count=1<br />
dd if=/tmp/sda.mbr of=/dev/sdb bs=512 count=1<br />
fdisk /dev/sdb
</p>
</blockquote>
<p>После чего сохранил разметку партиции&nbsp;&mdash; ну а дальше дело техники&nbsp;&mdash;</p>
<blockquote>
<p>
mdadm /dev/md0 -a /dev/sdb1<br />
mdadm /dev/md1 -a /dev/sdb2<br />
mdadm /dev/md2 -a /dev/sdb3
</p>
</blockquote>
<p>Осталось 3 часа до синхронизации последней партиции. Радуюсь.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/Pkg766tsUpPIx7k-20uasQXQPHI/0/da"><img src="http://feedads.g.doubleclick.net/~a/Pkg766tsUpPIx7k-20uasQXQPHI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Pkg766tsUpPIx7k-20uasQXQPHI/1/da"><img src="http://feedads.g.doubleclick.net/~a/Pkg766tsUpPIx7k-20uasQXQPHI/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/vosstanovit-softvernyj-raid-1-v-hetzner.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Таймер отключения компьютера</title>
		<link>http://www.skazkin.ru/p/tajmer-otklyucheniya-kompyutera.html</link>
		<comments>http://www.skazkin.ru/p/tajmer-otklyucheniya-kompyutera.html#comments</comments>
		<pubDate>Sun, 27 Nov 2011 11:35:26 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[c sharp]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=801</guid>
		<description><![CDATA[Немногие отчего-то знают про программу shutdown.exe в Windows. Далее&#160;&#8212; про Win7/Vista, не помню и лениво было смотреть документацию для прочих. Суть в том, что эта программа позволяет задать таймер для выключения или перезагрузки компьютера. У нее даже GUI есть (shutdown -i) А я лентяй и мне гуи дергать и настраивать лениво&#160;&#8212; и накидал прогу которая [...]]]></description>
			<content:encoded><![CDATA[<p>Немногие отчего-то знают про программу shutdown.exe в Windows.</p>
<p>Далее&nbsp;&mdash; про Win7/Vista, не помню и лениво было смотреть документацию для прочих.</p>
<p>Суть в том, что эта программа позволяет задать таймер для выключения или перезагрузки компьютера. У нее даже GUI есть (shutdown -i)</p>
<p>А я лентяй и мне гуи дергать и настраивать лениво&nbsp;&mdash; и накидал прогу которая через заданное количество секунд-минут-часов-лет вырубит комп через этот самый шатдаун. Потому что когда я лежу в кровати и знаю что фильм кончится через час&nbsp;&mdash; вставать и выключать через час комп мне лениво.</p>
<p><a href='http://www.skazkin.ru/wp-content/uploads/WindowsShutdownTimer.exe'>WindowsShutdownTimer</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/GoahNykQ6xr6McBUlw_gBZcuAOk/0/da"><img src="http://feedads.g.doubleclick.net/~a/GoahNykQ6xr6McBUlw_gBZcuAOk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/GoahNykQ6xr6McBUlw_gBZcuAOk/1/da"><img src="http://feedads.g.doubleclick.net/~a/GoahNykQ6xr6McBUlw_gBZcuAOk/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/tajmer-otklyucheniya-kompyutera.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вычистить сайт от вируса iframe</title>
		<link>http://www.skazkin.ru/p/vychistit-sajt-ot-virusa-iframe.html</link>
		<comments>http://www.skazkin.ru/p/vychistit-sajt-ot-virusa-iframe.html#comments</comments>
		<pubDate>Tue, 04 Oct 2011 15:16:19 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[сниппеты]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=798</guid>
		<description><![CDATA[очень просто, если иметь SSH. $ find . &#124; xargs grep -l &#171;&#60;iframe src=&#39;badsite&#39;&#187; &#124; xargs sed -i -e &#39;s/bad_code_with_stripping_regex_chars//g&#39; Эта команда заменит весь вредоносный код на ничего.]]></description>
			<content:encoded><![CDATA[<p>очень просто, если иметь SSH.</p>
<p>$ find .  | xargs grep -l &laquo;&lt;iframe src=&#39;badsite&#39;&raquo;  | xargs sed -i -e &#39;s/bad_code_with_stripping_regex_chars//g&#39;</p>
<p>Эта команда заменит весь вредоносный код на ничего.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/AuA8VxM4Q6mPrOBqpPbTA_Pr6Jw/0/da"><img src="http://feedads.g.doubleclick.net/~a/AuA8VxM4Q6mPrOBqpPbTA_Pr6Jw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/AuA8VxM4Q6mPrOBqpPbTA_Pr6Jw/1/da"><img src="http://feedads.g.doubleclick.net/~a/AuA8VxM4Q6mPrOBqpPbTA_Pr6Jw/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/vychistit-sajt-ot-virusa-iframe.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Увести процесс из консоли в фон</title>
		<link>http://www.skazkin.ru/p/uvesti-process-iz-konsoli-v-fon.html</link>
		<comments>http://www.skazkin.ru/p/uvesti-process-iz-konsoli-v-fon.html#comments</comments>
		<pubDate>Mon, 12 Sep 2011 10:57:43 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[линукс]]></category>
		<category><![CDATA[процессы]]></category>
		<category><![CDATA[терминал]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=796</guid>
		<description><![CDATA[Наконец-то погуглил как это сделать. Если у вас что-то запущено в консоли и вам надо уходить, забрав с собой компьютер&#160;&#8212; то все очень просто. Ctrl+Z Процесс вешается в паузу А потом продолжаем его уже в фоне (а лучше в скрине)&#160;&#8212; kill -s CONT $PID Или попросту bg в текущем экране. Признак того, что процесс продолжился [...]]]></description>
			<content:encoded><![CDATA[<p>Наконец-то погуглил как это сделать.</p>
<p>Если у вас что-то запущено в консоли и вам надо уходить, забрав с собой компьютер&nbsp;&mdash; то все очень просто.</p>
<p>Ctrl+Z<br />
Процесс вешается в паузу<br />
А потом продолжаем его уже в фоне (а лучше в скрине)&nbsp;&mdash;  kill -s CONT $PID</p>
<p>Или попросту bg в текущем экране. Признак того, что процесс продолжился в фоне&nbsp;&mdash; это то что будет написано при выводе команды jobs.</p>
<p>Вуаля!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/JFZrXryeOkYJNiQAR-axU-_1fJI/0/da"><img src="http://feedads.g.doubleclick.net/~a/JFZrXryeOkYJNiQAR-axU-_1fJI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/JFZrXryeOkYJNiQAR-axU-_1fJI/1/da"><img src="http://feedads.g.doubleclick.net/~a/JFZrXryeOkYJNiQAR-axU-_1fJI/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/uvesti-process-iz-konsoli-v-fon.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 5.3 и поддержка old passwords в MySQL</title>
		<link>http://www.skazkin.ru/p/php-5-3-i-podderzhka-old-passwords-v-mysql.html</link>
		<comments>http://www.skazkin.ru/p/php-5-3-i-podderzhka-old-passwords-v-mysql.html#comments</comments>
		<pubDate>Tue, 02 Aug 2011 15:37:20 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[бежать от прошлого]]></category>
		<category><![CDATA[будущее рядом]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=791</guid>
		<description><![CDATA[Очень любопытно&#160;&#8212; PHP наконец-то начал насаживать довольно старые стандарты&#160;&#8212; но почему-то от них не могут отказаться миллионы разработчиков. После обновления PHP и либы mysqlnd один из production-серверов вскрякнул: Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in ... Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in ... Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot [...]]]></description>
			<content:encoded><![CDATA[<p>Очень любопытно&nbsp;&mdash; PHP наконец-то начал насаживать довольно старые стандарты&nbsp;&mdash; но почему-то от них не могут отказаться миллионы разработчиков.</p>
<p>После обновления PHP и либы mysqlnd один из production-серверов вскрякнул:</p>
<p><code>Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in ...<br />
Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in ...<br />
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file in ...</code></p>
<p>Ларчик просто открывается&nbsp;&mdash; собственно, все и написано в ошибке. Старый хеш имеет длину в 16 символов, новые&nbsp;&mdash; в 41. До сих пор даже в самых последних версиях MySQL не могут по каким-то причинам отказаться от старых паролей и таскают в конфиге этот allow_old_passwords = 1.</p>
<p>Ну, надо идти в ногу со временем.</p>
<p><code>SELECT `user` FROM `mysql`.`user` WHERE LENGTH(`Password`) = 16;</code></p>
<p>Ну и </p>
<p><code>UPDATE `mysql`.`user` SET `Password` = PASSWORD('старый пароль') WHERE `user` = 'юзер со старым хешом';</code></p>
<p>Удивительно только как проникает-то туда! Подозреваю что это все злой phpMyAdmin с его автоматическими созданиями юзеров</p>

<p><a href="http://feedads.g.doubleclick.net/~a/vHpQmXEqtWjz2EpyD-eo-8UNleo/0/da"><img src="http://feedads.g.doubleclick.net/~a/vHpQmXEqtWjz2EpyD-eo-8UNleo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/vHpQmXEqtWjz2EpyD-eo-8UNleo/1/da"><img src="http://feedads.g.doubleclick.net/~a/vHpQmXEqtWjz2EpyD-eo-8UNleo/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/php-5-3-i-podderzhka-old-passwords-v-mysql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вертолетный шум MacBook Pro</title>
		<link>http://www.skazkin.ru/p/vertoletnyj-shum-macbook-pro.html</link>
		<comments>http://www.skazkin.ru/p/vertoletnyj-shum-macbook-pro.html#comments</comments>
		<pubDate>Tue, 02 Aug 2011 06:37:14 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[macos]]></category>
		<category><![CDATA[mamp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[танцы с бубном]]></category>
		<category><![CDATA[установка]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=789</guid>
		<description><![CDATA[MAMP App вконец меня выбесил своей абсолютной некрутостью виртуальных хостов. Вычистил его корни отовсюду, запустил sudo port install apache2 mod_perl2 mod_ssi_func mysql5-server mysql5-client php5 php5-mysql ии кааак пойдет на взлет прошка моя&#160;&#8212; что прям думал со стола улетит&#160;&#8212; такой шум поднялся от кулеров&#160;&#8212; негодует видимо =) В итоге наслаждаюсь нормальным &#171;MAMP&#187; набором :) Перевыкаю от [...]]]></description>
			<content:encoded><![CDATA[<p>MAMP App вконец меня выбесил своей абсолютной некрутостью виртуальных хостов.</p>
<p>Вычистил его корни отовсюду, запустил </p>
<p>sudo port install apache2 mod_perl2 mod_ssi_func mysql5-server mysql5-client php5 php5-mysql</p>
<p>ии кааак пойдет на взлет прошка моя&nbsp;&mdash; что прям думал со стола улетит&nbsp;&mdash; такой шум поднялся от кулеров&nbsp;&mdash; негодует видимо =)</p>
<p>В итоге наслаждаюсь нормальным &laquo;MAMP&raquo; набором :) Перевыкаю от путей конфигов&nbsp;&mdash; зато теперь все четко-четко, без хрени всякой&nbsp;&mdash; и рестартится нормально&nbsp;&mdash; и конфигурится по-людски.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/H11HSLoSwf885vX_rJWrULQVENo/0/da"><img src="http://feedads.g.doubleclick.net/~a/H11HSLoSwf885vX_rJWrULQVENo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/H11HSLoSwf885vX_rJWrULQVENo/1/da"><img src="http://feedads.g.doubleclick.net/~a/H11HSLoSwf885vX_rJWrULQVENo/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/vertoletnyj-shum-macbook-pro.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сбросить пароль в Redmine</title>
		<link>http://www.skazkin.ru/p/sbrosit-parol-v-redmine.html</link>
		<comments>http://www.skazkin.ru/p/sbrosit-parol-v-redmine.html#comments</comments>
		<pubDate>Tue, 02 Aug 2011 06:14:07 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[пароль]]></category>
		<category><![CDATA[фокусы]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=786</guid>
		<description><![CDATA[Оказалось что это не так очевидно и просто как могло бы быть. Забыл админский пароль в Redmine. Первым делом полез в БД&#160;&#8212; смотреть на хеши. Попробовал md5, потом все-таки полез в гугл искать алгоритм шифрования&#160;&#8212; оказалось SHA1. Но и с sha1 не пустило. Смотрел таблицу users&#160;&#8212; поле hashed_password. Взял готовый хеш пароля из db/migrate/001_setup.rb&#160;&#8212; тоже [...]]]></description>
			<content:encoded><![CDATA[<p>Оказалось что это не так очевидно и просто как могло бы быть. Забыл админский пароль в Redmine.</p>
<p>Первым делом полез в БД&nbsp;&mdash; смотреть на хеши. Попробовал md5, потом все-таки полез в гугл искать алгоритм шифрования&nbsp;&mdash; оказалось SHA1. Но и с sha1 не пустило.</p>
<p>Смотрел таблицу users&nbsp;&mdash; поле hashed_password.</p>
<p>Взял готовый хеш пароля из db/migrate/001_setup.rb&nbsp;&mdash; тоже не подходит (ну и нечего удивляться&nbsp;&mdash; тот же sha1 от admin)</p>
<p>Загуглил вплотную&nbsp;&mdash; и помогла команда:<br />
RAILS_ENV=production script/runner &#39;user = User.find (:first, :conditions => {:admin => true}) ; user.password, user.password_confirmation = &laquo;my_password&raquo;, &laquo;my_password&raquo;; user.save!&#39;</p>
<p>Вуаля, так пароль сбрасывается. Где хранится&nbsp;&mdash; прям вот в затруднениях. Но сбрасывается.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/ZW1Ddj774smvhA0tG-PLZUTvGwk/0/da"><img src="http://feedads.g.doubleclick.net/~a/ZW1Ddj774smvhA0tG-PLZUTvGwk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ZW1Ddj774smvhA0tG-PLZUTvGwk/1/da"><img src="http://feedads.g.doubleclick.net/~a/ZW1Ddj774smvhA0tG-PLZUTvGwk/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/sbrosit-parol-v-redmine.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DevConf'2011 — 4 июня</title>
		<link>http://www.skazkin.ru/p/devconf2011-4-iyunya.html</link>
		<comments>http://www.skazkin.ru/p/devconf2011-4-iyunya.html#comments</comments>
		<pubDate>Sat, 28 May 2011 07:43:43 +0000</pubDate>
		<dc:creator>Andrew Skazkin</dc:creator>
				<category><![CDATA[Всё остальное]]></category>
		<category><![CDATA[devconf]]></category>
		<category><![CDATA[mystem]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.skazkin.ru/?p=783</guid>
		<description><![CDATA[http://devconf.ru Буду дебютировать в роли докладчика на Perl-секции&#160;&#8212; http://devconf.ru/offers/24 , в 18-00, закрывая секцию. &#171;Концепция алгоритма построения стабильного многопоточного приложения которое обрабатывает слова, нормализуя их с помощью инструмента от Яндекса&#160;&#8212; mystem.&#187; Учитывая, что это будет мой первый доклад на конференции, волнуюсь и уже в третий раз переписал текст. Будет немного скучно, но полезно&#160;&#8212; для тех [...]]]></description>
			<content:encoded><![CDATA[<p>http://devconf.ru</p>
<p>Буду дебютировать в роли докладчика на Perl-секции&nbsp;&mdash; http://devconf.ru/offers/24 , в 18-00, закрывая секцию.</p>
<p>&laquo;Концепция алгоритма построения стабильного многопоточного приложения которое обрабатывает слова, нормализуя их с помощью инструмента от Яндекса&nbsp;&mdash; mystem.&raquo;</p>
<p>Учитывая, что это будет мой первый доклад на конференции, волнуюсь и уже в третий раз переписал текст. Будет немного скучно, но полезно&nbsp;&mdash; для тех кто ещё не в теме.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/T04z-bhCxYjuFJsno3W5XwbK6-Q/0/da"><img src="http://feedads.g.doubleclick.net/~a/T04z-bhCxYjuFJsno3W5XwbK6-Q/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/T04z-bhCxYjuFJsno3W5XwbK6-Q/1/da"><img src="http://feedads.g.doubleclick.net/~a/T04z-bhCxYjuFJsno3W5XwbK6-Q/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.skazkin.ru/p/devconf2011-4-iyunya.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->

