Подскажите пожалуйста по Smarty

deepslam

Новичок
Подскажите пожалуйста по Smarty

Добрый день!

Сайт использует шаблонизатор Smarty , после переноса на хостинг с PHP 5.2.12 в админке и в шаблонах сайта , появились непонятные коды типа 2015 0 , 44d и т.п.
Похоже на какие то контрольные шифрованные суммы.
Облазил весь движок , но решения не нашел.

Может быть кто то сталкивался с этим, подскажите пожалуйста как это убрать?

Спасибо!
 

deepslam

Новичок
Проще всего наверное будет показать на скриншоте:



Коды вставляются как в тело шаблона (там подключается модуль у меня , который идет отдельным файлом, так и до шаблона и после)

На старом хостинге такого не было ((( Со смарти уже не первый год работаю , но такое впервые вижу.

-~{}~ 18.03.10 15:05:

Содержание файлов шаблонов не менялось в том то и дело , т.е. это не вирус
 

deepslam

Новичок
Движок состоит из модулей и главного файла шаблона, модули компилируются в переменную module (к примеру) с помощью smarty->fetch и затем вставляются в шаблоне путем {$module} , шаблон показывается командой $smarty->display , в общем все как обычно.

В шаблонах не прописано этих кодов , но при компилировании они откуда то стали появляться , что это и откуда никак не пойму, облазил уже весь движок свой, смарти на свежую версию с сайта менял , не помогает.

Про chunked encoding сейчас погуглю.
Спросил здесь , т.к. мало ли кто то сталкивался уже , вообще в крайних случаях что либо спрашиваю , всегда сам стараюсь допереть до решения.
 

Beavis

Banned
deepslam
вы смотрели скомпилированные шаблоны? (там где только php-код)
 

deepslam

Новичок
Да , в них ничего такого нет , по крайней мере в тех местах , где выведены эти цифры , в шаблонах пусто. Точнее идет конец условия , либо цикла.
Могу шаблоны скомпилированные и такие выложить сюда.

Вот например убираю из клиенсткого шаблона этот код:

{foreach key=key item=prod from=$products}

<div class="product_item">
<div class="product_caption">
<a href="{$prod.url}">{$prod.caption}</a>
</div>
<div class="product_body">
<div class="product_picture"><table style="width:186px;height:219px;" cellpadding="0" cellspacing="0"><tr><td align="center" valign="middle"><a href="{$prod.url}">{if $prod.middle_picture}<img src="{$config.images.product_middlehttp}{$prod.middle_picture}" border="0" alt="{$prod.caption}">{else}<img src="{$config.images.product_middlehttp}no_photo.jpg" border="0" alt="{$prod.caption}">{/if}</a></td></tr></table></div>
<div class="product_description">
<table style="width:188px;height:29px;" cellpadding="0" cellspacing="0">
<tr>
<td width="50%" align="left" valign="middle"><a href="{$prod.add_basket}"><img src="/img/in_basket.jpg" border="0"></a></td>
<td width="50%" align="right" valign="middle" nowrap>Цена: {$prod.price} руб.</td>
</tr>
</table>
</div>
</div>
</div>

{/foreach}
И цифры пропадают!

Пробовал поочередно убирать , чтобы выявить из за чего , в итоге получилось , что если хотя бы какой то элемент {$prod} выводится, то цифры есть

-~{}~ 18.03.10 15:27:

Код в шаблоне получается такой:

PHP:
			<?php if ($this->_tpl_vars['products']): ?>		
					<?php $_from = $this->_tpl_vars['products']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)):
    foreach ($_from as $this->_tpl_vars['key'] => $this->_tpl_vars['prod']):
?>

				<div class="product_item">
					<div class="product_caption">
						<a href="<?php echo $this->_tpl_vars['prod']['url']; ?>
"><?php echo $this->_tpl_vars['prod']['caption']; ?>
</a>
					</div>
					<div class="product_body">
						<div class="product_picture"><table style="width:186px;height:219px;" cellpadding="0" cellspacing="0"><tr><td align="center" valign="middle"><a href="<?php echo $this->_tpl_vars['prod']['url']; ?>
"><?php if ($this->_tpl_vars['prod']['middle_picture']): ?><img src="<?php echo $this->_tpl_vars['config']['images']['product_middlehttp']; ?>
<?php echo $this->_tpl_vars['prod']['middle_picture']; ?>
" border="0" alt="<?php echo $this->_tpl_vars['prod']['caption']; ?>
"><?php else: ?><img src="<?php echo $this->_tpl_vars['config']['images']['product_middlehttp']; ?>
no_photo.jpg" border="0" alt="<?php echo $this->_tpl_vars['prod']['caption']; ?>
"><?php endif; ?></a></td></tr></table></div>
						<div class="product_description">
							<table style="width:188px;height:29px;" cellpadding="0" cellspacing="0">
								<tr>
									<td width="50%" align="left" valign="middle"><a href="<?php echo $this->_tpl_vars['prod']['add_basket']; ?>
"><img src="/img/in_basket.jpg" border="0"></a></td>
									<td width="50%" align="right" valign="middle" nowrap>Цена: <?php echo $this->_tpl_vars['prod']['price']; ?>
 руб.</td>
								</tr>
							</table>
						</div>
					</div>
				</div>

					<?php endforeach; endif; unset($_from); ?>			
			<?php endif; ?>
			<?php endif; ?>
 

Вурдалак

Продвинутый новичок
deepslam
Попробуй с помощью ob_start() проверить (запись куда-нибудь в файл) содержимое сгенерированной страницы. Там есть «циферки» или нет?
 

Single

пилот капсулы
где то уже проскакивал этот вопрос.
помнится в результате пришли к выводу что проблема в не совсем правильных настройках веб сервера.
 

deepslam

Новичок
Но дело в том , что это не во всех шаблонах и если я убираю вывод товаров , то все ок , просто жесть какая то (((
Хостинг - MCHost , PHP 5.2.12
 

fixxxer

К.О.
Партнер клуба
Ищи в коде header('HTTP/1.1 ...'), меняй на HTTP/1.0. (А еще лучше - на то что в PROTOCOL_VERSION или как оно там называется - смотри phpinfo - но если данных нет подразумевай 1.0).
 

Вурдалак

Продвинутый новичок
Во-первых, сервер не должен ничего кодировать, если у клиента HTTP/1.0.

Во-вторых, у него эти «циферки» добавляются в самом скрипте, так что тут что-то не так.

-~{}~ 18.03.10 19:24:

Отладка нужна, короче. Другого ничего не посоветуешь.
 

fixxxer

К.О.
Партнер клуба
если не веришь на слово - возьми nginx проксирующий на апач с mod_php и отдай скриптом http/1.1

получишь эту картинку 100%
 

Вурдалак

Продвинутый новичок
Получу где? У автора эта «картина» уже в самом скрипте:
Автор оригинала: deepslam
В ob_start() также есть цифры ((
Правда может он не совсем так понял, что я от него хотел:
PHP:
function callback($buffer)
{
	file_put_contents("output.html", $buffer);

	return $buffer;
}

ob_start("callback");

# Код

ob_end_flush();
 

fixxxer

К.О.
Партнер клуба
Автор либо гонит, либо делает где-то там http-подзапрос.
 

deepslam

Новичок
Автор оригинала: fixxxer
Автор либо гонит, либо делает где-то там http-подзапрос.
Ничего я не гоню, самого сроки уже поджимают очень сильно , а тут эта жесть , с header завтра посмотрю все, спасибо большое за подсказки!
У меня на втором сайте тоже на mchost тоже самое, видимо ошибка где то в движке и данная версия php таким образом обрабатывает ее.

-~{}~ 19.03.10 00:31:

Автор оригинала: fixxxer
Ищи в коде header('HTTP/1.1 ...'), меняй на HTTP/1.0. (А еще лучше - на то что в PROTOCOL_VERSION или как оно там называется - смотри phpinfo - но если данных нет подразумевай 1.0).
Парни, вы ГЕНИИ!!!
Спасибо огромное всем и отдельно ОГРОМНЕЙШЕЕ спасибо fixxxer , поменял header("HTTP/1.1 200 OK"); на header("HTTP/1.0 200 OK"); и все заработало!!!
Я бы сам никогда в жизни не додумался наверное )

Респектище!!!
 

fixxxer

К.О.
Партнер клуба
Правильнее все же отвечать по тому протоколу, по которому запросили:

PHP:
$proto = !empty($_SERVER['SERVER_PROTOCOL'])
    ? $_SERVER['SERVER_PROTOCOL']
    : 'HTTP/1.0';
header("$proto 200 OK");
 
Сверху