Sophie

Sophie

distrib > Mandriva > 2008.1 > i586 > by-pkgid > 703d980c580707c382b4e43e25965bc5 > files > 58

php-manual-pt_BR-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Gerenciar o upload de arquivos</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Manual do PHP"
HREF="index.html"><LINK
REL="UP"
TITLE="Características"
HREF="features.html"><LINK
REL="PREVIOUS"
TITLE="Lidando com XForms"
HREF="features.xforms.html"><LINK
REL="NEXT"
TITLE="Explicação das mensagens de erro"
HREF="features.file-upload.errors.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="chapter"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Manual do PHP</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="features.xforms.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="features.file-upload.errors.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="chapter"
><H1
><A
NAME="features.file-upload"
>Capítulo 38. Gerenciar o upload de arquivos</A
></H1
><DIV
CLASS="TOC"
><DL
><DT
><B
>Índice</B
></DT
><DT
><A
HREF="features.file-upload.html#features.file-upload.post-method"
>Upload de arquivos com o método POST</A
></DT
><DT
><A
HREF="features.file-upload.errors.html"
>Explicação das mensagens de erro</A
></DT
><DT
><A
HREF="features.file-upload.common-pitfalls.html"
>Problemas comuns</A
></DT
><DT
><A
HREF="features.file-upload.multiple.html"
>Carregando múltiplos arquivos</A
></DT
><DT
><A
HREF="features.file-upload.put-method.html"
>Suporte ao método PUT</A
></DT
></DL
></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="features.file-upload.post-method"
>Upload de arquivos com o método POST</A
></H1
><P
>&#13;    O PHP é capaz de receber o upload de qualquer browser que siga a norma RFC-1867
    (o que inclui <SPAN
CLASS="productname"
>Netscape Navigator 3</SPAN
> ou posterior,
    <SPAN
CLASS="productname"
>Microsoft Internet Explorer 3</SPAN
> com um patch da Microsoft,
    ou posterior sem patch).
    Isto permite que se faça o upload de arquivos de texto e binários.
    Com as funções de autenticação e manipulação de arquivos do PHP,
    você tem o controle completo de quem pode fazer o upload de arquivo e
    o que fazer com o arquivo após seu upload.
   </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota Sobre Configurações Relacionadas: </B
>
     Veja também <A
HREF="ini.core.html#ini.file-uploads"
>file_uploads</A
>,
     <A
HREF="ini.core.html#ini.upload-max-filesize"
>upload_max_filesize</A
>,
     <A
HREF="ini.core.html#ini.upload-tmp-dir"
>upload_tmp_dir</A
>, 
     <A
HREF="ini.core.html#ini.post-max-size"
>post_max_size</A
>,
     <A
HREF="ref.info.html#ini.max-input-time"
>max_input_time</A
> no <TT
CLASS="filename"
>php.ini</TT
>
    </P
></BLOCKQUOTE
></DIV
><P
>&#13;    Note que o PHP também suporta o método PUT para upload de arquivos como o usado
    por <SPAN
CLASS="productname"
>Netscape Composer</SPAN
> e 
    W3C's <SPAN
CLASS="productname"
>Amaya</SPAN
> clients. Veja <A
HREF="features.file-upload.put-method.html"
>Suporte ao Método Put
    </A
> para maiores detalhes.
   </P
><P
>&#13;    Uma tela para upload de arquivo pode ser criada com um formulário especial
    parecido com este:
    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN6894"
></A
><P
><B
>Exemplo 38-1. Formulário para Upload de Arquivo</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="html"
>&#60;form enctype="multipart/form-data" action="_URL_" method="post"&#62;
&#60;input type="hidden" name="MAX_FILE_SIZE" value="30000" /&#62;
Send this file: &#60;input name="userfile" type="file" /&#62;
&#60;input type="submit" value="Send File" /&#62;
&#60;/form&#62;</PRE
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
><P
>&#13;      A "_URL_" no exemplo acima deve ser substituida e apontar para um arquivo PHP. 
      O campo escondido <TT
CLASS="literal"
>MAX_FILE_SIZE</TT
> (medido em bytes) deve preceder o campo de input do arquivo, 
      e seu valor é o tamanho limite aceito para o arquivo.
      Também tenha certeza que seu formulário de upload de arquivo tenha
      <TT
CLASS="literal"
>enctype="multipart/form-data"</TT
> em outro caso o upload do arquivo não irá funcionar.
    <DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>Atenção</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>&#13;      O valor de <TT
CLASS="literal"
>MAX_FILE_SIZE</TT
> é um aviso para o browser. É fácil
      contornar este limite. Então não conte que o browser irá obedecer a sua vontade.
      O que foi estabelecido para maximum-size no PHP não pode ser enganado.
      Mas você deve adicionar <TT
CLASS="literal"
>MAX_FILE_SIZE</TT
> em qualquer caso,
      já que
      salva os usuários do problema de esperar por um grande arquivo ser
      transferido somente para descobrir depois de tudo que ele é muito grande.
     </P
></TD
></TR
></TABLE
></DIV
>
   </P
><P
>&#13;    As variáveis definidas para o upload de arquivos são diferentes dependendo
    da versão e da configuração. A autoglobal
    <A
HREF="reserved.variables.html#reserved.variables.files"
>$_FILES</A
>
    existe desde o PHP 4.1.0. A array <CODE
CLASS="varname"
>$HTTP_POST_FILES</CODE
>
    existe desde o PHP 4.0.0. Estas array irão conter toda a informação do upload do arquivo.
    Usar <CODE
CLASS="varname"
>$_FILES</CODE
> é preferido. Se a opção
    <A
HREF="ini.core.html#ini.register-globals"
>register_globals</A
> é
    <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>on</I
></SPAN
>, os nomes de variáveis relacionados também existirão.
    O padrão de <A
HREF="ini.core.html#ini.register-globals"
>register_globals</A
>
    é <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>off</I
></SPAN
> desde o PHP
    <A
HREF="http://www.php.net/releases/4_2_0.php"
TARGET="_top"
>4.2.0</A
>.
   </P
><P
>&#13;    Os conteúdos de <A
HREF="reserved.variables.html#reserved.variables.files"
>$_FILES</A
>
    do nosso script de exemplo é como segue. Note que isso assume que o nome do upload do arquivo é
    <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>userfile</I
></SPAN
>, como o usado no exemplo acima. Pode ser qualquer nome.
    <P
></P
><DIV
CLASS="variablelist"
><DL
><DT
><CODE
CLASS="varname"
>$_FILES['userfile']['name']</CODE
></DT
><DD
><P
>&#13;        O nome original do arquivo no computador do usuário.
       </P
></DD
><DT
><CODE
CLASS="varname"
>$_FILES['userfile']['type']</CODE
></DT
><DD
><P
>&#13;        O tipo mime do arquivo, se o browser deu esta informação.
        Um exemplo pode ser <TT
CLASS="literal"
>"image/gif"</TT
>.
        </P
></DD
><DT
><CODE
CLASS="varname"
>$_FILES['userfile']['size']</CODE
></DT
><DD
><P
>&#13;        O tamanho, em bytes, do arquivo.
       </P
></DD
><DT
><CODE
CLASS="varname"
>$_FILES['userfile']['tmp_name']</CODE
></DT
><DD
><P
>O nome temporário do arquivo, como foi guardado no servidor.
       </P
></DD
><DT
><CODE
CLASS="varname"
>$_FILES['userfile']['error']</CODE
></DT
><DD
><P
>&#13;        O <A
HREF="features.file-upload.errors.html"
>código de erro</A
>
        associado a este upload de arquivo. <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>['error']</I
></SPAN
>
        foi adicionado no PHP 4.2.0
       </P
></DD
></DL
></DIV
>
   </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
     Em versões anteriores a 4.1.0 o nome era
     <CODE
CLASS="varname"
>$HTTP_POST_FILES</CODE
> e não é uma variável
     <A
HREF="language.variables.predefined.html#language.variables.superglobals"
>autoglobal</A
>
     como <CODE
CLASS="varname"
>$_FILES</CODE
> é.
     PHP 3 não suporta <CODE
CLASS="varname"
>$HTTP_POST_FILES</CODE
>.
    </P
></BLOCKQUOTE
></DIV
><P
>&#13;    Quando <A
HREF="ini.core.html#ini.register-globals"
>register_globals</A
>
    esta em <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>on</I
></SPAN
> no <TT
CLASS="filename"
>php.ini</TT
>, variáveis adicionais estão disponíveis.
    Por exemplo, 
    <CODE
CLASS="varname"
>$userfile_name</CODE
> será igual a
    <CODE
CLASS="varname"
>$_FILES['userfile']['name']</CODE
>,
    <CODE
CLASS="varname"
>$userfile_type</CODE
> será igual a 
    <CODE
CLASS="varname"
>$_FILES['userfile']['type']</CODE
>, etc. Lembre-se que desde o
    PHP 4.2.0, o padrão para register_globals é off.
    É preferível não depender desta opção.
   </P
><P
>&#13;    Os arquivos serão guardados no diretório temporário do servidor, 
    a menos que outro lugar seja especificado com a opção 
    <A
HREF="ini.core.html#ini.upload-tmp-dir"
>upload_tmp_dir</A
> no <TT
CLASS="filename"
>php.ini</TT
>. 
    O diretório padrão do servidor pode ser mudado se mudando o valor da variável de ambiente
    <CODE
CLASS="envar"
>TMPDIR</CODE
> no ambiente onde o PHP esta sendo executado PHP.
    Mudando-a com <A
HREF="function.putenv.html"
><B
CLASS="function"
>putenv()</B
></A
> de um script PHP
    não irá funcionar. Esta variável de ambiente também pode ser usada para se ter certeza
    que outras operações estão funcionando no arquivo do upload.
    </P
><P
>&#13;       Note que deve se definir
       <A
HREF="ini.core.html#ini.upload-tmp-dir"
>upload_temp_dir</A
> no <TT
CLASS="filename"
>php.ini</TT
> ou <CODE
CLASS="envar"
>TMPDIR</CODE
>,
       não podendo estarem ambos vazios, sendo recomendado no mínimo upload_tmp_dir.
    </P
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN6968"
></A
><P
><B
>Exemplo 38-2. Validando o upload de arquivos</B
></P
><P
>&#13;      Veja também as funções <A
HREF="function.is-uploaded-file.html"
><B
CLASS="function"
>is_uploaded_file()</B
></A
>
      e <A
HREF="function.move-uploaded-file.html"
><B
CLASS="function"
>move_uploaded_file()</B
></A
> para maiores informações. O
      seguinte exemplo irá processar o envio de um arquivo que vem de um formulário.
     </P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#FF8000">// Nas versões do PHP anteriores a 4.1.0, deve ser usado $HTTP_POST_FILES<br />// ao invés de $_FILES.<br /><br /></font><font color="#0000BB">$uploaddir </font><font color="#007700">= </font><font color="#DD0000">'/var/www/uploads/'</font><font color="#007700">;<br /></font><font color="#0000BB">$uploadfile </font><font color="#007700">= </font><font color="#0000BB">$uploaddir </font><font color="#007700">. </font><font color="#0000BB">$_FILES</font><font color="#007700">[</font><font color="#DD0000">'userfile'</font><font color="#007700">][</font><font color="#DD0000">'name'</font><font color="#007700">];<br />print </font><font color="#DD0000">"&lt;pre&gt;"</font><font color="#007700">;<br />if (</font><font color="#0000BB">move_uploaded_file</font><font color="#007700">(</font><font color="#0000BB">$_FILES</font><font color="#007700">[</font><font color="#DD0000">'userfile'</font><font color="#007700">][</font><font color="#DD0000">'tmp_name'</font><font color="#007700">], </font><font color="#0000BB">$uploaddir </font><font color="#007700">. </font><font color="#0000BB">$_FILES</font><font color="#007700">[</font><font color="#DD0000">'userfile'</font><font color="#007700">][</font><font color="#DD0000">'name'</font><font color="#007700">])) {<br />&nbsp;&nbsp;&nbsp;&nbsp;print </font><font color="#DD0000">"O arquivo é valido e foi carregado com sucesso. Aqui esta alguma informação:\n"</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">print_r</font><font color="#007700">(</font><font color="#0000BB">$_FILES</font><font color="#007700">);<br />} else {<br />&nbsp;&nbsp;&nbsp;&nbsp;print </font><font color="#DD0000">"Possivel ataque de upload! Aqui esta alguma informação:\n"</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">print_r</font><font color="#007700">(</font><font color="#0000BB">$_FILES</font><font color="#007700">);<br />}<br />print </font><font color="#DD0000">"&lt;/pre&gt;"</font><font color="#007700">;<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
><P
>&#13;    O script PHP que irá receber o arquivo do upload deve implementar
    qualquer lógica que for necessária para determinar o que deve ser feito
    com o arquivo do upload. Você pode, por exemplo, usar a variável
    <CODE
CLASS="varname"
>$_FILES['userfile']['size']</CODE
> 
    para descartar qualquer arquivo que seja muito pequeno ou muito grande. 
    Você pode usar a variável 
    <CODE
CLASS="varname"
>$_FILES['userfile']['type']</CODE
>
    que não sejam de um certo tipo.
    Desde o PHP 4.2.0, você pode usar <CODE
CLASS="varname"
>$_FILES['userfile']['error']</CODE
> 
    e planejar a sua lógica de acordo com os <A
HREF="features.file-upload.errors.html"
>códigos de erro</A
>.
    Qualquer que seja a lógica, você deve excluir o arquivo do diretório temporário
    ou move-lo para outro lugar.
   </P
><P
>&#13;    Se nenhum arquivo for selecionado em seu formulário, o PHP irá retornar
    <CODE
CLASS="varname"
>$_FILES['userfile']['size']</CODE
> como 0, e <CODE
CLASS="varname"
>$_FILES['userfile']['tmp_name']</CODE
>
    como none.
   </P
><P
>&#13;    O arquivo será excluído do diretório temporário ao fim do script
    se não tiver sido movido ou renomeado.
   </P
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="features.xforms.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Principal</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="features.file-upload.errors.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Lidando com XForms</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="features.html"
ACCESSKEY="U"
>Acima</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Explicação das mensagens de erro</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>