За последние 24 часа нас посетили 16249 программистов и 1526 роботов. Сейчас ищут 1568 программистов ...

ob_start(), ob_get_clean()

Тема в разделе "PHP для новичков", создана пользователем SamyRed, 14 дек 2021.

  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Здравствуйте. Есть класс и два метода в нём:
    PHP:
    1. <?php
    2. class MakeAjax {
    3.    
    4.     public function makeStorageAddMaterialForm() {
    5.         $filename = ROOT . '/views/ajax/storageAddMaterial.php';
    6.         $return = array();
    7.         if(file_exists($filename)) {
    8.             ob_start();
    9.             include $filename;
    10.             $ob = ob_get_clean();
    11.             $return['html'] = $ob;
    12.         } else {
    13.            
    14.             $return['html'] = '';
    15.             $return['alerts'][] = '{PAGE_NOT_FOUND}';
    16.         }
    17.            
    18.         return json_encode($return);
    19.     }
    20.    
    21.     public function makeStorageAddStorageForm() {
    22.         $filename = ROOT . '/views/ajax/storageAddStorage.php';
    23.         $return = array();
    24.         if(file_exists($filename)) {
    25.             ob_start();
    26.             include $filename;
    27.             $ob = ob_get_clean();
    28.             $return['html'] = $ob;
    29.         } else {
    30.            
    31.             $return['html'] = '';
    32.             $return['alerts'][] = '{PAGE_NOT_FOUND}';
    33.         }
    34.        
    35.         return json_encode($return);
    36.     }
    37.  
    38.     ...
    39. }
    Как видите, первые два метода абсолютно идентичны, за исключением пути к файлу.
    Но при вызове первого возвращается как и нужно json строка с HTML строкой в поле 'html', а при вызове второй - возвращается просто HTML строка, без обёртки JSON. Я подозреваю что что-то с буфером недопонял. Если закомментировать строку:
    PHP:
    1. include $filename;
    во втором методе, возвращается JSON строка с пустым полем HTML:
    Код (Javascript):
    1. {"html":""}
    --- Добавлено ---В общем, проблема была в ошибке в подключаемом файле. Но всё равно не понял почему содержимое файла не записалось в нужный элемент массива, а вместо этого добавилось функцией include