<?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>Ars Longa, Vita Brevis &#187; патч</title>
	<atom:link href="http://blog.sjinks.pro/tag/patch/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sjinks.pro</link>
	<description>Quod scripsi, scripsi</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:56:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SQL Injection Vulnerability в Z-Vote 1.1</title>
		<link>http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/</link>
		<comments>http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 19:32:49 +0000</pubDate>
		<dc:creator>Wandering Soul</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Патчи]]></category>
		<category><![CDATA[path disclosure]]></category>
		<category><![CDATA[SQL-инъекция]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=902</guid>
		<description><![CDATA[Исправление уязвимостей в плагине WordPress Z-Vote 1.1 В плагине WordPress Z-Vote 1.1 была обнаружена уязвимость, позволяющая злоумышленнику выполнять произвольные запросы к базе данных (уязвимость типа «SQL-инъекция»). Уязвимость существует из-за неправильного использования метода wpdb::prepare() и отсутствия проверки и очистки переменной $_GET['zvote']. Уязвимость позволяет злоумышленнику изменять запросы к базе данных, выполнять произвольные запросы, читать или изменять конфиденциальную информацию. Вторая [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Исправление уязвимостей в плагине <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> Z-Vote 1.1</em></h2>
<p>В плагине WordPress Z-Vote 1.1 была <a href="http://www.exploit-db.com/exploits/16218/">обнаружена</a> <a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a>, позволяющая злоумышленнику выполнять произвольные запросы к базе данных (<a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a> типа «<a href="http://blog.sjinks.pro/tag/sql-injection/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  SQL-инъекция">SQL-инъекция</a>»).</p>
<p>Уязвимость существует из-за неправильного использования метода <span class="codebox"><code class="php">wpdb<span class="sy0">::</span><span class="me2">prepare</span><span class="br0">&#40;</span><span class="br0">&#41;</span></code></span> и отсутствия проверки и очистки переменной <code>$_GET['zvote']</code>.</p>
<p>Уязвимость позволяет злоумышленнику изменять запросы к базе данных, выполнять произвольные запросы, читать или изменять конфиденциальную информацию.<span id="more-902"></span><br />
Вторая уязвимость (незначительная по сравнению с SQL-инъекцией) — раскрытие пути к плагину (<a href="http://blog.sjinks.pro/tag/path-disclosure/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  path disclosure">path disclosure</a>) при прямом доступе к файлу плагина.</p>
<p><strong><a href='http://static.sjinks.info/wp-content/uploads/2011/02/z-vote.diff'>Патч, исправляющий уязвимости в Z-Vote 1.1</a>:</strong></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9022">
        <div class="code diff" id="p902code2">
diff -uwdBrN z-vote.orig/zvote.php z-vote/zvote.php<br />
<span class="re3">--- z-vote.orig/zvote.php &nbsp; <span class="nu0">2011</span>-02-<span class="nu0">25</span> <span class="nu0">21</span>:05:<span class="nu0">44.000000000</span> +0200</span><br />
<span class="re4">+++ z-vote/zvote.php&nbsp; &nbsp; <span class="nu0">2011</span>-02-<span class="nu0">25</span> <span class="nu0">21</span>:<span class="nu0">10</span>:<span class="nu0">46.531798756</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">9</span>,<span class="nu0">6</span> +<span class="nu0">9</span>,<span class="nu0">8</span> @@</span><br />
&nbsp; &nbsp;License: GPL <br />
&nbsp;*/<br />
&nbsp;<br />
<span class="re8">+ &nbsp; defined<span class="br0">&#40;</span>'ABSPATH'<span class="br0">&#41;</span> or die<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+</span><br />
&nbsp;// --- DEFINITIONS<br />
&nbsp;<br />
&nbsp; &nbsp; //define where zvote is installed on the wordpres system. In 99.9% of the case the path below is correct.<br />
<span class="re6">@@ -<span class="nu0">271</span>,<span class="nu0">7</span> +<span class="nu0">273</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;function zVote_getEntry<span class="br0">&#40;</span>$postid<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; global $wpdb;<br />
&nbsp;<br />
<span class="re7">- &nbsp; $entries = $wpdb-&gt;get_results<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT * FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $entries = $wpdb-&gt;get_results<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT * FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d&quot;, $postid<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; return $entries;<br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="re6">@@ -<span class="nu0">282</span>,<span class="nu0">7</span> +<span class="nu0">284</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; global $wpdb;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $votes = <span class="nu0">0</span>;<br />
<span class="re7">- &nbsp; $votes = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT COUNT<span class="br0">&#40;</span>*<span class="br0">&#41;</span> FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $votes = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT COUNT<span class="br0">&#40;</span>*<span class="br0">&#41;</span> FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d&quot;, $postid<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; return $votes;<br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="re6">@@ -<span class="nu0">292</span>,<span class="nu0">7</span> +<span class="nu0">294</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; global $wpdb;<br />
&nbsp; &nbsp; <br />
<span class="re7">- &nbsp; $votes = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;DELETE FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $votes = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;DELETE FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d&quot;, $postid<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; return $votes;<br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="re6">@@ -<span class="nu0">353</span>,<span class="nu0">7</span> +<span class="nu0">355</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; global $wpdb;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; //ipcheck for now, will expand to userid-check, based on the user setting in version 1.5<br />
<span class="re7">- &nbsp; $ipcheck = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT id FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot; AND userip = \&quot;&quot; . $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $ipcheck = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT id FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d AND userip = %s&quot;, $postid, $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $wpdb-&gt;insert<span class="br0">&#40;</span> $wpdb-&gt;prefix . 'zvotedata', array<span class="br0">&#40;</span> 'postid' =&gt; $postid, 'userip' =&gt; $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span>, 'userid' =&gt; 0, 'time' =&gt; time<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>, array<span class="br0">&#40;</span> '%d','%s', '%d', '%d' <span class="br0">&#41;</span> <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <br />
<span class="re6">@@ -<span class="nu0">365</span>,<span class="nu0">7</span> +<span class="nu0">367</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; global $wpdb, $wp_query, $redirect_meta_key;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; //ipcheck for now, will expand to userid-check, based on the user setting in version 1.5<br />
<span class="re7">- &nbsp; $ipcheck = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT id FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot; AND userip = \&quot;&quot; . $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $ipcheck = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT id FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d AND userip = %d&quot;, $postid, $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; if <span class="br0">&#40;</span>!$ipcheck<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; //ok to vote, register vote<br />
<span class="re6">@@ -<span class="nu0">382</span>,<span class="nu0">7</span> +<span class="nu0">384</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; //send user to post<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; header<span class="br0">&#40;</span>'Location: ' .$injectionPoint<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; wp_redirect<span class="br0">&#40;</span>$injectionPoint<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exit;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span> else <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; //user already registered, push to entry-page and inform the user.<br />
<span class="re6">@@ -<span class="nu0">394</span>,<span class="nu0">7</span> +<span class="nu0">396</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $injectionPoint = $post . '?zvoters=2';<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="re7">- &nbsp; &nbsp; &nbsp; header<span class="br0">&#40;</span>'Location: ' .$injectionPoint<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; wp_redirect<span class="br0">&#40;</span>$injectionPoint<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exit;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; exit;
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Межсайтовый скриптинг в Register Plus</title>
		<link>http://blog.sjinks.pro/security/895-register-plus-xss-vulnerability/</link>
		<comments>http://blog.sjinks.pro/security/895-register-plus-xss-vulnerability/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 12:59:36 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[path disclosure]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[XSS]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=895</guid>
		<description><![CDATA[Патч, исправляющий уязвимости XSS и FPD В плагине Register Plus 3.5.1 обнаружена уязвимость, позволяющая провести удалённому пользователю XSS-атаку. Уязвимость связана с отсутствием экранирования специальных символов при выводе данных, полученных от пользователя, что позволяет злоумышленнику выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта. Судя по дате последнего изменения, плагин автором больше не поддерживается; [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/895-register-plus-xss-vulnerability/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em><a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">Патч</a>, исправляющий уязвимости <a href="http://blog.sjinks.pro/tag/xss/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XSS">XSS</a> и FPD</em></h2>
<p>В плагине <a href="http://wordpress.org/extend/plugins/register-plus/">Register Plus</a> 3.5.1 <a href="http://websecurity.com.ua/4539">обнаружена</a> <a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a>, позволяющая провести удалённому пользователю XSS-атаку.</p>
<p>Уязвимость связана с отсутствием экранирования специальных символов при выводе данных, полученных от пользователя, что позволяет злоумышленнику выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта.</p>
<p>Судя по дате последнего изменения, <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> автором больше не поддерживается; тем не менее, пользователи <a href="http://wordpress.org/support/topic/plugin-register-plus-works-with-wp3-but-with-minor-issues?replies=2">не оставляют попытки</a> использования плагина с новыми версиями <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a>.<span id="more-895"></span></p>
<p>Тем же исследователем была обнаружена уязвимость типа full <a href="http://blog.sjinks.pro/tag/path-disclosure/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  path disclosure">path disclosure</a> (ей подвержены очень многие плагины и сам WordPress в том числе).</p>
<p><strong><a href="http://static.sjinks.info/wp-content/uploads/2011/02/register-plus.diff">Скачать патч для плагина Register Plus</a>.</strong></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/895-register-plus-xss-vulnerability/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/895-register-plus-xss-vulnerability/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Межсайтовый скриптинг в плагине Accept Signups 0.1</title>
		<link>http://blog.sjinks.pro/security/892-accept-signups-xss/</link>
		<comments>http://blog.sjinks.pro/security/892-accept-signups-xss/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 04:10:34 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[XSS]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=892</guid>
		<description><![CDATA[Исправление OSVDB-70101 для плагина Accept Signups В плагине Accept Signups 1.0 обнаружена уязвимость, позволяющая провести удалённому пользователю XSS-атаку. Уязвимость связана с отсутствием обработки входных данных в параметре email, передаваемом файлу wp-content/plugins/accept-signups/accept-signups_submit.php, а также с отсутствием экранирования специальных символов при выводе данных в wp-content/plugins/accept-signups/accept-signups.php. Уязвимость позволяет при помощи специально сформированного URL выполнить произвольный код сценария в браузере [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/892-accept-signups-xss/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Исправление OSVDB-70101 для плагина Accept Signups</em></h2>
<p>В плагине <a href="http://wordpress.org/extend/plugins/accept-signups/">Accept Signups</a> 1.0 <a href="http://osvdb.org/show/osvdb/70101">обнаружена</a> <a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a>, позволяющая провести удалённому пользователю <a href="http://blog.sjinks.pro/tag/xss/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XSS">XSS</a>-атаку.</p>
<p>Уязвимость связана с отсутствием обработки входных данных в параметре <code>email</code>, передаваемом файлу <code>wp-content/plugins/accept-signups/accept-signups_submit.php</code>, а также с отсутствием экранирования специальных символов при выводе данных в <code>wp-content/plugins/accept-signups/accept-signups.php</code>.</p>
<p>Уязвимость позволяет при помощи специально сформированного URL выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта.<span id="more-892"></span></p>
<p><strong><a href='http://static.sjinks.info/wp-content/uploads/2011/02/accept-signups.diff'>Патч для плагина Accept Signups 0.1</a>:</strong></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p8924">
        <div class="code diff" id="p892code4">
diff -uwdBrN accept-signups.orig/accept-signups.php accept-signups/accept-signups.php<br />
<span class="re3">--- accept-signups.orig/accept-signups.php&nbsp; <span class="nu0">2010</span>-<span class="nu0">12</span>-<span class="nu0">21</span> <span class="nu0">11</span>:07:<span class="nu0">21.000000000</span> +0200</span><br />
<span class="re4">+++ accept-signups/accept-signups.php &nbsp; <span class="nu0">2011</span>-02-09 06:06:<span class="nu0">33.612991546</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">223</span>,<span class="nu0">7</span> +<span class="nu0">223</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; $r = $wpdb-&gt;get_results<span class="br0">&#40;</span>$sql, ARRAY_A<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; $xml = '&lt;accept-signups&gt;';<br />
&nbsp; &nbsp; foreach<span class="br0">&#40;</span>$r as $k=&gt;$v<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; $xml .= '&lt;signup email=&quot;' . $v<span class="br0">&#91;</span>&quot;email&quot;<span class="br0">&#93;</span> . '&quot; ip=&quot;' . $v<span class="br0">&#91;</span>&quot;ip&quot;<span class="br0">&#93;</span> . '&quot; timestamp=&quot;' . $v<span class="br0">&#91;</span>&quot;timestamp&quot;<span class="br0">&#93;</span> . '&quot; /&gt;';</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $xml .= '&lt;signup email=&quot;' . esc_attr<span class="br0">&#40;</span>$v<span class="br0">&#91;</span>&quot;email&quot;<span class="br0">&#93;</span><span class="br0">&#41;</span> . '&quot; ip=&quot;' . $v<span class="br0">&#91;</span>&quot;ip&quot;<span class="br0">&#93;</span> . '&quot; timestamp=&quot;' . $v<span class="br0">&#91;</span>&quot;timestamp&quot;<span class="br0">&#93;</span> . '&quot; /&gt;';</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; $xml .= '&lt;/accept-signups&gt;';<br />
&nbsp; &nbsp; file_put_contents<span class="br0">&#40;</span>ABSPATH . 'wp-content/plugins/accept-signups/accept-signups.xml', $xml<span class="br0">&#41;</span>;<br />
<span class="re6">@@ -<span class="nu0">290</span>,<span class="nu0">7</span> +<span class="nu0">290</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>strpos<span class="br0">&#40;</span>$v1, '@'<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $email = $v1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $html .= '&lt;td valign=&quot;top&quot; align=&quot;center&quot; class=&quot;acceptSignupsCell&quot;&gt;&amp;nbsp;&amp;nbsp;' . $v1 . '&amp;nbsp;&amp;nbsp;&lt;/td&gt;'; </span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $html .= '&lt;td valign=&quot;top&quot; align=&quot;center&quot; class=&quot;acceptSignupsCell&quot;&gt;&amp;nbsp;&amp;nbsp;' . esc_html<span class="br0">&#40;</span>$v1<span class="br0">&#41;</span> . '&amp;nbsp;&amp;nbsp;&lt;/td&gt;'; </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $html .= '&lt;td valign=&quot;top&quot; align=&quot;center&quot; class=&quot;acceptSignupsCell&quot; valign=&quot;bottom&quot;&gt;&lt;input type=&quot;checkbox&quot; name=&quot;acceptSignupsDeleteCB?' . acceptSignupsEncode<span class="br0">&#40;</span>$email<span class="br0">&#41;</span> . '&quot; id=&quot;acceptSignupsDeleteCB&quot;&gt;&lt;/td&gt;'; <br />
&nbsp; &nbsp; &nbsp; &nbsp; $html .= '&lt;/tr&gt;';<br />
diff -uwdBrN accept-signups.orig/accept-signups_submit.php accept-signups/accept-signups_submit.php<br />
<span class="re3">--- accept-signups.orig/accept-signups_submit.php &nbsp; <span class="nu0">2010</span>-<span class="nu0">12</span>-<span class="nu0">21</span> <span class="nu0">11</span>:07:<span class="nu0">21.000000000</span> +0200</span><br />
<span class="re4">+++ accept-signups/accept-signups_submit.php&nbsp; &nbsp; <span class="nu0">2011</span>-02-09 06:03:<span class="nu0">04.017742924</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">1</span>,<span class="nu0">6</span> +<span class="nu0">1</span>,<span class="nu0">5</span> @@</span><br />
&nbsp;&lt;?php<br />
<span class="re7">-require_once<span class="br0">&#40;</span>'../../../wp-config.php'<span class="br0">&#41;</span>;</span><br />
<span class="re7">-require_once<span class="br0">&#40;</span>'../../../wp-includes/wp-db.php'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+require_once<span class="br0">&#40;</span>'../../../wp-load.php'<span class="br0">&#41;</span>;</span><br />
&nbsp;<br />
&nbsp;if <span class="br0">&#40;</span>true<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; if <span class="br0">&#40;</span>isset<span class="br0">&#40;</span>$_GET<span class="br0">&#91;</span>'email'<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re6">@@ -<span class="nu0">9</span>,<span class="nu0">6</span> +<span class="nu0">8</span>,<span class="nu0">16</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>hasEmail<span class="br0">&#40;</span>$_GET<span class="br0">&#91;</span>'email'<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo get_option<span class="br0">&#40;</span>'accept-signups-email-already-exists'<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> else <span class="br0">&#123;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $email = stripslashes<span class="br0">&#40;</span>$_GET<span class="br0">&#91;</span>'email'<span class="br0">&#93;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>function_exists<span class="br0">&#40;</span>'filter_var'<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>!filter_var<span class="br0">&#40;</span>$email, FILTER_VALIDATE_EMAIL<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; die<span class="br0">&#40;</span>'-1'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elseif <span class="br0">&#40;</span>!preg_match<span class="br0">&#40;</span>'/^<span class="br0">&#40;</span><span class="br0">&#91;</span>a-z0-<span class="nu0">9</span>_\-\.<span class="br0">&#93;</span><span class="br0">&#41;</span>+\@<span class="br0">&#40;</span><span class="br0">&#91;</span>a-z0-<span class="nu0">9</span>_\-\.<span class="br0">&#93;</span><span class="br0">&#41;</span>+\.<span class="br0">&#40;</span><span class="br0">&#91;</span>a-z<span class="br0">&#93;</span><span class="br0">&#123;</span><span class="nu0">2</span>,<span class="nu0">4</span><span class="br0">&#125;</span><span class="br0">&#41;</span>$/i', $email<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; die<span class="br0">&#40;</span>'-1'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; saveEmail<span class="br0">&#40;</span>$_GET<span class="br0">&#91;</span>'email'<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo get_option<span class="br0">&#40;</span>'accept-signups-email-saved'<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Помимо OSVDB-70101, данный <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> исправляет еще пару мелких недочётов.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/892-accept-signups-xss/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/892-accept-signups-xss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Межсайтовый скриптинг в WordPress BezahlCode-Generator 1.0</title>
		<link>http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/</link>
		<comments>http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 03:13:15 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[XSS]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=890</guid>
		<description><![CDATA[Патч для BezahlCode-Generator, исправляющий уязвимость В плагине BezahlCode-Generator 1.0 обнаружена уязвимость, позволяющая провести удалённому пользователю XSS-атаку. Уязвимость связана с отсутствием обработки входных данных в параметрах gen_name, gen_account, gen_BNC, gen_amount, gen_reason в bezahlcode-generator/der_generator.php. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта. Патч для BezahlCode-Generator 1.0: [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Патч для BezahlCode-Generator, исправляющий <a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a></em></h2>
<p>В плагине <a href="http://wordpress.org/extend/plugins/bezahlcode-generator/">BezahlCode-Generator</a> 1.0 обнаружена уязвимость, позволяющая провести удалённому пользователю <a href="http://blog.sjinks.pro/tag/xss/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XSS">XSS</a>-атаку. Уязвимость связана с отсутствием обработки входных данных в параметрах <code>gen_name</code>, <code>gen_account</code>, <code>gen_BNC</code>, <code>gen_amount</code>, <code>gen_reason</code> в <code>bezahlcode-generator/der_generator.php</code>.</p>
<p>Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта.<span id="more-890"></span></p>
<p><a href='http://static.sjinks.info/wp-content/uploads/2011/02/der_generator.php_.diff'>Патч для BezahlCode-Generator 1.0</a>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p8906">
        <div class="code diff" id="p890code6">
--- der_generator.orig.php&nbsp; 2011-02-09 04:52:27.000000000 +0200<br />
<span class="re4">+++ der_generator.php &nbsp; <span class="nu0">2011</span>-02-09 05:00:<span class="nu0">20.457537559</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">16</span>,<span class="nu0">15</span> +<span class="nu0">16</span>,<span class="nu0">15</span> @@</span><br />
&nbsp;&lt;label for=&quot;singlepaymentspende&quot;&gt;&lt;input type=&quot;radio&quot; id=&quot;singlepaymentspende&quot; name=&quot;gen_type&quot; value=&quot;singlepaymentspende&quot; &lt;?php if<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_type'<span class="br0">&#93;</span>==&quot;singlepaymentspende&quot;<span class="br0">&#41;</span> echo 'checked=&quot;checked&quot;'?&gt;/&gt; Spendenzahlung&lt;/label&gt;&lt;br /&gt;<br />
&nbsp;&lt;label for=&quot;singledirectdebit&quot;&gt;&lt;input type=&quot;radio&quot; id=&quot;singledirectdebit&quot; name=&quot;gen_type&quot; value=&quot;singledirectdebit&quot; &lt;?php if<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_type'<span class="br0">&#93;</span>==&quot;singledirectdebit&quot;<span class="br0">&#41;</span> echo 'checked=&quot;checked&quot;'?&gt;/&gt; Lastschrift&lt;/label&gt;&lt;br /&gt;<br />
&nbsp;<br />
<span class="re7">-Name:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: DTAUS Text&quot; id=&quot;gen_name&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dtaus'<span class="br0">&#41;</span>&quot; name=&quot;gen_name&quot; maxlength=&quot;<span class="nu0">27</span>&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_name'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_name'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot;&gt;</span><br />
<span class="re8">+Name:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: DTAUS Text&quot; id=&quot;gen_name&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dtaus'<span class="br0">&#41;</span>&quot; name=&quot;gen_name&quot; maxlength=&quot;<span class="nu0">27</span>&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_name'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_name'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot;&gt;</span><br />
&nbsp;&lt;br /&gt;<br />
<span class="re7">-Kontonummer:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Ganzzahl z.B. <span class="nu0">1234</span>&quot; id=&quot;gen_account&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'ganzzahl'<span class="br0">&#41;</span>&quot; name=&quot;gen_account&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_account'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_account'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
<span class="re8">+Kontonummer:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Ganzzahl z.B. <span class="nu0">1234</span>&quot; id=&quot;gen_account&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'ganzzahl'<span class="br0">&#41;</span>&quot; name=&quot;gen_account&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_account'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_account'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
&nbsp;&lt;br /&gt;<br />
<span class="re7">-BLZ:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Ganzzahl z.B. <span class="nu0">1234</span>&quot; id=&quot;gen_BNC&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'ganzzahl'<span class="br0">&#41;</span>&quot; name=&quot;gen_BNC&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_BNC'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_BNC'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
<span class="re8">+BLZ:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Ganzzahl z.B. <span class="nu0">1234</span>&quot; id=&quot;gen_BNC&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'ganzzahl'<span class="br0">&#41;</span>&quot; name=&quot;gen_BNC&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_BNC'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_BNC'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
&nbsp;&lt;br /&gt;<br />
<span class="re7">-Betrag in Euro <span class="br0">&#40;</span>z.B. <span class="nu0">1234</span>,<span class="nu0">50</span><span class="br0">&#41;</span> &lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Dezimalzahl z.B. <span class="nu0">1234</span>,<span class="nu0">50</span>&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dezimalzahl'<span class="br0">&#41;</span>&quot; id=&quot;gen_amount&quot; name=&quot;gen_amount&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_amount'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_amount'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
<span class="re8">+Betrag in Euro <span class="br0">&#40;</span>z.B. <span class="nu0">1234</span>,<span class="nu0">50</span><span class="br0">&#41;</span> &lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Dezimalzahl z.B. <span class="nu0">1234</span>,<span class="nu0">50</span>&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dezimalzahl'<span class="br0">&#41;</span>&quot; id=&quot;gen_amount&quot; name=&quot;gen_amount&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_amount'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_amount'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
&nbsp;&lt;br /&gt;<br />
<span class="re7">-Verwendungszweck:&lt;br /&gt;&lt;input type=&quot;text&quot; id=&quot;gen_reason&quot; tooltipText=&quot;Format: DTAUS Text&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dtaus'<span class="br0">&#41;</span>&quot; name=&quot;gen_reason&quot; maxlength=&quot;<span class="nu0">54</span>&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_reason'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_reason'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
<span class="re8">+Verwendungszweck:&lt;br /&gt;&lt;input type=&quot;text&quot; id=&quot;gen_reason&quot; tooltipText=&quot;Format: DTAUS Text&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dtaus'<span class="br0">&#41;</span>&quot; name=&quot;gen_reason&quot; maxlength=&quot;<span class="nu0">54</span>&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_reason'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_reason'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
&nbsp;&lt;br/&gt;<br />
&nbsp;&lt;input type=&quot;button&quot; value=&quot;Erstellen&quot; onclick='javascript:generateImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;'&gt;<br />
&nbsp;&lt;/form&gt;
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ionCube и xCache</title>
		<link>http://blog.sjinks.pro/zend/876-ioncube-xcache/</link>
		<comments>http://blog.sjinks.pro/zend/876-ioncube-xcache/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 04:58:09 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Zend]]></category>
		<category><![CDATA[ionCube]]></category>
		<category><![CDATA[segfault]]></category>
		<category><![CDATA[xCache]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=876</guid>
		<description><![CDATA[Случайные segmentation fault Вчера столкнулся с неожиданными ошибками php (segmentation fault) на сервере, на котором стояли ionCube Loader и xCache. Причем падения происходили исключительно при работе wp-cron.php. Тем, у кого похожая проблема и нет желания читать дальше: Загружайте xcache при помощи директивы extension, а не zend_extension (скажу честно, я не понял, в чём существенная разница, [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/zend/876-ioncube-xcache/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Случайные segmentation fault</em></h2>
<p>Вчера столкнулся с неожиданными ошибками php (segmentation fault) на сервере, на котором стояли <a href="http://blog.sjinks.pro/tag/ioncube/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ionCube">ionCube</a> Loader и <a href="http://blog.sjinks.pro/tag/xcache/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  xCache">xCache</a>. Причем падения происходили исключительно при работе <code>wp-cron.php</code>.<span id="more-876"></span></p>
<p>Тем, у кого похожая проблема и нет желания читать дальше:</p>
<ol>
<li>Загружайте xcache при помощи директивы <code>extension</code>, а не <code>zend_extension</code> (скажу честно, я не понял, в чём существенная разница, но, с другой стороны, на исходный код ionCube Loader никто посмотреть не даст).</li>
<li>Наложите мой <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> на исходный код xCache. Его можно найти в первом комментарии к <a href="https://bugs.launchpad.net/ubuntu/+source/xcache/+bug/688041">сообщению об ошибке</a>.</li>
</ol>
<p>Теперь технические подробности для тех, кому интересно.</p>
<p>Падение происходит непосредственно в ionCube Loader (дайте исходник!!!), трасса вызовов выглядит примерно так:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p8768">
        <div class="code text" id="p876code8">
#0 &nbsp;0x00007ffff452abdb in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#1 &nbsp;0x00007ffff4528a95 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#2 &nbsp;0x00007ffff452adb7 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#3 &nbsp;0x00007ffff4528a95 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#4 &nbsp;0x00007ffff452adb7 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#5 &nbsp;0x00007ffff4528a95 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#6 &nbsp;0x00007ffff452adb7 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#7 &nbsp;0x00007ffff4528a95 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#8 &nbsp;0x00007ffff452adb7 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#9 &nbsp;0x00007ffff4528a95 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#10 0x000000000078b12d in zend_call_function (fci=0x7fffffff96c0, fci_cache=0x7fffffff9710) at /root/php5-5.3.3/Zend/zend_execute_API.c:963<br />
#11 0x0000000000679c2c in zif_call_user_func_array (ht=2, return_value=0x8719540, return_value_ptr=0x0, this_ptr=0x0, return_value_used=0) at /root/php5-5.3.3/ext/standard/basic_functions.c:4788<br />
#12 0x00000000007d0e2a in zend_do_fcall_common_helper_SPEC (execute_data=0x56b5480) at /root/php5-5.3.3/Zend/zend_vm_execute.h:316<br />
#13 0x00000000007d550f in ZEND_DO_FCALL_SPEC_CONST_HANDLER (execute_data=0x56b5480) at /root/php5-5.3.3/Zend/zend_vm_execute.h:1606<br />
#14 0x00000000007d0274 in execute (op_array=0x2c5ace0) at /root/php5-5.3.3/Zend/zend_vm_execute.h:107<br />
#15 0x00007ffff452adb7 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#16 0x00007ffff4528a95 in ?? () from /usr/lib/php5/20090626/ioncube_loader_lin_5.3.so<br />
#17 0x000000000078b12d in zend_call_function (fci=0x7fffffff9b90, fci_cache=0x7fffffff9be0) at /root/php5-5.3.3/Zend/zend_execute_API.c:963<br />
#18 0x0000000000679c2c in zif_call_user_func_array (ht=2, return_value=0x85fd8d8, return_value_ptr=0x0, this_ptr=0x0, return_value_used=0) at /root/php5-5.3.3/ext/standard/basic_functions.c:4788<br />
#19 0x00000000007d0e2a in zend_do_fcall_common_helper_SPEC (execute_data=0x56b4088) at /root/php5-5.3.3/Zend/zend_vm_execute.h:316<br />
#20 0x00000000007d550f in ZEND_DO_FCALL_SPEC_CONST_HANDLER (execute_data=0x56b4088) at /root/php5-5.3.3/Zend/zend_vm_execute.h:1606<br />
#21 0x00000000007d0274 in execute (op_array=0x601eba0) at /root/php5-5.3.3/Zend/zend_vm_execute.h:107<br />
#22 0x00000000007d0fed in zend_do_fcall_common_helper_SPEC (execute_data=0x56b3858) at /root/php5-5.3.3/Zend/zend_vm_execute.h:340<br />
#23 0x00000000007d1526 in ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER (execute_data=0x56b3858) at /root/php5-5.3.3/Zend/zend_vm_execute.h:421<br />
#24 0x00000000007d0274 in execute (op_array=0x79ab1b8) at /root/php5-5.3.3/Zend/zend_vm_execute.h:107<br />
#25 0x000000000079ad95 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /root/php5-5.3.3/Zend/zend.c:1266<br />
#26 0x00000000007225c6 in php_execute_script (primary_file=0x7fffffffc3f0) at /root/php5-5.3.3/main/main.c:2288<br />
#27 0x000000000087ef85 in main (argc=6, argv=0x7fffffffe6a8) at /root/php5-5.3.3/sapi/cgi/cgi_main.c:2117
        </div>
    </div>
</div>

<p>Разбор кадров стека показал:</p>
<ul>
<li>21 кадр: <code>wp-cron.php</code> через вызов <code>do_action_ref_array()</code> вызывает код, находящийся в закодированном файле; управление передаётся загрузчику ioncube (16 кадр);</li>
<li>15 кадр: закодированный файл вызывает <code>do_action()</code> — управление передаётся в нормальный код;</li>
<li>14 кадр: <code>do_action()</code> вызывает функцию из зашифрованного файла через <code>call_user_func_array()</code>;</li>
<li>9 кадр: загрузчик получает управление;</li>
<li>8 кадр (а также 6, 4, 2): судя по адресу (<code>0x00007ffff452adb7</code>), совпадающему с адресом из 15 кадра, вызывается что-то не закодированное;</li>
<li>кадры 7, 5, 3, 1: похоже на вызов функций в закодированном файле из обычного кода;</li>
<li>0 кадр: <a href="http://blog.sjinks.pro/tag/segfault/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  segfault">segfault</a>. Что интересно, не по адресу <code>0x00007ffff452adb7</code>, а, судя по всему, на инструкцию позже (исходники дайте, блин!).</li>
</ul>
<p>Естественно, что тех поддержка ionCube всё сваливает на xCache — ведь без xCache всё работает. Но в xCache с виду всё чисто.</p>
<p>Совершенно случайно обнаружилось, что если xCache загружать через директиву <code>extension</code>, то ошибки не происходит. С другой стороны, в обоих случаях выполняется один и тот же код (с разницей в том, что загружается первым: расширение PHP или расширение Zend). Лично мне кажется, что <a href="http://blog.sjinks.pro/tag/bug/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ошибка">ошибка</a> где-то в коде загрузчика ionCube, но разработчики последнего со мной не согласны.</p>
<p><strong>UPD:</strong> в конечном итоге снёс xCache, поставил APC — полёт нормальный.<br />
<strong>UPD2:</strong> а еще экспериментально выяснилось, что ionCube Encoder сохраняет в зашифрованном файле информацию о том, какая лицензия ionCube (именно лицензия на кодировщик!) использовалась при шифровании, что позволяет установить (сотрудникам ionCube), покупателя ionCube Encoder. Nick проговорился <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/zend/876-ioncube-xcache/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/zend/876-ioncube-xcache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Официальный русский WordPress и SSL</title>
		<link>http://blog.sjinks.pro/wordpress/871-official-russian-wordpress-ssl/</link>
		<comments>http://blog.sjinks.pro/wordpress/871-official-russian-wordpress-ssl/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 13:15:22 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=871</guid>
		<description><![CDATA[Исправление проблем с SSL при использовании официального русского WordPress На днях понадобилось прикрутить к русскоязычному сайту, использующему WordPress, SSL. SSL требовался только в админке, поэтому решалось всё просто: define(&#34;FORCE_SSL_LOGIN&#34;, true); define(&#34;FORCE_SSL_ADMIN&#34;, true); Но после логина и захода в панель администрирования браузер сказал, что соединение не является полностью защищённым — присутствовали объекты, которые загружались по HTTP, а не [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/871-official-russian-wordpress-ssl/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Исправление проблем с <a href="http://blog.sjinks.pro/tag/ssl/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  SSL">SSL</a> при использовании официального русского <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a></em></h2>
<p>На днях понадобилось прикрутить к русскоязычному сайту, использующему WordPress, SSL. SSL требовался только в админке, поэтому решалось всё просто:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87114">
        <div class="code php" id="p871code14">
<span class="kw1">define</span><span class="br0">&#40;</span><span class="st0">&quot;FORCE_SSL_LOGIN&quot;</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw1">define</span><span class="br0">&#40;</span><span class="st0">&quot;FORCE_SSL_ADMIN&quot;</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>Но после логина и захода в панель администрирования браузер сказал, что соединение не является полностью защищённым — присутствовали объекты, которые загружались по HTTP, а не <a href="http://blog.sjinks.pro/tag/https/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTTPS">HTTPS</a>.<span id="more-871"></span></p>
<p>Быстрый взгляд на исходный текст страницы и виновные найдены:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87115">
        <div class="code html" id="p871code15">
<span class="sc2">&lt;<span class="kw2">link</span> <span class="kw3">rel</span><span class="sy0">=</span><span class="st0">'stylesheet'</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">'ru_RU-css'</span> &nbsp;<span class="kw3">href</span><span class="sy0">=</span><span class="st0">'http://site.com/wp-content/languages/ru_RU.css?ver=20100615'</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">'text/css'</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">'all'</span> <span class="sy0">/</span>&gt;</span><br />
<span class="sc-2">&lt;!--[if IE]&gt;</span><br />
<span class="sc-2">&lt;link rel='stylesheet' id='ru_RU-ie-css' &nbsp;href='http://site.com/wp-content/languages/ru_RU-ie.css?ver=20100615' type='text/css' media='all' /&gt;</span><br />
<span class="sc-2">&lt;![endif]--&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">link</span> <span class="kw3">rel</span><span class="sy0">=</span><span class="st0">'stylesheet'</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">'ms-ru_RU-css'</span> &nbsp;<span class="kw3">href</span><span class="sy0">=</span><span class="st0">'http://site.com/wp-content/languages/ms-ru_RU.css?ver=20100615'</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">'text/css'</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">'all'</span> <span class="sy0">/</span>&gt;</span>
        </div>
    </div>
</div>

<p>Эти три таблицы стилей грузятся с http, в то время как все остальные ресурсы грузятся с https. А путь (<code>wp-content/languages/</code>) указывает на то, что проблемы были вызваны файлами локализации. Заходим в <code>wp-content/languages/</code>, видим файл <code>ru_RU.php</code>, смотрим:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87116">
        <div class="code php" id="p871code16">
<span class="kw2">&lt;?php</span><br />
<span class="re0">$wp_default_secret_key</span> <span class="sy0">=</span> <span class="st_h">'впишите сюда уникальную фразу'</span><span class="sy0">;</span><br />
<br />
<span class="co1">// Make the menu wider and correct some overlapping issues</span><br />
<span class="kw2">function</span> ru_accomodate_markup<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">global</span> <span class="re0">$locale</span><span class="sy0">,</span> <span class="re0">$wp_styles</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; wp_enqueue_style<span class="br0">&#40;</span><span class="re0">$locale</span><span class="sy0">,</span> WP_CONTENT_URL <span class="sy0">.</span> <span class="st0">&quot;/languages/<span class="es4">$locale</span>.css&quot;</span><span class="sy0">,</span> <span class="kw1">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'20100615'</span><span class="sy0">,</span> <span class="st_h">'all'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; wp_enqueue_style<span class="br0">&#40;</span><span class="st0">&quot;<span class="es4">$locale</span>-ie&quot;</span><span class="sy0">,</span> WP_CONTENT_URL <span class="sy0">.</span> <span class="st0">&quot;/languages/<span class="es4">$locale</span>-ie.css&quot;</span><span class="sy0">,</span> <span class="kw1">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'20100615'</span><span class="sy0">,</span> <span class="st_h">'all'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> is_multisite<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; wp_enqueue_style<span class="br0">&#40;</span><span class="st0">&quot;ms-<span class="es4">$locale</span>&quot;</span><span class="sy0">,</span> WP_CONTENT_URL <span class="sy0">.</span> <span class="st0">&quot;/languages/ms-<span class="es4">$locale</span>.css&quot;</span><span class="sy0">,</span> <span class="kw1">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'20100615'</span><span class="sy0">,</span> <span class="st_h">'all'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$wp_styles</span><span class="sy0">-&gt;</span><span class="me1">add_data</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es4">$locale</span>-ie&quot;</span><span class="sy0">,</span> <span class="st_h">'conditional'</span><span class="sy0">,</span> <span class="st_h">'IE'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; wp_print_styles<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
add_action<span class="br0">&#40;</span><span class="st_h">'admin_head'</span><span class="sy0">,</span> <span class="st_h">'ru_accomodate_markup'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw2">function</span> ru_populate_options<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; add_option<span class="br0">&#40;</span><span class="st_h">'rss_language'</span><span class="sy0">,</span> <span class="st_h">'ru'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
add_action<span class="br0">&#40;</span><span class="st_h">'populate_options'</span><span class="sy0">,</span> <span class="st_h">'ru_populate_options'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw2">function</span> ru_restore_scripts_l10n<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">global</span> <span class="re0">$wp_scripts</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="kw3">is_a</span><span class="br0">&#40;</span><span class="re0">$wp_scripts</span><span class="sy0">,</span> <span class="st_h">'WP_Scripts'</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; do_action_ref_array<span class="br0">&#40;</span><span class="st_h">'wp_default_scripts'</span><span class="sy0">,</span> <span class="kw1">array</span><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re0">$wp_scripts</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
add_action<span class="br0">&#40;</span><span class="st_h">'init'</span><span class="sy0">,</span> <span class="st_h">'ru_restore_scripts_l10n'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>Очевидно, что проблема заключается в использовании константы <code>WP_CONTENT_URL</code> — если URL сайта начинается с http://, то вне зависимости от значений констант <code>FORCE_SSL_xxx</code> значение <code>WP_CONTENT_URL</code> всегда будет начинаться с http://. Что недопустимо при использовании SSL.</p>
<p>Лечение простое: заменить <code>WP_CONTENT_URL</code> на вызов функции <code>content_url()</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87117">
        <div class="code php" id="p871code17">
<span class="kw2">&lt;?php</span><br />
<span class="re0">$wp_default_secret_key</span> <span class="sy0">=</span> <span class="st_h">'впишите сюда уникальную фразу'</span><span class="sy0">;</span><br />
<br />
<span class="co1">// Make the menu wider and correct some overlapping issues</span><br />
<span class="kw2">function</span> ru_accomodate_markup<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">global</span> <span class="re0">$locale</span><span class="sy0">,</span> <span class="re0">$wp_styles</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; wp_enqueue_style<span class="br0">&#40;</span><span class="re0">$locale</span><span class="sy0">,</span> content_url<span class="br0">&#40;</span><span class="st0">&quot;languages/<span class="es4">$locale</span>.css&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="kw1">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'20100615'</span><span class="sy0">,</span> <span class="st_h">'all'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; wp_enqueue_style<span class="br0">&#40;</span><span class="st0">&quot;<span class="es4">$locale</span>-ie&quot;</span><span class="sy0">,</span> content_url<span class="br0">&#40;</span><span class="st0">&quot;languages/<span class="es4">$locale</span>-ie.css&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="kw1">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'20100615'</span><span class="sy0">,</span> <span class="st_h">'all'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> is_multisite<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; wp_enqueue_style<span class="br0">&#40;</span><span class="st0">&quot;ms-<span class="es4">$locale</span>&quot;</span><span class="sy0">,</span> content_url<span class="br0">&#40;</span><span class="st0">&quot;languages/ms-<span class="es4">$locale</span>.css&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="kw1">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'20100615'</span><span class="sy0">,</span> <span class="st_h">'all'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$wp_styles</span><span class="sy0">-&gt;</span><span class="me1">add_data</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es4">$locale</span>-ie&quot;</span><span class="sy0">,</span> <span class="st_h">'conditional'</span><span class="sy0">,</span> <span class="st_h">'IE'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; wp_print_styles<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
add_action<span class="br0">&#40;</span><span class="st_h">'admin_head'</span><span class="sy0">,</span> <span class="st_h">'ru_accomodate_markup'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw2">function</span> ru_populate_options<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; add_option<span class="br0">&#40;</span><span class="st_h">'rss_language'</span><span class="sy0">,</span> <span class="st_h">'ru'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
add_action<span class="br0">&#40;</span><span class="st_h">'populate_options'</span><span class="sy0">,</span> <span class="st_h">'ru_populate_options'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw2">function</span> ru_restore_scripts_l10n<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">global</span> <span class="re0">$wp_scripts</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="kw3">is_a</span><span class="br0">&#40;</span><span class="re0">$wp_scripts</span><span class="sy0">,</span> <span class="st_h">'WP_Scripts'</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; do_action_ref_array<span class="br0">&#40;</span><span class="st_h">'wp_default_scripts'</span><span class="sy0">,</span> <span class="kw1">array</span><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re0">$wp_scripts</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
add_action<span class="br0">&#40;</span><span class="st_h">'init'</span><span class="sy0">,</span> <span class="st_h">'ru_restore_scripts_l10n'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="sy1">?&gt;</span>
        </div>
    </div>
</div>

<p>Патч:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87118">
        <div class="code diff" id="p871code18">
--- ru_RU.php.orig&nbsp; 2010-12-01 14:01:46.000000000 +0200<br />
<span class="re4">+++ ru_RU.php &nbsp; <span class="nu0">2010</span>-<span class="nu0">12</span>-01 <span class="nu0">14</span>:<span class="nu0">59</span>:<span class="nu0">25.000000000</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">5</span>,<span class="nu0">10</span> +<span class="nu0">5</span>,<span class="nu0">10</span> @@</span><br />
&nbsp;function ru_accomodate_markup<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; global $locale, $wp_styles;<br />
&nbsp;<br />
<span class="re7">- &nbsp; wp_enqueue_style<span class="br0">&#40;</span>$locale, WP_CONTENT_URL . &quot;/languages/$locale.css&quot;, array<span class="br0">&#40;</span><span class="br0">&#41;</span>, '20100615', 'all'<span class="br0">&#41;</span>;</span><br />
<span class="re7">- &nbsp; wp_enqueue_style<span class="br0">&#40;</span>&quot;$locale-ie&quot;, WP_CONTENT_URL . &quot;/languages/$locale-ie.css&quot;, array<span class="br0">&#40;</span><span class="br0">&#41;</span>, '20100615', 'all'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; wp_enqueue_style<span class="br0">&#40;</span>$locale, content_url<span class="br0">&#40;</span>&quot;languages/$locale.css&quot;<span class="br0">&#41;</span>, array<span class="br0">&#40;</span><span class="br0">&#41;</span>, '20100615', 'all'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; wp_enqueue_style<span class="br0">&#40;</span>&quot;$locale-ie&quot;, content_url<span class="br0">&#40;</span>&quot;languages/$locale-ie.css&quot;<span class="br0">&#41;</span>, array<span class="br0">&#40;</span><span class="br0">&#41;</span>, '20100615', 'all'<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; if <span class="br0">&#40;</span> is_multisite<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; wp_enqueue_style<span class="br0">&#40;</span>&quot;ms-$locale&quot;, WP_CONTENT_URL . &quot;/languages/ms-$locale.css&quot;, array<span class="br0">&#40;</span><span class="br0">&#41;</span>, '20100615', 'all'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; wp_enqueue_style<span class="br0">&#40;</span>&quot;ms-$locale&quot;, content_url<span class="br0">&#40;</span>&quot;languages/ms-$locale.css&quot;<span class="br0">&#41;</span>, array<span class="br0">&#40;</span><span class="br0">&#41;</span>, '20100615', 'all'<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; $wp_styles-&gt;add_data<span class="br0">&#40;</span>&quot;$locale-ie&quot;, 'conditional', 'IE'<span class="br0">&#41;</span>;<br />
&nbsp;<br />
&nbsp; &nbsp; wp_print_styles<span class="br0">&#40;</span><span class="br0">&#41;</span>;
        </div>
    </div>
</div>

<p>Интересно, кому об этой ошибке сообщать?</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/871-official-russian-wordpress-ssl/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/871-official-russian-wordpress-ssl/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Генерация карты сайта в HTML из XML: часть 3</title>
		<link>http://blog.sjinks.pro/seo/854-html-stemap-generation-from-xml-part-3/</link>
		<comments>http://blog.sjinks.pro/seo/854-html-stemap-generation-from-xml-part-3/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 00:30:50 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Патчи]]></category>
		<category><![CDATA[Google XML Sitemaps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[XSL]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[преобразование]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=854</guid>
		<description><![CDATA[Автоматизация: перекладываем работу на Google XML Sitemaps Продолжение цикла статей на тему генерации карты сайта в HTML из карты XML. В данной статье будет рассмотрен вопрос модификации плагина Google XML Sitemaps с целью добавления поддержки автоматической генерации HTML-версии карты сайта; как и в предыдущих статьях, преобразование будет осуществляться средствами XSL. В первой части статьи мы [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/seo/854-html-stemap-generation-from-xml-part-3/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Автоматизация: перекладываем работу на <a href="http://blog.sjinks.pro/tag/google-xml-sitemaps/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Google XML Sitemaps">Google XML Sitemaps</a></em></h2>
<p>Продолжение <a href="http://blog.sjinks.pro/seo/847-html-stemap-generation-from-xml/">цикла</a> <a href="http://blog.sjinks.pro/seo/849-html-stemap-generation-from-xml-part-2/">статей</a> на тему <a href="/search/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BA%D0%B0%D1%80%D1%82%D1%8B%20%D1%81%D0%B0%D0%B9%D1%82%D0%B0%20%D0%B2%20HTML%20%D0%B8%D0%B7%20XML/">генерации карты сайта в HTML из карты XML</a>.</p>
<p>В данной статье будет рассмотрен вопрос модификации плагина <a href="http://blog.sjinks.pro/tag/google-xml-sitemaps/">Google XML Sitemaps</a> с целью добавления поддержки автоматической генерации HTML-версии карты сайта; как и в предыдущих статьях, <a href="http://blog.sjinks.pro/tag/conversion/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  преобразование">преобразование</a> будет осуществляться средствами <a href="http://blog.sjinks.pro/tag/xsl/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XSL">XSL</a>.<span id="more-854"></span></p>
<p>В <a href="http://blog.sjinks.pro/seo/847-html-stemap-generation-from-xml/">первой части</a> статьи мы рассматривали вариант, основанный на использовании утилиты <code>xsltproc</code>. Предполагалось, что генерация HTML-версии карты сайта осуществляется с использованием <code>cron</code>. Создание карты по расписанию означает, что построение HTML-карты будет запаздывать на некоторое время; а если не сравнивать время модификации XML- и HTML-версий карт, получим бесполезные вызовы <code>xsltproc</code>.</p>
<p>Те, кто используют <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a>, очень часто для автоматического построения карты сайта используют <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> Google XML Sitemaps; для них предлагается вариант с модификацией кода плагина для автоматической генерации HTML-карты.</p>
<p>Плагин позволяет задавать свою таблицу стилей XSLT:</p>
<p><a href="http://static.sjinks.info/wp-content/uploads/2010/11/gxs-options.png"><img src="http://static.sjinks.info/wp-content/uploads/2010/11/gxs-options-300x56.png" alt="Настройки Google XML Sitemaps" title="Настройки Google XML Sitemaps" width="300" height="56" class="alignnone size-medium wp-image-855" /></a></p>
<p>Мы изменим плагин таким образом, чтобы при заданной таблице стилей XSL плагин создавал HTML-файл с результатами преобразований XSL.</p>
<p>В файле <code>sitemap-core.php</code> ищем такой кусок кода:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p85422">
        <div class="code php" id="p854code22">
<ol class="php" style="font-family:monospace;" start="2169"><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">GetOption</span><span class="br0">&#40;</span><span class="st0">&quot;b_xml&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span>_fileHandle <span class="sy0">&amp;&amp;</span> <span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span>_fileHandle<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span>_fileHandle <span class="sy0">=</span> <span class="kw4">null</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$status</span><span class="sy0">-&gt;</span><span class="me1">EndXml</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pingUrl</span><span class="sy0">=</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">GetXmlUrl</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="re0">$status</span><span class="sy0">-&gt;</span><span class="me1">EndXml</span><span class="br0">&#40;</span><span class="kw4">false</span><span class="sy0">,</span><span class="st0">&quot;Could not close the sitemap file.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol>
        </div>
    </div>
</div>

<p>После него добавляем такой:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p85423">
        <div class="code php" id="p854code23">
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">class_exists</span><span class="br0">&#40;</span><span class="st_h">'XSLTProcessor'</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$file</span> &nbsp; &nbsp; &nbsp; <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">GetXmlPath</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$styleSheet</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">GetDefaultStyle</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">GetOption</span><span class="br0">&#40;</span><span class="st_h">'b_style_default'</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="kw4">true</span> ? <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">GetDefaultStyle</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">:</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">GetOption</span><span class="br0">&#40;</span><span class="st_h">'b_style'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw1">empty</span><span class="br0">&#40;</span><span class="re0">$styleSheet</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$xsl</span> <span class="sy0">=</span> <span class="kw2">new</span> DOMDocument<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$xsl</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="re0">$styleSheet</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$xml</span> <span class="sy0">=</span> <span class="kw2">new</span> DOMDocument<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$xml</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="re0">$file</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$proc</span> <span class="sy0">=</span> <span class="kw2">new</span> XSLTProcessor<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$proc</span><span class="sy0">-&gt;</span><span class="me1">importStyleSheet</span><span class="br0">&#40;</span><span class="re0">$xsl</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$proc</span><span class="sy0">-&gt;</span><span class="me1">transformToURI</span><span class="br0">&#40;</span><span class="re0">$xml</span><span class="sy0">,</span> <span class="st_h">'file://'</span> <span class="sy0">.</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st_h">'.xml'</span><span class="sy0">,</span> <span class="st_h">'.html'</span><span class="sy0">,</span> <span class="re0">$file</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Данный код требует PHP 5 и расширения XSLT (в Debian/Ubuntu оно предоставляется пакетом <code>php5-xsl</code>). Код получает имя файла с картой сайта и адрес таблицы стилей (этот адрес должен быть задан абсолютным URL); XML и XSL скармливаются XSLT Processor&#8217;у, результат записывается в файл с тем же именем, что и карта сайта XML, но с расширением <code>.html</code>.</p>
<p>Теперь при каждом построении карты сайта будет создаваться и HTML-версия.</p>
<p>Тем, кто любит патчи (<a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> кумулятивный, исправляет и некоторые другие недостатки плагина):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p85424">
        <div class="code diff" id="p854code24">
--- sitemap-core.php.orig &nbsp; 2010-08-16 10:49:16.000000000 +0300<br />
<span class="re4">+++ sitemap-core.php&nbsp; &nbsp; <span class="nu0">2010</span>-<span class="nu0">11</span>-<span class="nu0">28</span> 02:<span class="nu0">10</span>:<span class="nu0">08.000000000</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">1654</span>,<span class="nu0">9</span> +<span class="nu0">1654</span>,<span class="nu0">9</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;AddElement<span class="br0">&#40;</span>new GoogleSitemapGeneratorXmlEntry<span class="br0">&#40;</span>'&lt;' . '?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;' . $styleSheet . '&quot;?' . '&gt;'<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="re7">- &nbsp; &nbsp; &nbsp; $this-&gt;AddElement<span class="br0">&#40;</span>new GoogleSitemapGeneratorDebugEntry<span class="br0">&#40;</span>&quot;generator=\&quot;wordpress/&quot; . get_bloginfo<span class="br0">&#40;</span>'version'<span class="br0">&#41;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; $this-&gt;AddElement<span class="br0">&#40;</span>new GoogleSitemapGeneratorDebugEntry<span class="br0">&#40;</span>&quot;sitemap-generator-url=\&quot;http://www.arnebrachhold.de\&quot; sitemap-generator-version=\&quot;&quot; . $this-&gt;GetVersion<span class="br0">&#40;</span><span class="br0">&#41;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; $this-&gt;AddElement<span class="br0">&#40;</span>new GoogleSitemapGeneratorDebugEntry<span class="br0">&#40;</span>&quot;generated-on=\&quot;&quot; . date<span class="br0">&#40;</span>get_option<span class="br0">&#40;</span>&quot;date_format&quot;<span class="br0">&#41;</span> . &quot; &quot; . get_option<span class="br0">&#40;</span>&quot;time_format&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+// &nbsp; &nbsp; $this-&gt;AddElement<span class="br0">&#40;</span>new GoogleSitemapGeneratorDebugEntry<span class="br0">&#40;</span>&quot;generator=\&quot;wordpress/&quot; . get_bloginfo<span class="br0">&#40;</span>'version'<span class="br0">&#41;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+// &nbsp; &nbsp; $this-&gt;AddElement<span class="br0">&#40;</span>new GoogleSitemapGeneratorDebugEntry<span class="br0">&#40;</span>&quot;sitemap-generator-url=\&quot;http://www.arnebrachhold.de\&quot; sitemap-generator-version=\&quot;&quot; . $this-&gt;GetVersion<span class="br0">&#40;</span><span class="br0">&#41;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+// &nbsp; &nbsp; $this-&gt;AddElement<span class="br0">&#40;</span>new GoogleSitemapGeneratorDebugEntry<span class="br0">&#40;</span>&quot;generated-on=\&quot;&quot; . date<span class="br0">&#40;</span>get_option<span class="br0">&#40;</span>&quot;date_format&quot;<span class="br0">&#41;</span> . &quot; &quot; . get_option<span class="br0">&#40;</span>&quot;time_format&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; //All comments as an asso. Array <span class="br0">&#40;</span>postID=&gt;commentCount<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $comments=<span class="br0">&#40;</span>$this-&gt;GetOption<span class="br0">&#40;</span>&quot;b_prio_provider&quot;<span class="br0">&#41;</span>!=&quot;&quot;?$this-&gt;GetComments<span class="br0">&#40;</span><span class="br0">&#41;</span>:array<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="re6">@@ -<span class="nu0">2172</span>,<span class="nu0">6</span> +<span class="nu0">2172</span>,<span class="nu0">22</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $status-&gt;EndXml<span class="br0">&#40;</span>true<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pingUrl=$this-&gt;GetXmlUrl<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> else $status-&gt;EndXml<span class="br0">&#40;</span>false,&quot;Could not close the sitemap file.&quot;<span class="br0">&#41;</span>;<br />
<span class="re8">+</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>class_exists<span class="br0">&#40;</span>'XSLTProcessor', true<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $file &nbsp; &nbsp; &nbsp; = $this-&gt;GetXmlPath<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $styleSheet = <span class="br0">&#40;</span>$this-&gt;GetDefaultStyle<span class="br0">&#40;</span><span class="br0">&#41;</span> &amp;&amp; $this-&gt;GetOption<span class="br0">&#40;</span>'b_style_default'<span class="br0">&#41;</span> === true ? $this-&gt;GetDefaultStyle<span class="br0">&#40;</span><span class="br0">&#41;</span> : $this-&gt;GetOption<span class="br0">&#40;</span>'b_style'<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>!empty<span class="br0">&#40;</span>$styleSheet<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $xsl = new DOMDocument<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $xsl-&gt;load<span class="br0">&#40;</span>$styleSheet<span class="br0">&#41;</span>;</span><br />
<span class="re8">+</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $xml = new DOMDocument<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $xml-&gt;load<span class="br0">&#40;</span>$file<span class="br0">&#41;</span>;</span><br />
<span class="re8">+</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $proc = new XSLTProcessor<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $proc-&gt;importStyleSheet<span class="br0">&#40;</span>$xsl<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $proc-&gt;transformToURI<span class="br0">&#40;</span>$xml, 'file://' . str_replace<span class="br0">&#40;</span>'.xml', '.html', $file<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; if<span class="br0">&#40;</span>$this-&gt;IsGzipEnabled<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re6">@@ -<span class="nu0">2514</span>,<span class="nu0">9</span> +<span class="nu0">2530</span>,<span class="nu0">9</span> @@</span><br />
&nbsp; &nbsp; &nbsp;* @return int The time in seconds<br />
&nbsp; &nbsp; &nbsp;*/<br />
&nbsp; &nbsp; function GetTimestampFromMySql<span class="br0">&#40;</span>$mysqlDateTime<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; list<span class="br0">&#40;</span>$date, $hours<span class="br0">&#41;</span> = split<span class="br0">&#40;</span>' ', $mysqlDateTime<span class="br0">&#41;</span>;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; list<span class="br0">&#40;</span>$year,$month,$day<span class="br0">&#41;</span> = split<span class="br0">&#40;</span>'-',$date<span class="br0">&#41;</span>;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; list<span class="br0">&#40;</span>$hour,$min,$sec<span class="br0">&#41;</span> = split<span class="br0">&#40;</span>':',$hours<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; list<span class="br0">&#40;</span>$date, $hours<span class="br0">&#41;</span> = explode<span class="br0">&#40;</span>' ', $mysqlDateTime<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; list<span class="br0">&#40;</span>$year,$month,$day<span class="br0">&#41;</span> = explode<span class="br0">&#40;</span>'-',$date<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; list<span class="br0">&#40;</span>$hour,$min,$sec<span class="br0">&#41;</span> = explode<span class="br0">&#40;</span>':',$hours<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; return mktime<span class="br0">&#40;</span>intval<span class="br0">&#40;</span>$hour<span class="br0">&#41;</span>, intval<span class="br0">&#40;</span>$min<span class="br0">&#41;</span>, intval<span class="br0">&#40;</span>$sec<span class="br0">&#41;</span>, intval<span class="br0">&#40;</span>$month<span class="br0">&#41;</span>, intval<span class="br0">&#40;</span>$day<span class="br0">&#41;</span>, intval<span class="br0">&#40;</span>$year<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/seo/854-html-stemap-generation-from-xml-part-3/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/seo/854-html-stemap-generation-from-xml-part-3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Очередная партия исправлений для Simple Tags</title>
		<link>http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 18:30:49 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[Simple Tags]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=841</guid>
		<description><![CDATA[Cannot load st_mass_tags Благодаря одному из своих читателей я узнал, что у плагина Simple Tags помимо проблем, которые я регулярно исправляю, есть еще одна: при попытке зайти в Posts » Mass edit terms » All Pages выдаётся сообщение Невозможно загрузить st_mass_tags. Об ошибке автору сообщили на форуме поддержки, но так как автор в комментариях не отметился, пришлось исправлять плагин [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Cannot load st_mass_tags</em></h2>
<p>Благодаря одному из своих <a href="http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/comment-page-1/#comment-3556">читателей</a> я узнал, что у плагина <a href="http://blog.sjinks.pro/tag/simple-tags/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Simple Tags">Simple Tags</a> помимо проблем, которые я <a href="http://blog.sjinks.pro/tag/simple-tags/">регулярно исправляю</a>, есть еще одна: при попытке зайти в Posts » Mass edit terms » All Pages выдаётся сообщение <strong>Невозможно загрузить st_mass_tags</strong>.<span id="more-841"></span></p>
<p>Об ошибке автору <a href="http://wordpress.org/support/topic/plugin-simple-tags-cannot-load-st_mass_tags?replies=1">сообщили</a> на форуме поддержки, но так как автор в комментариях не отметился, пришлось исправлять <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> самостоятельно.</p>
<p>Как оказалось, всё дело в вызове <code>add_posts_page()</code>. Дело в том, что эта функция регистрирует страницу плагина в системе только для меню «Записи» (Posts). Ссылки «Все записи», «Черновики», «Опубликованные» работают нормально, так как в их основе <code>/wp-admin/edit.php?page=st_mass_tags</code>. А ссылка «Все страницы» (<code>/wp-admin/edit.php?page=st_mass_tags&amp;post_type=page</code>) уже не работает — из-за <code>post_type=page</code>. А всё потому, что <code>edit.php?post_type=page</code> — это уже другое меню (Страницы/Pages), для которого <code>add_posts_page()</code> не работает. Для того, чтобы зарегистрировать страницу в этом меню, нужно использовать функцию <code>add_pages_page()</code>.</p>
<p>Но при использовании <code>add_pages_page()</code> ссылка на страницу появится в меню «Страницы», а это, скорее всего, не совсем то, что хотел автор (фактически, у нас бы получилось два пункта «Mass Edit Terms» — один в меню записей, другой в меню страниц). Поэтому для чистого решения проблемы нужно проэмулировать работу функции <code>add_pages_page()</code>, но не создавать запись в меню.</p>
<p>Решение получается очень простым:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p84126">
        <div class="code diff" id="p841code26">
--- simple-tags/inc/admin.orig.php&nbsp; 2010-10-24 15:31:16.000000000 +0300<br />
<span class="re4">+++ simple-tags/inc/admin.php &nbsp; <span class="nu0">2010</span>-<span class="nu0">10</span>-<span class="nu0">24</span> <span class="nu0">15</span>:<span class="nu0">59</span>:<span class="nu0">37.000000000</span> +0300</span><br />
<span class="re6">@@ -<span class="nu0">231</span>,<span class="nu0">6</span> +<span class="nu0">231</span>,<span class="nu0">17</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add_posts_page<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Simple Terms: Mass Edit Terms', 'simpletags'<span class="br0">&#41;</span>, __<span class="br0">&#40;</span>'Mass Edit Terms', 'simpletags'<span class="br0">&#41;</span>, 'simple_tags', 'st_mass_tags', array<span class="br0">&#40;</span>&amp;$this, 'pageMassEditTags'<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; add_posts_page<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Simple Terms: Auto Terms', 'simpletags'<span class="br0">&#41;</span>, __<span class="br0">&#40;</span>'Auto Terms', 'simpletags'<span class="br0">&#41;</span>, 'simple_tags', 'st_auto', array<span class="br0">&#40;</span>&amp;$this, 'pageAutoTags'<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; add_options_page<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Simple Tags: Options', 'simpletags'<span class="br0">&#41;</span>, __<span class="br0">&#40;</span>'Simple Tags', 'simpletags'<span class="br0">&#41;</span>, 'admin_simple_tags', 'st_options', array<span class="br0">&#40;</span>&amp;$this, 'pageOptions'<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="re8">+</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; global $_registered_pages, $_wp_real_parent_file;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $menu_slug &nbsp; = plugin_basename<span class="br0">&#40;</span>'st_mass_tags'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $parent_slug = plugin_basename<span class="br0">&#40;</span>'edit.php?post_type=page'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>isset<span class="br0">&#40;</span>$_wp_real_parent_file<span class="br0">&#91;</span>$parent_slug<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $parent_slug = $_wp_real_parent_file<span class="br0">&#91;</span>$parent_slug<span class="br0">&#93;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $hookname = get_plugin_page_hookname<span class="br0">&#40;</span>$menu_slug, $parent_slug<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; add_action<span class="br0">&#40;</span>$hookname, array<span class="br0">&#40;</span>&amp;$this, 'pageMassEditTags'<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $_registered_pages<span class="br0">&#91;</span>$hookname<span class="br0">&#93;</span> = true;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; /**
        </div>
    </div>
</div>

<p>Специально для тех, у кого слово <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> вызывает нехорошие мысли, я собрал исправленную версию плагина, в которой:</p>
<ul>
<li>Устранена эта самая <a href="http://blog.sjinks.pro/tag/bug/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ошибка">ошибка</a>;</li>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/">добавлена поддержка UTF-8 в автоматических ссылках</a>;</li>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/">оптимизирован вызов <code>register_uninstall_hook()</code></a>;</li>
<li>исправлена проблема с локализацией (спасибо <a href="http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/comment-page-1/#comment-3469">Analitik</a>).</li>
</ul>
<p><strong id="download"><a href="http://d.sjinks.pro/wordpress/simple-tags-1.8.2.zip" rel="nofollow">Скачать исправленный плагин Simple Tags 1.8.2</a></strong>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Исправляем Simple Tags 1.8</title>
		<link>http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 03:44:50 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[Simple Tags]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=821</guid>
		<description><![CDATA[Очередная порция патчей для Simple Tags Традиционное исправление ошибок в плагине Simple Tags. Ошибки всё те же: отсутствует поддержка многобайтовых символов (в частности, UTF-8) в автоматических ссылках; вызов register_uninstall_hook() при каждом обращении к блогу. Радует, что проблему с автоматическими ссылками меток автор всё же поправил Это то, ради чего данный плагин установлен. Традиционный патч (unified [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Очередная порция патчей для <a href="http://blog.sjinks.pro/tag/simple-tags/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Simple Tags">Simple Tags</a></em></h2>
<p><a href="http://blog.sjinks.pro/search/simpletags/">Традиционное</a> исправление ошибок в плагине Simple Tags.</p>
<p>Ошибки всё те же:</p>
<ul>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/">отсутствует поддержка многобайтовых символов (в частности, UTF-8) в автоматических ссылках</a>;</li>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/">вызов <code>register_uninstall_hook()</code> при каждом обращении к блогу</a>.</li>
</ul>
<p>Радует, что проблему с автоматическими ссылками меток автор всё же поправил <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Это то, ради чего данный <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> установлен.<span id="more-821"></span></p>
<p>Традиционный <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> (unified diff):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p82128">
        <div class="code diff" id="p821code28">
diff -uwdBrN simple-tags.orig/inc/client.php simple-tags/inc/client.php<br />
<span class="re3">--- simple-tags.orig/inc/client.php <span class="nu0">2010</span>-08-<span class="nu0">11</span> <span class="nu0">10</span>:<span class="nu0">37</span>:<span class="nu0">39.000000000</span> +0300</span><br />
<span class="re4">+++ simple-tags/inc/client.php&nbsp; <span class="nu0">2010</span>-09-<span class="nu0">13</span> 06:<span class="nu0">20</span>:<span class="nu0">40.000000000</span> +0300</span><br />
<span class="re6">@@ -<span class="nu0">157</span>,<span class="nu0">8</span> +<span class="nu0">157</span>,<span class="nu0">9</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $filtered = ''; // will filter text token by token<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = &quot;/\b&quot; . preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span> . &quot;\b/&quot;.$case;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. esc_attr<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$0&lt;/a&gt;&quot;;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $quoted = preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = '/<span class="br0">&#40;</span>\PL|\A<span class="br0">&#41;</span><span class="br0">&#40;</span>' . $quoted . '<span class="br0">&#41;</span><span class="br0">&#40;</span>\PL|\Z<span class="br0">&#41;</span>/u'.$case;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '$1&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. esc_attr<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$2&lt;/a&gt;$3&quot;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // for efficiency only tokenize if forced to do so<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span> $must_tokenize <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
diff -uwdBrN simple-tags.orig/inc/inc.functions.php simple-tags/inc/inc.functions.php<br />
<span class="re3">--- simple-tags.orig/inc/inc.functions.php&nbsp; <span class="nu0">2010</span>-08-<span class="nu0">11</span> <span class="nu0">10</span>:<span class="nu0">37</span>:<span class="nu0">39.000000000</span> +0300</span><br />
<span class="re4">+++ simple-tags/inc/inc.functions.php &nbsp; <span class="nu0">2010</span>-09-<span class="nu0">13</span> 06:<span class="nu0">16</span>:<span class="nu0">05.000000000</span> +0300</span><br />
<span class="re6">@@ -<span class="nu0">4</span>,<span class="nu0">6</span> +<span class="nu0">4</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; *<br />
&nbsp; */<br />
&nbsp;function SimpleTags_Install<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re8">+ &nbsp; register_uninstall_hook <span class="br0">&#40;</span>dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span> . '/simple-tags.php', 'SimpleTags_Uninstall' <span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; $options_from_table = get_option<span class="br0">&#40;</span> STAGS_OPTIONS_NAME <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; if <span class="br0">&#40;</span> $options_from_table == false <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $options = <span class="br0">&#40;</span>array<span class="br0">&#41;</span> include<span class="br0">&#40;</span> dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span> . '/default.options.php' <span class="br0">&#41;</span>;<br />
diff -uwdBrN simple-tags.orig/simple-tags.php simple-tags/simple-tags.php<br />
<span class="re3">--- simple-tags.orig/simple-tags.php&nbsp; &nbsp; <span class="nu0">2010</span>-08-<span class="nu0">11</span> <span class="nu0">10</span>:<span class="nu0">37</span>:<span class="nu0">38.000000000</span> +0300</span><br />
<span class="re4">+++ simple-tags/simple-tags.php <span class="nu0">2010</span>-09-<span class="nu0">13</span> 06:<span class="nu0">34</span>:<span class="nu0">39.000000000</span> +0300</span><br />
<span class="re6">@@ -<span class="nu0">3</span>,<span class="nu0">7</span> +<span class="nu0">3</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Plugin Name: Simple Tags<br />
&nbsp;Plugin URI: http://redmine.beapi.fr/projects/show/simple-tags<br />
&nbsp;Description: Extended Tagging for WordPress 3.0 ! Suggested Tags, Mass edit tags, Autocompletion, Tag Cloud Widgets, Related Posts, Related Tags, etc!<br />
<span class="re7">-Version: 1.8</span><br />
<span class="re8">+Version: 1.8.1</span><br />
&nbsp;Author: Amaury BALMER<br />
&nbsp;Author URI: http://www.herewithme.fr<br />
&nbsp;Text Domain: simpletags<br />
<span class="re6">@@ -<span class="nu0">23</span>,<span class="nu0">6</span> +<span class="nu0">23</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Contributors:<br />
&nbsp;- Kevin Drouvin <span class="br0">&#40;</span>kevin.drouvin@gmail.com - http://inside-dev.net<span class="br0">&#41;</span><br />
&nbsp;- Martin Modler <span class="br0">&#40;</span>modler@webformatik.com - http://www.webformatik.com<span class="br0">&#41;</span><br />
<span class="re8">+- Vladimir Kolesnikov <span class="br0">&#40;</span>vladimir at extrememember dot com - http://blog.sjinks.pro<span class="br0">&#41;</span></span><br />
&nbsp;<br />
&nbsp;Todo:<br />
&nbsp; &nbsp; Both :<br />
<span class="re6">@@ -<span class="nu0">60</span>,<span class="nu0">7</span> +<span class="nu0">61</span>,<span class="nu0">6</span> @@</span><br />
&nbsp;<br />
&nbsp;// Activation, uninstall<br />
&nbsp;register_activation_hook<span class="br0">&#40;</span>__FILE__, 'SimpleTags_Install' &nbsp; <span class="br0">&#41;</span>;<br />
<span class="re7">-register_uninstall_hook <span class="br0">&#40;</span>__FILE__, 'SimpleTags_Uninstall' <span class="br0">&#41;</span>;</span><br />
&nbsp;<br />
&nbsp;// Init ST<br />
&nbsp;function simple_tags_init<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        </div>
    </div>
</div>

<p>И zip-архив для тех, кто патчи не любит: <strong><a href="http://d.sjinks.pro/wordpress/simple-tags-1.8.1.zip" rel="nofollow">скачать исправленную версию плагина Simple Tags 1.8</a></strong>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Core Control: лечим некорректное отображение методов в модуле cron</title>
		<link>http://blog.sjinks.pro/wordpress/patches/815-core-control-cron-module-bugfix/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/815-core-control-cron-module-bugfix/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 16:18:52 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[Core Control]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=815</guid>
		<description><![CDATA[Патч для плагина Core Control для корректного отображения имён методов Есть один замечательный плагин для разработчиков, называется Core Control. Данный плагин позволяет контролировать различные аспекты работы WordPress: транспорт HTTP (например, расширение PHP HTTP, cURL, потоки PHP и т.п.), протоколирование HTTP-запросов, контроль обновлений ядра, плагинов и тем, способы доступа к файловой системе, а также отображение запланированных задач. Работая [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/815-core-control-cron-module-bugfix/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Патч для плагина <a href="http://blog.sjinks.pro/tag/core-control/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Core Control">Core Control</a> для корректного отображения имён методов</em></h2>
<p>Есть один замечательный <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> для разработчиков, называется <a href="http://wordpress.org/extend/plugins/core-control/">Core Control</a>. Данный плагин позволяет контролировать различные аспекты работы <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a>: транспорт HTTP (например, расширение PHP HTTP, cURL, потоки PHP и т.п.), протоколирование HTTP-запросов, контроль обновлений ядра, плагинов и тем, способы доступа к файловой системе, а также отображение запланированных задач.<span id="more-815"></span></p>
<p>Работая над одним плагином, в котором усиленно использовалось планирование заданий, мы столкнулись с проблемой, что cron-модуль плагина Core Control неправильно отображает запланированные задания, если задание представлено не обычной функцией, а методом класса:</p>
<p><a href="http://static.sjinks.info/wp-content/uploads/2010/09/cron-tasks.png"><img src="http://static.sjinks.info/wp-content/uploads/2010/09/cron-tasks-300x110.png" alt="Запланированные задания" title="Scheduled Tasks" width="300" height="110" class="alignnone size-medium wp-image-816" /></a>.</p>
<p>К счастью, исправляется довольно легко.</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p81530">
        <div class="code diff" id="p815code30">
--- core-control/modules/core_control_cron.php.orig 2010-09-10 09:20:08.000000000 -0400<br />
<span class="re4">+++ core-control/modules/core_control_cron.php&nbsp; <span class="nu0">2010</span>-09-<span class="nu0">10</span> 09:<span class="nu0">31</span>:<span class="nu0">38.000000000</span> -0400</span><br />
<span class="re6">@@ -<span class="nu0">138</span>,<span class="nu0">8</span> +<span class="nu0">138</span>,<span class="nu0">23</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span> isset<span class="br0">&#40;</span>$GLOBALS<span class="br0">&#91;</span>'wp_filter'<span class="br0">&#93;</span><span class="br0">&#91;</span>$hook<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $functions = array<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach <span class="br0">&#40;</span> <span class="br0">&#40;</span>array<span class="br0">&#41;</span>$GLOBALS<span class="br0">&#91;</span>'wp_filter'<span class="br0">&#93;</span><span class="br0">&#91;</span>$hook<span class="br0">&#93;</span> as $priority =&gt; $function <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach <span class="br0">&#40;</span> $function as $hook_details <span class="br0">&#41;</span></span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $functions<span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="br0">&#40;</span>isset<span class="br0">&#40;</span>$hook_details<span class="br0">&#91;</span>'class'<span class="br0">&#93;</span><span class="br0">&#41;</span> ? $hook_details<span class="br0">&#91;</span>'class'<span class="br0">&#93;</span> . '::' : ''<span class="br0">&#41;</span> . $hook_details<span class="br0">&#91;</span>'function'<span class="br0">&#93;</span> . '<span class="br0">&#40;</span><span class="br0">&#41;</span>';</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach <span class="br0">&#40;</span> $function as $hook_details <span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $hook = '';</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $f &nbsp; &nbsp;= $hook_details<span class="br0">&#91;</span>'function'<span class="br0">&#93;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>is_array<span class="br0">&#40;</span>$f<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>is_object<span class="br0">&#40;</span>$f<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $hook = get_class<span class="br0">&#40;</span>$f<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $hook = $f<span class="br0">&#91;</span>0<span class="br0">&#93;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $hook .= '::' . $f<span class="br0">&#91;</span>1<span class="br0">&#93;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $hook = $f;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $functions<span class="br0">&#91;</span><span class="br0">&#93;</span> = $hook . '<span class="br0">&#40;</span><span class="br0">&#41;</span>';</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo '&lt;br/&gt;&lt;strong&gt;Hooked functions:&lt;/strong&gt; ' . implode<span class="br0">&#40;</span>', ', $functions<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/815-core-control-cron-module-bugfix/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/815-core-control-cron-module-bugfix/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

