За последние 24 часа нас посетили 51315 программистов и 1758 роботов. Сейчас ищут 1160 программистов ...

Перехват вызова функций

Тема в разделе "Вопросы от блондинок", создана пользователем DZEN, 9 июн 2009.

  1. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Есть ли такая возможность?
    Требуеться сделать элементарную вещь - на вызов 'echo' проверять текст, если первые буквы '<html', то перед выводом отправить заголовки
    PHP:
    1. <?php header("Content-type: text/html; charset=utf8"); ?>
    если '<?xml'
    PHP:
    1. <?php header("Content-type: application/xml; charset=utf8"); ?>
    и т.д. Знаю что выглядит глупо :)...
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    PHP:
    1. <?php
    2. // code
    3. $contents = ob_get_clean();
    4. if (substr($contents, 0, 5) === '<?xml') {
    5.     header("Content-type: application/xml; charset=utf8");
    6. } else {
    7.     header("Content-type: text/html; charset=utf8");
    8. }
    9. echo $contents;
    10.  
     
  3. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Премного благодарен. А есть ли возможность выполнять перехват функций вообще? Это было бы еще более полезным для меня.
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    DZEN
    А если первым идёт <!DOCTYPE ? :)
     
  5. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Такого не будет :).
    На крайний случай всегда можно искать регулярным выражением '//DTD XHTML 1.0 Transitional', или другое...
    Код почти мой, так что проблем не будет.
     
  6. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    DZEN
    Т.е. хуки - нет, такого нет. Можно это реализовать через классы с помощью магического метода __call, но вряд-ли это вам нужно.

    Правда есть ещё один очень зверский и неправильный вариант - http://lv.php.net/manual/en/book.runkit.php - но готовтесь к тому, что опкод кешеры возможно не будут работать, а так же скорее всего производительность упадёт. Переопределяете вам нужные функции своими и делайте что хотите :)
     
  7. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Через классы смысла нет - и так могу написать, что в классе происходит. Про runkit прочитал. Лучше сервер на Windows Server 2003 :).