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

    +166

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <title>Сайт Управления безопасности информационных технологий</title>
      </head>
      <body>
    <?php
    echo "You will be redirected after 5 seconds";
    sleep(5);
    header("Location: https://itsdhub");
    ?>
      </body>
    </html>

    Найдено в fido7.ru.php.
    Хотел сделать с помощью PHP редирект с таймаутом.

    Считал, что сначала пользователь увидит сообщение "You will be...", а через
    пять секунд сработает header. Hо получается так, что сообщение в браузере не
    выводится, а просто идет пятисекундная задержка с последующим срабатыванием
    header. Почему? Что я не так сделал?

    Запостил: 0__1, 04 Марта 2011

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

    • О_о любопытно, особенно от будущей ошибки, ведь хеадер нельзя устанавливать после эхо)
      Ответить
    • Потому что PHP кеширует вывод в браузер, и на момент выполнения sleep() в апстрим еще ничего не отправлено. См. http://ru.php.net/flush

      Кстати, если flush вставить, то работать это перестанет, потому что заголовки HTTP идут до тела. То есть так, как сейчас, из-за кеширования вывода заголовок втыкается до тела и браузер сразу же после его получения (даже не глядя на тело) делает перенаправление, а после втыкания flush() PHP не сможет добавить заголовок, и редирект не сработает вообще.

      Выкиньте к чертям весь код и оставьте HTML с тегом <meta http-equiv="refresh" content="5;URL=https://whatever">
      Ответить
      • Подпись к посту читаем, ага.
        > Найдено в fido7.ru.php.
        Ответить
      • >Выкиньте к чертям весь код и оставьте HTML с тегом <meta http-equiv="refresh"

        Мета рефреш нежелательно использовать по спецификации уже больше года.
        Ответить
        • Ваш вариант без JS?
          Ответить
        • всегда было нежелательно
          Ответить
        • по какой именно "спецификации"?
          Ответить
          • >Use of meta refresh is discouraged by the World Wide Web Consortium (W3C), since unexpected refresh can disorient users
            http://en.wikipedia.org/wiki/Meta_refresh
            Ответить
            • >> спецификации
              > wikipedia.org
              I LOLD
              Ответить
              • >by the World Wide Web Consortium (W3C)
                >W3C
                Не перевирайте.
                Ответить
                • а почему копипаста из педивикии тогда?
                  Ответить
                  • Потому что лень было шерстить.
                    Вот вам линк на W3C.
                    http://www.w3.org/TR/WCAG10-CORE-TECHS/#auto-page-refresh
                    Ответить
                    • читать тоже было лень?
                      > уже больше года
                      > 6 November 2000
                      проще было согласиться выше, rly :-P
                      Ответить
            • "спецификация" - не более чем рекомендация w3c, а в этих рекомендациях "deprecated" не означает "нельзя"

              и вообще, в спецификациях много ерунды нестыковок, так что не стоит считать их манной небесной.
              Ответить
    • Web-копия оригинала:
      http://groups.google.com/group/fido7.ru.php/browse_thread/thread/869a752612e424ad?pli=1
      Ответить
      • черт, 2009 год, а старое доброе фидо всё еще радует...
        надо бы RU.HACKER выписать...
        Ответить
        • Да, там не очень оживлённо, с сожалению - http://pix.am/LCuO.png
          В javascript и html.profy немного оживлённее, и то, за счёт МицголаТхеВебмасты.
          Ответить
        • в ру.хакер уже давно глухо.
          а когда-то была веселая эха...
          Ответить

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