<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.network.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'function.header.php',
    1 => 'header',
    2 => 'Envia um cabe&ccedil;alho HTTP bruto',
  ),
  'up' => 
  array (
    0 => 'ref.network.php',
    1 => 'Fun&ccedil;&otilde;es de Network',
  ),
  'prev' => 
  array (
    0 => 'function.getservbyport.php',
    1 => 'getservbyport',
  ),
  'next' => 
  array (
    0 => 'function.header-register-callback.php',
    1 => 'header_register_callback',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'reference/network/functions/header.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.header" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">header</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">header</span> &mdash; <span class="dc-title">Envia um cabeçalho HTTP bruto</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.header-description">
  <h3 class="title">Descrição</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>header</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$header</code></span>, <span class="methodparam"><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <code class="parameter">$replace</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></span></span>, <span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$response_code</code><span class="initializer"> = 0</span></span>): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>header()</strong></span> é usada para enviar um cabeçalho <abbr title="Hypertext Transfer Protocol">HTTP</abbr>
   bruto. Consulte a <a href="https://datatracker.ietf.org/doc/html/rfc2616" class="link external">&raquo;&nbsp;especificação HTTP/1.1</a>
   para obter mais informações sobre cabeçalhos <abbr title="Hypertext Transfer Protocol">HTTP</abbr>.
  </p>
  <p class="para">
   Lembre-se de que <span class="function"><strong>header()</strong></span> deve ser chamada antes
   de qualquer saída real ser enviada, seja por tags HTML normais, linhas em branco em um
   arquivo ou pelo PHP. É um erro muito comum ler código com
   <span class="function"><a href="function.include.php" class="function">include</a></span>, <span class="function"><a href="function.require.php" class="function">require</a></span>,
   funções ou outra função de acesso a arquivo, e ter espaços ou linhas
   vazias que são exibidas antes de <span class="function"><strong>header()</strong></span> ser chamada.
   O mesmo problema existe ao usar um único arquivo PHP/HTML.
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">&lt;html&gt;<br /><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/* Isso causará um erro. Observe a saída<br /> * acima, que é antes da chamada header() */<br /></span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Location: http://www.example.com/'</span><span style="color: #007700">);<br />exit;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.header-parameters">
  <h3 class="title">Parâmetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">header</code></dt>
     <dd>
      <p class="para">
       A string do cabeçalho.
      </p>
      <p class="para">
       Existem dois casos especiais de chamadas de cabeçalho. O primeiro é um cabeçalho
       que começa com a string &quot;<code class="literal">HTTP/</code>&quot; (maiúsculas ou minúsculas,
       não importa), que será usado para descobrir o código de status HTTP
       a ser enviado. Por exemplo, se o Apache foi configurado para
       usar um script PHP para lidar com solicitações de arquivos ausentes (usando
       a diretiva <code class="literal">ErrorDocument</code>), é importante ter
       certeza de que o script gera o código de status adequado.
      </p>
      <p class="para">
       <div class="informalexample">
        <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Este exemplo ilustra o caso especial "HTTP/"<br />// Alternativas melhores em casos de uso típico incluem:<br />// 1. header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");<br />//    (para substituir as mensagens de status HTTP para clientes que ainda estão usando HTTP/1.0)<br />// 2. http_response_code(404); (para usar a mensagem padrão)<br /></span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">"HTTP/1.1 404 Not Found"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

       </div>
      </p>
      <p class="para">
       O segunda caso especial é o cabeçalho &quot;Location:&quot;. Ele não só envia
       o cabeçalho de volta para o navegador, mas também retorna um código de
       status <code class="literal">REDIRECT</code> (302) para o navegador
       a menos que o código de status <code class="literal">201</code> ou
       um <code class="literal">3xx</code> já tenha sido enviado.
      </p>
      <p class="para">
       <div class="informalexample">
        <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />header</span><span style="color: #007700">(</span><span style="color: #DD0000">"Location: http://www.example.com/"</span><span style="color: #007700">); </span><span style="color: #FF8000">/* Redireciona o navegador */<br /><br />/* Certificando que o restante do código não seja executado quando o redirecionamento é feito. */<br /></span><span style="color: #007700">exit;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

       </div>
      </p>
     </dd>
    
    
     <dt><code class="parameter">replace</code></dt>
     <dd>
      <p class="para">
       O parâmetro opcional <code class="parameter">replace</code> indica
       se o cabeçalho deve substituir um cabeçalho semelhante anterior ou
       adicionar um segundo cabeçalho do mesmo tipo. Por padrão ele irá substituir,
       mas se for passado <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> como segundo argumento podem ser forçados
       vários cabeçalhos do mesmo tipo. Por exemplo:
      </p>
      <p class="para">
       <div class="informalexample">
        <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />header</span><span style="color: #007700">(</span><span style="color: #DD0000">'WWW-Authenticate: Negotiate'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'WWW-Authenticate: NTLM'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

       </div>
      </p>
     </dd>
    
    
     <dt><code class="parameter">response_code</code></dt>
     <dd>
      <p class="para">
       Força o código de resposta HTTP para o valor especificado. Observe que este
       parâmetro só tem efeito se o parâmetro <code class="parameter">header</code> não
       estiver vazio.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.header-returnvalues">
  <h3 class="title">Valor Retornado</h3>
  <p class="para">
   Nenhum valor é retornado.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-function.header-errors">
  <h3 class="title">Erros/Exceções</h3>
  <p class="para">
   Em caso de falha ao programar o envio do cabeçalho, <span class="function"><strong>header()</strong></span>
   emitirá um erro de nível <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.header-examples">
  <h3 class="title">Exemplos</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemplo #1 Caixa de diálogo para salvar arquivo</strong></p>
    <div class="example-contents"><p>
     Se quiser que o usuário seja solicitado a salvar os dados que estão sendo
     enviados, como um arquivo PDF gerado por exemplo, pode ser usado o cabeçalho <a href="https://datatracker.ietf.org/doc/html/rfc2183" class="link external">&raquo;&nbsp;Content-Disposition</a> para
     fornecer um nome de arquivo recomendado e forçar o navegador a exibir
     a caixa de diálogo para salvá-lo.
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// A saída será um PDF<br /></span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Content-Type: application/pdf'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Será chamado de downloaded.pdf<br /></span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Content-Disposition: attachment; filename="downloaded.pdf"'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// A fonte do PDF está em original.pdf<br /></span><span style="color: #0000BB">readfile</span><span style="color: #007700">(</span><span style="color: #DD0000">'original.pdf'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Exemplo #2 Diretivas de cache</strong></p>
    <div class="example-contents"><p>
     Os scripts PHP geralmente geram conteúdo dinâmico que não deve ser armazenado em cache
     pelo navegador do cliente ou por qualquer cache proxy entre o servidor e o
     navegador do cliente. Muitos proxies e clientes podem ser forçados a desabilitar
     o cache com:
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />header</span><span style="color: #007700">(</span><span style="color: #DD0000">"Cache-Control: no-cache, must-revalidate"</span><span style="color: #007700">); </span><span style="color: #FF8000">// HTTP/1.1<br /></span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">"Expires: Sat, 03 Dec 2016 17:15:00 GMT"</span><span style="color: #007700">); </span><span style="color: #FF8000">// Data no passado<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       Pode acontecer das páginas não serem armazenadas em cache mesmo que todos os
       cabeçalhos acima não sejam gerados. Há uma série de opções
       que os usuários podem definir para seus navegadores que alteram seu
       comportamento padrão de cache. Ao enviar os cabeçalhos acima, devem ser
       substituídas quaisquer configurações que possam fazer com que a saída do
       script seja armazenada em cache.
      </p>
      <p class="para">
       Além disso, <span class="function"><a href="function.session-cache-limiter.php" class="function">session_cache_limiter()</a></span> e
       a configuração <code class="literal">session.cache_limiter</code>
       podem ser usadas para gerar automaticamente os cabeçalhos
       corretos relacionados ao cache quando sessões estão sendo usadas.
      </p>
     </p></blockquote>
    </p></div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="example-3">
    <p><strong>Exemplo #3 Definindo um cookie</strong></p>
    <div class="example-contents"><p>
     <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span> fornece uma maneira conveniente de definir cookies.
     Para definir um cookie que inclui atributos que <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span>
     não suporta, <span class="function"><strong>header()</strong></span> pode ser usada.
    </p></div>
    <div class="example-contents"><p>
     Por exemplo, o código a seguir define um cookie que inclui um
     atributo <code class="literal">Partitioned</code>.
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Set-Cookie: name=value; Secure; Path=/; SameSite=None; Partitioned;'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.header-notes">
  <h3 class="title">Notas</h3>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Os cabeçalhos só serão acessíveis e enviados quando uma SAPI que os suporta
    estiver em uso.
   </p>
  </p></blockquote>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Para contornar esse problema, o buffer de saída pode ser usado,
    com a sobrecarga de toda a saída para o navegador sendo armazenada em buffer
    no servidor até seja enviada. Isso pode ser feito chamando
    <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span> e <span class="function"><a href="function.ob-end-flush.php" class="function">ob_end_flush()</a></span>
    no script, ou definindo a diretiva de configuração <code class="literal">output_buffering</code>
    no arquivo <var class="filename">php.ini</var> ou nos arquivos
    de configuração do servidor.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    A linha do cabeçalho de status HTTP sempre será a primeira enviada
    ao cliente, independentemente de a chamada a <span class="function"><strong>header()</strong></span>
    ser a primeira ou não. O status pode ser substituído
    chamando <span class="function"><strong>header()</strong></span> com uma nova linha de status
    a qualquer momento, a menos que os cabeçalhos HTTP já tenham sido enviados.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    A maioria dos clientes atuais aceita <abbr title="Uniform Resource Identifier">URI</abbr> relativo como argumento para
    <a href="http://tools.ietf.org/html/rfc7231#section-7.1.2" class="link external">&raquo;&nbsp;Local:</a>,
    mas alguns clientes mais antigos exigem um URI absoluto
    incluindo o esquema, nome do host e caminho absoluto. Geralmente, podem ser usados
    <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER['HTTP_HOST']</a></var>,
    <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER['PHP_SELF']</a></var>
    e <span class="function"><a href="function.dirname.php" class="function">dirname()</a></span> para criar um URI absoluto a partir de um
    relativo:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/* Redireciona para uma página diferente no diretório atual que foi solicitado */<br /></span><span style="color: #0000BB">$host  </span><span style="color: #007700">= </span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_HOST'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$uri   </span><span style="color: #007700">= </span><span style="color: #0000BB">rtrim</span><span style="color: #007700">(</span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_SELF'</span><span style="color: #007700">]), </span><span style="color: #DD0000">'/\\'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$extra </span><span style="color: #007700">= </span><span style="color: #DD0000">'minha_pagina.php'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">"Location: http://</span><span style="color: #0000BB">$host$uri</span><span style="color: #DD0000">/</span><span style="color: #0000BB">$extra</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br />exit;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    O ID da sessão não é passado com o cabeçalho &quot;Location:&quot; mesmo se <a href="session.configuration.php#ini.session.use-trans-sid" class="link">session.use_trans_sid</a> estiver
    ativada. Deve ser passado manualmente usando a
    constante <strong><code><a href="session.constants.php#constant.sid">SID</a></code></strong>.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.header-seealso">
  <h3 class="title">Veja Também</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.headers-sent.php" class="function" rel="rdfs-seeAlso">headers_sent()</a> - Verifica se ou onde os cabe&ccedil;alhos foram enviados</span></li>
    <li><span class="function"><a href="function.setcookie.php" class="function" rel="rdfs-seeAlso">setcookie()</a> - Envia um cookie</span></li>
    <li><span class="function"><a href="function.http-response-code.php" class="function" rel="rdfs-seeAlso">http_response_code()</a> - Obt&eacute;m ou define o c&oacute;digo de resposta HTTP</span></li>
    <li><span class="function"><a href="function.header-remove.php" class="function" rel="rdfs-seeAlso">header_remove()</a> - Remove cabe&ccedil;alhos definidos anteriormente</span></li>
    <li><span class="function"><a href="function.headers-list.php" class="function" rel="rdfs-seeAlso">headers_list()</a> - Retorna uma lista de cabe&ccedil;alhos de resposta enviados (ou prontos para enviar)</span></li>
    <li>
     A seção sobre <a href="features.http-auth.php" class="link">autenticação
     HTTP</a>
    </li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>