Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ob_end_clean(), невозможно закрыть буфер
 
 автор: FaStY   (14.08.2008 в 11:05)   письмо автору
 
 

У меня вызываеться класс Core, который extends Tempalte(класс шаблонизатоор).

<?php
class Core extends Template {

    function 
display_template() {
        
$this->assign 'name''Денис' );
        
$this->ShowTempate 'main.tpl');
    }
}
?>

Функцция ShowTempate загружает мой шаблон.

<?php
class Template {
        function 
ShowTempate($Tmpl) {
                
ob_start ();
                
//Подключаем шаблон
                
include ($Tmpl);
                
//Получаем сгенерированный текст
                //$text = ob_get_contents ();
                
ob_end_clean ();
                return 
$text;
                
    }
}
?>

Вот когда у меня доходит до функции display_template(), у меня выкидывает след ошибку
Notice: ob_end_clean() [ref.outcontrol]: failed to delete buffer. No buffer to delete. in (там, где лежит класс) on line (где ob_end_clean (); ) 

Подскажите в чем может быть проблама.
Заранее всем спасибо!

  Ответить  
 
 автор: mihdan   (14.08.2008 в 11:41)   письмо автору
 
   для: FaStY   (14.08.2008 в 11:05)
 

Зачем закомментили
<?
//$text = ob_get_contents (); 
?>

  Ответить  
 
 автор: FaStY   (14.08.2008 в 12:10)   письмо автору
 
   для: mihdan   (14.08.2008 в 11:41)
 

случайно.это я при написании. а вообще это все не закаменчено

  Ответить  
 
 автор: Axxil   (14.08.2008 в 12:24)   письмо автору
 
   для: FaStY   (14.08.2008 в 12:10)
 

Видимо у вас там нагромождение буферов получилось.
В принципе это предупреждение (notice), так что можно просто его подавить @ob_end_clean ();

А если эту функцию ob_end_clean(); вообще убрать, что получится?

  Ответить  
 
 автор: FaStY   (14.08.2008 в 12:34)   письмо автору
 
   для: Axxil   (14.08.2008 в 12:24)
 

тогда ошибка убираеться. может вообще убрать? это замедлит работу скрипта?

  Ответить  
 
 автор: Axxil   (14.08.2008 в 12:38)   письмо автору
 
   для: FaStY   (14.08.2008 в 12:34)
 

> тогда ошибка убираеться. может вообще убрать?
угу
> это замедлит работу скрипта?
да нет конечно :)
если у вас скрипт пишет что нечего чистить, то и не зачем тогда чистить :)

  Ответить  
 
 автор: FaStY   (14.08.2008 в 14:21)   письмо автору
 
   для: Axxil   (14.08.2008 в 12:38)
 

но дело в том, что когда я этот shoTempalte вызываю на из класса, а из индекса- у меня все отлично работает и не выводит ошибки.
Так если нечего чистить- получаеться и ничего в буфере нет и нет от него толка?)

  Ответить  
 
 автор: Axxil   (14.08.2008 в 14:26)   письмо автору
 
   для: FaStY   (14.08.2008 в 14:21)
 

покажите как вы эти методы вызываете в скрипте.

  Ответить  
 
 автор: FaStY   (14.08.2008 в 14:45)   письмо автору
 
   для: Axxil   (14.08.2008 в 14:26)
 

$t = new Template ( );
$text = $t->ShowTempalte ( 'main.tpl' );

Вот так

  Ответить  
 
 автор: Axxil   (14.08.2008 в 15:46)   письмо автору
 
   для: FaStY   (14.08.2008 в 14:45)
 

Точно так?

class Core extends Template {

    function display_template() {
        $this->assign ( 'name', 'Денис' );
        $this->ShowTempate ( 'main.tpl');
    }


а вот это тогда зачем?

И этот код:

class Template {
        function ShowTemplate($Tmpl) {
                ob_start ();
                //Подключаем шаблон
                include ($Tmpl);
                //Получаем сгенерированный текст
                $text = ob_get_contents ();
                ob_end_clean ();
                return $text;

    }
}

$t = new Template( );
echo $t->ShowTemplate( 'test.html' );


у меня без проблем выполняется.

  Ответить  
 
 автор: FaStY   (14.08.2008 в 15:54)   письмо автору
 
   для: Axxil   (14.08.2008 в 15:46)
 

первый код должен выводить. т.е. это то, что я хочу сделать, что бы работало:
class Core extends Template {

    function display_template() {
        $this->assign ( 'name', 'Денис' );
        $this->ShowTempate ( 'main.tpl');
    }

а это просто для теста:
$t = new Template( );
echo $t->ShowTemplate( 'test.html' );

  Ответить  
 
 автор: Axxil   (14.08.2008 в 16:20)   письмо автору
 
   для: FaStY   (14.08.2008 в 15:54)
 

блин :)

ну и покажите код в том виде в котором вы хотите чтобы он работал. Нафига тесты тут нужны? Они и так прекрасно работают.

PS Вообще на форуме замечено две тенденции.
1. Постим сразу 1000 строк кода и просим найти ошибку
2. Постим "примеры", "тесты", "типа того, но у меня по другому" и просим найти ошибку.

Ребяты, давайте будем нормально формулировать вопросы, максимально упрощая жизнь помогающим. Глядишь, во время формулировки ответ сам придёт.

  Ответить  
 
 автор: FaStY   (14.08.2008 в 16:59)   письмо автору
 
   для: Axxil   (14.08.2008 в 16:20)
 

хех... проблема решена. заменил ob_end_clean (); на $text = ob_get_clean (); и все работает)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования