1. PHP / Говнокод #7833

    +164

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    ob_start();
    require($_SERVER['DOCUMENT_ROOT'].'/bitrix/header.php');
    CModule::IncludeModule('st1234hole');
     global $USER;
    
    
    ob_end_clean();
    ob_end_clean();
    ob_end_clean();
    ob_end_clean();
    ob_end_clean();

    А php ведь у нас глухой. Дак ещё и битрикс - говно в говне.
    P.s.: росЯма http://hg.rosyama.ru/file/f84a8ef2623a/api/api.php .

    Запостил: manyrus, 11 Сентября 2011

    Комментарии (17) RSS

    • почему глухой? просто нужно гарантированно выкопаться из вложенных буферов. говно конечно, но уж как есть.
      Ответить
      • А можно пример вложенных буферов. Просто на оф сайте написано - "Clean (erase) the output buffer and turn off output buffering"
        Ответить
        • можно.
          например, полезная функция записи в лог всего в развернутом виде:
          function log() {
          $arg_list = func_get_args();
          for ($i = 0; $i < $numargs; $i++) {
          ob_start();
          var_dump($arg_list[$i]);
          $v=ob_get_contents();
          error_log($v,E_USER_NOTICE);
          ob_end();
          }
          }

          и она может вызываться так:
          ob_start();
          echo('a');
          $a=0;
          log($a);
          ob_end_flush();

          и всё равно на экран выведется а, а в лог - (int) 0;
          Ответить
        • на офсайте написано и это:
          "Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active. Just make sure that you call ob_end_flush() the appropriate number of times. If multiple output callback functions are active, output is being filtered sequentially through each of them in nesting order."
          http://php.net/manual/ru/function.ob-start.php
          Ответить
          • Тьфу, пропустил при чтении, извиняюсь, спс за пример кода.
            Ответить
            • вообще почитайте внимательно, зная такие вещи, можно и компрессию\шифрование на стороне сервера включить, и перехват фатальных ошибок, и всякое другое интересное.

              это как,
              каждый крутой спектрумист должен написать:
              1. скроллинг экрана вверх-вниз-влево-вправо попиксельно
              2. нестандартный загрузчик с ленты с выводом разноцветных полос на бордюр
              3. перехватчик системных ошибок TR-DOS
              3. драйвер нестандартной печати: 4х8, 5х8, 6х8, 7х8
              4. оконный интерфейс, хотя бы в псевдографике
              5. мышиный курсор, управляемый с клавиатуры или джойстика :)
              6. чтобы при выключении компа появлялась надпись "RESET" :D
              7. музыкальное сопровождение на прерываниях 2ого типа ;]
              Ответить
              • > шифрование
                и снова оказался изобретен секурный HTML?
                Ответить
                • слющай, дорогой, зачем HTML? мой дом php -- твой php, щифруй что захочешь,да!?
                  Ответить
                  • суровые челябинские программисты пишут ОС на PHP с PHP-GTK

                    а также индусы, китайцы и т.д.
                    Ответить
    • вообще, более правильный, но тоже говняный способ ничего не вывести на экран:
      while(@ob_end_clean());
      Ответить
      • Вообще более правильный и не говяный способ - считать сколько раз был создан буфер и столько раз ставить ob_end_clean();
        Ответить
    • Буфер вывода очищен? Нет, правда? Правда-правда? Точно? Не ошибаетесь? А вы уверены?
      Ответить
    • ob_end_clean(); // да
      ob_end_clean(); // сдохни
      ob_end_clean(); // ты
      ob_end_clean(); // гребаный
      ob_end_clean(); // буффер
      Ответить
    • Тут не битрикс виноват. Если при определенных обстоятельствах уже буферизированный контент нужно убрать (а битрикс всегда буферизирует вывод из за необходимости в поддержке отложенных функций) нужно вызвать $APPLICATION->RestartBuffer()
      Кроме того можно было вместо хедера подключить init-файл главного модуля (prolog_before.php), тогда буфер вывода вообще трогать не нужно
      Ответить
      • вызвать $APPLICATION->RestartBuffer() ---- в bitrix эта функция в админке не РАБОТАЕТ !! ((
        Ответить

    Добавить комментарий