PplWare Mobile

PHP é à quinta-feira – Redireccionar com ou sem espera

                                    
                                

Este artigo tem mais de um ano


Autor: Pplware


  1. Bónus says:

    Por vezes a função header não funciona, quando não é colocada no inicio do código php.
    Qual a solução mais indicada para contornar esse problema?

    • DreamWave says:

      @Bónus

      Costumo utilizar esta funcção para “contornar” esse problema:

      function redirect($url){
      if (!headers_sent()){ /*If headers not sent yet… then do php redirect*/
      if(@header(‘Location: ‘.$url)){
      exit;
      }
      }else{ /*If headers are sent… do javascript redirect… if java disabled, do html redirect. In last case exit avoid further code execution*/
      echo ”;
      echo ‘window.location.href=”‘.$url.'”;’;
      echo ”;
      echo ”;
      echo ”;
      echo ”;
      exit;
      }
      }

      Mesmo que já saibas o porquê, deixo uma pequena explicação:
      O problema que relatas deve-se a que já tenham sido enviados headers antes da chamada á funcção header() do php, seja o print de um caracter visivel ou não (ex. um expaço antes de <?php … )

      Utilizando ob_start() e ob_end_flush() pode-se chegar a uma solução para isso, mas pode não ser sempre aplicável.

      Cumpz.

      • DreamWave says:

        Bem parece que o blog corta as tags :S

        Fica aqui um print da função

        http://tinypic.com/r/2vx2kas/5

        [syntax highlight e tudo 😀 ]

      • Serve para contornar o problema sim senhor, mas o ideal é colocar a função “bem colocada” para não teres de te preocupar com isso 😉

        • Bónus says:

          Pois, mas muitas vezes necessito colocar o header depois de muitas linhas de código.
          Quando não dá com o header, costumo fazer o redirect em html:
          echo ”;
          Mas não impede que o código continue a ser lido e o redirect não fica imediato como com o header.

        • DreamWave says:

          Sem dúvida, nada como fazer as coisas como deve ser 😀

          Na verdade a função apresentada, não ultrapassa literalmente o problema (dai as “aspas”) , já que se os headers já tiverem sido enviados apenas o redirect javascript ou meta irá ser executado, sendo estes menos fiáveis (cuidado com os utilizadores manhosos LOL)

          • Bónus says:

            Só agora vi a tua solução através do link que indicaste. Eu usava uma solução parecida, mas que ia directamente para html sem passar por javascript.
            Também já me tinham falado da solução através do ob_start() como referes no teu comentário. Mas dizes que nem sempre é aplicável. Podes me explicar porquê?
            Obrigado. 😉

  2. CarlosMC says:

    OT:

    Sistema de comentários para blogues:
    http://intensedebate.com/

    Aqui um exemplo:
    http://deputy-dog.com/2009/06/6-extraordinarily-stubborn-nail-houses.html

    Seria uma excelente adição para o pplware.

  3. softclean says:

    Pois é, esta função goTO é preferível a redirects de Javascript e de HTML, como já disseram, e por mais duas razões sobre esses redirects “alternativos”:
    – quebra o botão de retroceder (embora no Firefox se note uma melhoria a isso, visto que ignora a página de redirect
    – não respeita os standards Web, porque não envia um código de redireccionamento do estilo 3xx (300 e tal), logo bots do Google e outros browser de texto como o links são capazes de não seguir os redirects e ficar naquela página.

    E sim, se uma pessoa só consegue perceber a meio do código HTML que tem de redireccionar, então devia rever o esquema com que planeou o site, porque essa medida é incorrecta.

  4. Joao says:

    Olá!

    Podem ajudar-me a entender porque é que no IE o redireccionamento após o preenchimento do form não é executado?

    http://www.nordey.com/deco

    • Boa tarde João,

      A melhor forma de obteres ajuda com problemas é colocares a tua dúvida no fórum.

      De qualquer das formas, verifica que não estás a fazer output de qualquer html (ou mesmo espaços em branco) antes de aplicares o redirect.

Deixe um comentário

O seu endereço de email não será publicado.

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. A administração deste site reserva-se, desde já, no direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.