0

Resgatando variáveis de arquivos em Formulários POST

criado por Olavo Alexandrino em 01/11/2003 11:18pm
Agora vamos falar do propósito do artigo:

resgate de dados de inputs “files” de um formulário.

Primeiramente o nosso formulário deverá ter a seguinte estrutura:

<form action="upload.php" method="post" enctype="multipart/form-data" >
<input type="file" name="meu_arquivo" size="40">
<input type="submit" value="Upload">
</form>

Na página seguinte podemos resgatar os valores da seguinte maneira:

1) REGISTER_GLOBALS do PHP.INI em “On”

Nesse caso podemos diretamente pegar o valor pelo próprio nome do input “file”.

<?php
# => já irá conter o próprio arquivo como conteúdo
$meu_arquivo;

# => Conterá o nome original do arquivo da máquina que está realizando o Upload.
$meu_arquivo_name;

# => Conterá o tamanho, em bytes, do arquivo.
$meu_arquivo_size;

# => Conterá uma string com o tipo do arquivo.
$meu_arquivo_type;

# uma forma de Upload

$pathUpload = $caminho_do_servidor.”/”. $meu_arquivo_name;

if (copy($meu_arquivo,$pathUpload)) {
    if (is_uploaded_file($meu_arquivo)) {
        $x = true;
    }
}

if (x) {
    echo “Upload realizado”;
} else {
    echo “falha”;
}

#Utilizo o “is_uploaded_file” para garantir o envio.

?>

Lembrando que o tamanho máximo do arquivo não foi definido, ele assumirá o default do PHP, que são 2MB.

A directiva é: upload_max_filesize = 2M

Para configurar seu tamanho faça:

<form action="upload.php" method="post" enctype="multipart/form-data" >
<input type="hidden" name="MAX_FILE_SIZE" value="1024">
<input type="file" name="meu_arquivo" size="40">
<input type="submit" value="Upload">
</form>

Nesse caso foi definido para 1024kb.

É interessante observar que caso o tamanho do arquivo a ser feito o upload exceda o tamanho máximo, em seu “$meu_arquivo_size” teremos o valor ZERO. O que indica o estouro. A variável só terá algum valor caso tenho no mínimo o mesmo tamanho do limite.

Comentários:

Mostrando 1 - 10 de 11 comentários
Eu sou iniciante e php e gostaria de saber melhor como funciona esa diretiva REGISTER_GLOBAL.
Existe um valor recomendado certo? Dizem que é por questão de seguranca. Qual a diferenca (em termos de segurança) da diretiva ter o valor On ou Off ? Eu postei uma perguntao na fórum relativa a isso e se alguem puder responder eu serei muito grato.
Abraços.
05/09/2005 10:31am (~19 anos atrás)

Diogo Gomes disse:
verdadeiramente é uma das melhores formas de trabalhar com matrizes. Um acréscimo sobre o mesmo vindo direto do manual.
"Quando o foreach inicia sua primeira execução, o ponteiro interno da matriz é zerado automaticamente para o primeiro elemento do array. Isto significa que você não precisa chamar reset() antes de um loop foreach."
11/11/2003 5:07pm (~21 anos atrás)

Obrigado Olavo,

muito legal a alternativa de foreach para elas..
da pra trabalhar legal com isso
07/11/2003 8:25am (~21 anos atrás)

Marcelo,

pode-se utilizar sim... a função print_r() serve apenas para facilitar...

faça o seguinte:

foreach ($_SERVER as $dado)
{
list($nome,$valor) = each ($_SERVER);
echo "$nome: $valor<br>";
}


É O MESMO result de print_r($_SERVER); só que lá em cima temos o valores de cada atributo em separado...

isso vale para

uma GET;
uma POST;
um COOKIE;
uma SESSION;
uma SERVER_VARS;
uma ENV_VARS;

até mais
07/11/2003 7:18am (~21 anos atrás)

Não cheguei a fazer muitos testes

mas pode ser feito uso de foreach para o $_REQUEST ?

vou dar uma olhada no manual e posto aqui qualquer coisa.. tenho a impressão que dá pra fazer um exemplo de como usar

Mais tarde devo estar postando isso

Abraços
07/11/2003 4:14am (~21 anos atrás)

A função print_r() é perfeita para analisar os valores de variáveis no script, nas sessions, por exemplo onde sempre estamos passando valores á muito rápido ver se estar ocorrendo algum problema....
06/11/2003 10:06pm (~21 anos atrás)

Só para adicionar ao conteudo do artigo

esses dias fiz um teste bastantae interessante que me ajudou a enxergar o que há dentro destas variáveis que o Olavo explicou
o uso de print_r($_GET);
facilita MUITO para você ver como ele armazena os dados espero ter ajudado

isso pode ser feito para $_POST $_REQUEST etc..
06/11/2003 6:49pm (~21 anos atrás)

Dependendo do seu software de FTP você pode ter opções como "change permissions" ou até mesmo "chmod".
Lembre-se que para qualquer usuário poder gravar você deve setar a pasta com chmod 777. Como o script roda no servidor com o usuário nobody você deve setar o chmod para não dar erro de permissões.
Tente se informar no suporte do provedor, em algumas ocasiões eles próprios podem setar essa configuração para você.

Existe também a função move_uploaded_file que é muito interessante para o Upload de arquivos via PHP.
04/11/2003 1:04pm (~21 anos atrás)

por acaso voce colocou o enctype correto no formulario ?
este tambem é um dos motivos comuns quando tentamos fazer upload

espero ter ajudado
04/11/2003 5:07am (~21 anos atrás)

geralmente vc não tem permissão para gravar no diretório, vc pode resolver isso pelo FTP liberando as permissões do diretório
03/11/2003 11:24am (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)