<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0'>
	<channel>
		<title>cotonti.com : Консолидация ресурсов</title>
		<link>https://www.cotonti.com</link>
		<description>Останні повідомлення в темі</description>
		<generator>Cotonti</generator>
		<language>en</language>
		<pubDate>Sun, 12 Apr 2026 01:46:24 -0000</pubDate>

		<item>
			<title>Macik</title>
			<description><![CDATA[<p>
	Проверил свежую версию. </p>
<p>
	Еще не все чисто (точнее говоря все еще не работает под windows ):</p>
<p>
	при первом запуске (с включенной консолидацией) на теме HTMLkickstart вылезло вот такое: <a href="http://www.cotonti.com/datas/users/consolidate01_2012-06-01_23-47_title_of_your_site_461.png">илл.</a>  С этим пока не разбирался.</p>
<p>
	А вот с url ресурсами такая картина: <a href="http://www.cotonti.com/datas/users/consolidate_02_2012-06-01_23-51_title_of_your_site_461.jpg">илл.</a> - туда попадает полный (файловый) путь, плюс ко всему он там «изувечен».</p>
<p>
	залез в код: </p>
<p>
	Видимо дело вот в этой строке:<br /><code class="php plain" style="margin:0px;padding:5px 8px;border:0px;font-size:13px;vertical-align:baseline;background-image:url(&quot;http://www.cotonti.com/thms/cotcom/img/code_bg.png&quot;);background-color:rgb(221,221,221);font-family:monospace, sans-serif;color:rgb(34,34,34);line-height:20px;text-align:left;background-position:50% 0%;">4018: $filename = str_replace($current_path, '', realpath($filename));</code></p>
<p>
	здесь str_replace не отрабатывает т.к. в <span style="background-color:rgb(221,221,221);color:rgb(34,34,34);font-family:monospace, sans-serif;font-size:13px;line-height:20px;text-align:left;">$current_path</span> у нас пусть с «правильными» (замененными ранее) слэшами, а <span style="background-color:rgb(221,221,221);color:rgb(34,34,34);font-family:monospace, sans-serif;font-size:13px;line-height:20px;text-align:left;">realpath</span> нам возвращает windows-style «xxx\xxx\».  Таким образом в <span style="background-color:rgb(221,221,221);color:rgb(34,34,34);font-family:monospace, sans-serif;font-size:13px;line-height:20px;text-align:left;">$filename</span> оказывается полный файловый путь с обратными слэшами.</p>
<p>
	 </p>
<p><strong>Добавлено 10 минут спустя:</strong></p><p>
	Поковырял ошибку с «@import» </p>
<p>
	надо править регулярное выражение в 4004 строке:</p>
<p>
	<code class="php plain" style="margin:0px;padding:5px 8px;border:0px;font-size:13px;vertical-align:baseline;background-image:url(&quot;http://www.cotonti.com/thms/cotcom/img/code_bg.png&quot;);background-color:rgb(221,221,221);font-family:monospace, sans-serif;color:rgb(34,34,34);line-height:20px;text-align:left;background-position:50% 0%;">preg_match_all('#@import\s+url\((\'|")?(.+?\.css)\1?\);#i', …</code></p>
<p>
	оно жадное и захватывает сразу 2 строки из файла themes/kickstart/style.css и получается:</p>
<p>
	<span style="color:rgb(34,34,34);font-family:monospace, sans-serif;font-size:13px;line-height:20px;text-align:left;background-color:rgb(221,221,221);">$m[0] = '</span><span style="background-color:rgb(221,221,221);color:rgb(34,34,34);font-family:monospace, sans-serif;font-size:13px;line-height:20px;text-align:left;">@import url(http://fonts.googleapis.com/css?family=Arimo:400,700);@import url(css/modalbox.css);'</span></p>
<p>
	что и вызывает ошибку с первого скриншота.</p>
]]></description>
			<pubDate>Пт, 01 Чер 2012 21:22:05 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/ua/forums?m=posts&q=6929&d=0#post34506]]></link>
		</item>
		<item>
			<title>Trustmaster</title>
			<description><![CDATA[<p>
	Спасибо за исследование! Я бы продолжал безрезультатно пожимать плечами, т.к. Windows для разработки и тестирования не использую и не догадался бы, что дело в слешах.</p>
<p>
	В самое ближайшее время исправлю слеши на прямые и уберу слеш в начале.</p>
]]></description>
			<pubDate>Thu, 17 Травень 2012 16:43:45 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/ua/forums?m=posts&q=6929&d=0#post34345]]></link>
		</item>
		<item>
			<title>Macik</title>
			<description><![CDATA[<p>
	Установил последнее исправление <a href="https://github.com/Cotonti/Cotonti/issues/914" rel="nofollow">№914</a></p>
<p>
	Не помогло. Включил отладку и залез в код. Вот, что выясняется:</p>
<pre class="brush:php;wrap-lines:false;first-line:4001;highlight: [4005,4006];">
if (preg_match_all('#\burl\((\'|")?([^\)"\']+)\1?\)#i', $file_code, $mt, PREG_SET_ORDER))
{
        foreach ($mt as $m)
	{
		$filename = empty($relative_path) ? $m[2] : $relative_path . '/' . $m[2];
		$filename = str_replace($current_path, '', realpath($filename));
		if (!$filename)
		{
			continue;
		}
		if ($filename[0] === '/')
		{
			$filename = mb_substr($filename, 1);
		}
		$file_code = str_replace($m[0], 'url("' . $filename . '")', $file_code);
	}
}

</pre>
<p>
	- проблема не в регулярном выражении, оно <strong>отрабатывает нормально</strong> (по крайней мере с последними правками).<br />
	- проблема в логике строк 4005-4007, т.к. на выходе имеем пустой <code class="php plain">$filename</code> и как следствие выход из цикла без замены кода в CSS.</p>
<p>
	Теперь подробнее...</p>
<p>
	В итоге на одном (для примера) из шагов цикла имеем (строки 4005-4007) следующие входные данные:</p>
<p>
	<code class="php plain">$path = 'plugins/ratings/tpl/ratings.css';</code><br /><code class="php plain">$relative_path = '\plugins\ratings\tpl';</code><br /><code class="php plain">$m[2] = '../../../images/icons/default/delete.png';</code><br />
	т.е. учитывая путь в <code class="php plain">$m[2]</code> мы на выходе должны иметь строку <code class="php plain">'images/icons/default/delete.png'</code>, однако в строке 4006 происходит обнуление <code class="php plain">$filename</code> (дальше естественно алгоритм уже «правильно» не работает).</p>
<p>
	Стал копать дальше пришел к выводу, что проблема в функции <strong><code class="php plain">realpath()</code></strong>, для которой (по видимому) очень важно в каком формате передается путь. Т.к. у меня тестовый сервер работает под Windows, то часть путей (традиционно) имеют формат с обратным слэшем (<code class="php plain">"C:\dvp\VertrigoServ\www\sites\cot98\plugins\ratings\tpl"</code>).</p>
<p>
	В моем примере (в строке 4006) получается <strong><code class="php plain">realpath('\plugins\ratings\tpl/../../../images/icons/default/delete.png')</code></strong> возвращает <strong><code class="php plain">false</code></strong>.</p>
<p>
	Поэкпериментировал:</p>
<p>
	<strong><code class="php plain">realpath('\plugins\ratings\tpl/../../../images/icons/default/delete.png') == false</code></strong><br /><br /><strong><code class="php plain">realpath('plugins\ratings\tpl/../../../images/icons/default/delete.png') == false</code></strong></p>
<p>
	<strong><code class="php plain">realpath('/plugins/ratings/tpl/../../../images/icons/default/delete.png') == false</code></strong></p>
<p>
	и <strong>только</strong> когда <strong>все слэши идут в одном формате и без открывающего слеша</strong> работает правильно:</p>
<p>
	<strong><code class="php plain">realpath('plugins/ratings/tpl/../../../images/icons/default/delete.png') == 'C:\dvp\VertrigoServ\www\sites\cot98\images\icons\default\delete.png'</code></strong></p>
<p>
	 </p>
<p>
	Так что, как решение проблемы надо проверять (и отрезать) ведущий слэш в <code class="php plain">$filename</code> и конвертировать слэши в «прямые» перед передачей в <strong><code class="php plain">realpath()</code></strong>.</p>
<p>
	<strong>Добавлено 3 минуты спустя:</strong></p>
<p>
	Да, и в <code class="php plain">$current_path</code> слеши тоже придется заменить для единообразия и правильной работы <code class="php plain">str_replace();</code> в строке 4006.</p>
]]></description>
			<pubDate>Thu, 17 Травень 2012 12:24:42 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/ua/forums?m=posts&q=6929&d=0#post34340]]></link>
		</item>
	</channel>
</rss>