Carregando arquivos para o servidor usando PHP. Exemplo de download de arquivos para o servidor (upload) no PHP como baixar o arquivo PHP

Certamente você com frequência baixe vários arquivos em sites. Por exemplo, avatares carregados no fórum, Fotos em redes sociais, vários vídeos em hosts de vídeo, apenas arquivos no compartilhamento de arquivos. E aqui neste artigo você aprenderá como fazer upload de arquivos para o servidor no PHP. É através de. Php. Na maioria dos casos, isso é implementado.

Primeiro de tudo, o que aprender é que ela mesma Forma HTML.em que o arquivo é substituído não deve ser bastante normal, aqui está um exemplo Código HTML Tal forma:





O ponto chave aqui é um atributo " enctype."Com o significado" multipart / Form-Data". Não vai funcionar sem ele.

"Em que ainda não baixamos o arquivo, e vamos passar um pouco em vários pontos importantes que devem ser levados em conta, caso contrário, a segurança poderá afetar:

Print_r ($ _ arquivos);
?>

Como resultado, você verá o conteúdo. array bidimensional global $ _files:

  • nome. - O nome do arquivo baixado.
  • modelo - MIME-TYPE. Arquivo para download. Este é talvez o parâmetro mais importante para a segurança. E sempre ao receber arquivos devem ser verificados MIME-TYPE.caso contrário, não há problemas. No próximo artigo, falaremos sobre isso com mais detalhes.
  • tmp_name. - Caminho físico para o arquivo temporário. É neste lugar que o arquivo é colocado, e só o carregamos para outro lugar. Na verdade, o arquivo já está carregado, e precisamos apenas movê-lo para a pasta desejada no servidor.
  • erro - Erro de código. Se um 0 Não há erros.
  • tamanho - tamanho do arquivo baixado. Esta é também uma opção freqüentemente usada, e também deve ser verificada para limite do tamanho dos arquivos baixados. Claro, esse tamanho em si é limitado, no entanto, para quaisquer fotos, esse tamanho é claramente superestimado (como regra, ele 10 MB.).

E todos esses parâmetros estão presentes para cada arquivo descartável (cada um dos quais é uma matriz em uma matriz bidimensional. $ _Files.).

Agora vamos terminar com baixe arquivos para o servidor no PHPE por isso escreveremos esse código (""):

$ uploadfile \u003d "imagens /".$_ Arquivos [" Somename "] [" nome "];
Move_uploaded_file ($ _ arquivos ["somename"] ["tmp_name"], $ uploadfile);
?>

Ou seja, no começo, especificaremos o caminho para o arquivo para download no servidor. Aqui queremos colocar o arquivo no diretório " imagens"Com o mesmo nome que foi antes do arquivo. E a função move_uploaded_file () Nós movemos o arquivo para o diretório de seu diretório selecionado de seu armazenamento temporário.

No entanto, preste atenção, é muito importante! Então use o código em nenhum caso, caso contrário seu site vai ameaçar um sério perigo! Na verdade, no momento, pode ser baixado absolutamente tudo o que: quaisquer arquivos executáveis, scripts, PAN DO HTML. E outras coisas muito perigosas. Portanto, é necessário verificar os arquivos para download para o servidor com muito cuidado. E assim vamos lidar no próximo artigo. Como o tópico é muito importante, então eu aconselho você a se inscrever para atualizações, para não perder este artigo.

Você tem um javascript bloqueado no seu navegador. Permitir Javascript para o trabalho do site!

Carregando arquivos para o servidor

Exours curtos no upload

O que é upload de arquivos ou por que não funcionar
copiar ("C: \\ Images \\ Sample.jpg" "," http://mysite.ru/uploads/sample.jpg ")

Mesmo se você tiver apenas um computador à sua disposição, no qual o servidor e a estação de trabalho estão alinhados, não se esqueça que o PHP usa a tecnologia cliente / servidor. O arquivo que queremos fazer upload é geralmente localizado no carro do cliente, isto é. usuário, visitante do site comum. O destino é o servidor. Para tornar o processo de transferência de arquivos, precisamos do seguinte formulário:

Envie este arquivo:

Nesse caso, o URL do seu script PHP deve ser especificado no campo de ação, que continuará a processar os arquivos baixados. O campo Max_File_Size oculto deve preceder o campo de seleção de arquivos e contenha o tamanho máximo permitido do arquivo em bytes. Sua tarefa é verificar o tamanho do arquivo até que o arquivo seja enviado para o servidor. Ele deve salvar o usuário de um download longo e mal sucedido do arquivo para o servidor e a formação do excesso de tráfego, mas não deve estar particularmente confiando nessa restrição, pois é fácil contorná-lo.

O que acontece quando o usuário escolheu um arquivo em seu disco e pressionou o botão "Enviar arquivo"? O navegador envia o arquivo para o servidor onde o interpretador PHP coloca-o em seu diretório temporário, atribuindo um nome aleatório e executa o script especificado no campo de ação.

Como deve fazer o upload.php parecido?

$ uploaddir \u003d "/ var / www / upload /"; if (move_uploaded_file ($ _ arquivos ["userfile"] ["tmp_name"], $ uploaddir. $ _files ["userfile"] ["nome"]) (nome de impressão "é válido e foi carregado com êxito.";) Mais (imprimir "há alguns erros!";)

Ao escrever um script, surge uma pergunta natural: Como obter informações sobre o arquivo baixado e alcançar o próprio arquivo. Se você usar o PHP versão 4.1.0 e mais velho, será melhor referir-se à matriz global $ _files. Para cada arquivo baixado, ele contém uma matriz HASH, com os seguintes dados:

  • $ _Files ["userfile"] ["nome"] - o nome do arquivo original, como o usuário viu, escolhendo o arquivo;
  • $ _Files ["userfile"] ["Tipo"] - Arquivo MIME / Type, por exemplo, pode ser Image / Gif; Este campo é útil para economizar se você deseja fornecer uma interface para baixar arquivos baixados;
  • $ _Files ["userfile"] ["tamanho"] - o tamanho do arquivo baixado;
  • $ _Files ["userfile"] ["tmp_name"] - o caminho completo para o arquivo temporário no disco;
  • $ _Files ["userfile"] ["erro"] - Começando com a versão 4.2.0, contém um código de erro que é 0 se a operação tiver passado com sucesso.

Para a versão PHP abaixo 4.1.0, esta matriz é chamada $ http_post_files. Não se esqueça disso, ao contrário de $ _files, esta matriz não é superglobal e ao acessar, por exemplo, a partir de uma função, é necessário especificar explicitamente os $ http_post_files globais;

Se variáveis \u200b\u200badicionais do $ userfile_name, $ userfile_type, $ userfile_size, $ userfile_type, $ userfile_size, será criado nas configurações do seu registro_globals \u003d ligado, ... considerando que, começando com a versão 4.2.0, as configurações padrão register_globals \u003d O uso dessas variáveis \u200b\u200bnão é recomendado, mesmo que definirem. A melhor maneira de obter informações sobre arquivos baixados é usar uma matriz $ _files.

Para trabalhar com arquivos baixados, é melhor usar as funções internas is_uploaded_file () e mover_uploaded_file (), que verificar se o arquivo foi carregado e colocou-o na pasta especificada, respectivamente. Você pode encontrar informações mais detalhadas sobre as páginas manuais. Não é necessário inventar uma bicicleta e trabalhar com arquivos temporários, copiá-los, excluídos. Já foi feito para você e para você.

Ajuste do servidor

Eu fiz tudo certo, mas algo não funciona para mim. Talvez eu tenha o servidor configurado incorretamente?

Se você "fez tudo certo", mas seu código não funciona, ou funciona incorretamente, não se apresse em desespero. Talvez o problema não esteja em suas mãos, mas nas configurações do servidor errado. Aqui está uma lista de diretivas relacionadas ao download de arquivos:

No arquivo php.ini:

  • Se você quiser saber onde seu php.ini está localizado, execute
  • file_uploads. - Capacidade de proibir ou permitir o download de arquivos como um todo. Padrão.
  • upload_max_filesize. - Tamanho máximo do arquivo que pode ser baixado. Se você precisar trabalhar com arquivos grandes, altere esta configuração. Por padrão, 2m Não se esqueça de mudar post_max_size.
  • post_max_size. - Um limite geral no topo dos dados transmitidos na solicitação pós. Se você precisar trabalhar com arquivos grandes ou enviar vários arquivos ao mesmo tempo, altere esta configuração. O valor padrão é 8 m.
  • upload_tmp_dir. - Diretório temporário no servidor para o qual todos os arquivos baixáveis \u200b\u200bserão colocados. Verifique quais direitos são estabelecidos (se você tiver dificuldades nesta fase, consulte a explicação no final do artigo). Esse diretório também deve ter um usuário em que o Apache é executado, também deve haver o direito de gravar neste diretório. Se você trabalha com a restrição Open_Basedir ativada - então o diretório temporário deve estar dentro. Você não precisa cuidar de sua limpeza ou os nomes únicos, o PHP resolve esse problema para você.

No arquivo httpd.conf.:

  • Primeiro de tudo, verifique se você usa o servidor da Web Apache 1.3 (a versão mais recente no momento do artigo do artigo - 1.3.27). Se você usar o Apache 2.0, você deve ler o seguinte trecho da documentação:

    Não use o Apache 2.0 e PHP em um ambiente de produção nem no UNIX nem no Windows.

  • Se você recebeu a mensagem "Método Post não alimentar", significa que você precisa procurar algo semelhante às seguintes diretivas e usar a palavra-chave da Permissão: Ordem permitir, negar de todos
  • Problemas com o download de arquivos binários - a pergunta clássica "Por que os arquivos estão lutando no upload". Aqui está a solução para a decisão proposta por Dima Borodin (http://php.spb.ru): no diretório onde o script reside, faça o arquivo .htaccess, no qual escrevemos: CharsetDisable no arquivo httpd.conf. Adicionar linhas: Charsetrecodemultiprartformes off

Pequenas explicações, para esta receita: o problema acima quando os arquivos carregados para o servidor não estão pagos e as imagens não são exibidas, pode ocorrer devido ao fato de que o servidor da Web do Apache russo é usado. A diretiva CharsetDisable desativa o módulo do módulo de processamento de caracteres, ou seja, Nenhuma transcodificação ao baixar arquivos localizados nesta pasta não ocorrerá. A diretiva CharSetRecoDemultIPartFormal desativa a transcodificação de dados transmitida pelo método Post com o cabeçalho Tipo de conteúdo: Multipart / Form-Data. Aqueles. Dados binários transmitidos com essa configuração serão deixados no formulário original, e todo o restante do enchimento do site será recodificado de acordo com as configurações atuais do servidor.

Mas, ao mesmo tempo, podem surgir complicações: estar preparado para o fato de que, em alguns casos, as partes de texto dos pedidos que você terá que recodificar a si mesmo. Isto é o que a documentação é dita sobre isso:

Use a diretiva CharsetRecoDemultIPartFormal, que apareceu no PL23, mas você ainda tem que recode peças de peça de texto manualmente. Para fazer isso, você pode usar a API do Apache russo disponível em outros módulos ou API Russo Apache Perl disponível no MOD_PERL.

Um dos exemplos da definição de codificação pode ser encontrado aqui: http://tony2001.phpclub.net/detect_charset/detect.phps

A documentação mais recente sobre o Apache russo está em seu site oficial: http://apache.lexa.ru/.

Não esqueça que depois de qualquer alteração de configuração, você precisa reiniciar o servidor da Web.

Você também pode configurar os parâmetros do APACH usando.

Php_value upload_max_filesize 50m php_value post_max_size 50m

Características adicionais

Carregando vários arquivos ao mesmo tempo

Exemplo do formulário de download de vários arquivos:

Envie esses arquivos:


E não se esqueça de aumentar post_max_size.Se muitos arquivos forem supostos

Arquivos de download automáticos para o servidor

Você não deve esquecer que os arquivos no disco do usuário são informações confidenciais para as quais nem JavaScript nem mais php têm um relacionamento baixo. Até que o usuário selecionasse o arquivo com a ajuda Não importa o que o trabalho com ele possa ir e fala. E não esqueça que este campo de entrada de campo é o atributo de valor é protegido da gravação.

Armazenamento de arquivos no banco de dados MySQL

Se você estiver reunido para armazenar arquivos para download no banco de dados, você precisa lembrar os seguintes pontos:

  • Você deve usar o campo BLOB
  • Antes de colocar no banco de dados, não se esqueça de se inscrever no mysql_escape_string () string
  • Ao exibir o arquivo, você deve especificar o cabeçalho de conteúdo / tipo

Lembre-se de que o script exibe seu HTML não é de forma alguma conectado ao script que a imagem deve ser emitida. Estes devem ser dois aplicativos diferentes.

Armazenamento de fotos no banco de dados não é um bom estilo. É muito mais conveniente armazenar no banco de dados apenas para arquivos de imagem.

Obtendo propriedades da imagem.

Se você tiver uma tarefa para verificar o tipo ou o tamanho da imagem antes de baixar o arquivo para o servidor, você precisará da função GetItimagesize (). Como argumento, aceita o nome do arquivo no disco e retorna a matriz, os dois primeiros elementos do qual é a largura e a altura, respectivamente, o terceiro é o tipo de imagem. Se é impossível ler a imagem correta do arquivo especificado, a função retorna uma mentira.

Carregando arquivos com um nome de língua russa

Ao baixar para o arquivo do servidor, você precisa verificar seus nomes originais para a presença de caracteres "não padrão" (por exemplo, letras russas). No caso de sua presença, é necessário substituir. O nome do arquivo original pode ser encontrado nos $ _files ["userfile"] ["nome"] variável. Como recarregar a string da língua russa para transitar, você pode ser encontrado nos exemplos do PHP.

Download Exibição do status (barra de progresso)

Deve-se ter em mente que até que o arquivo seja totalmente baixado, o PHP não pode operar ou o tamanho do arquivo ou a porcentagem de seu carregamento. Somente quando o arquivo já estiver no servidor PHP, ele poderá acessar as informações. Se você ainda precisar implementar tal oportunidade, use o applet Java.

Direitos dos arquivos

Problemas com direitos no servidor (Upload_TMP_DIR)

Em sistemas operacionais semelhantes ao UNIX, cada pasta, arquivo, o link é definido a conformidade com as permissões. Eles podem parecer rwx-rw-r- ou como um número 754.

A disponibilidade de um arquivo ou diretório depende do ID do usuário e do identificador de grupo no qual ele entra. O modo como um todo é descrito em termos de três seqüências, três letras cada:

Proprietário outro grupo (u) (g) (o) rwx rwx rwx

Aqui, o proprietário, os membros do grupo e todos os outros usuários têm os direitos para ler o arquivo, gravar a ele e sua execução. Direitos - qualquer combinação significativa das seguintes letras:

r direito de ler. (quatro)
W Direita para gravar. (2)
x Direito à execução (pesquisa no diretório). (1)

  • Instale o proprietário do diretório do usuário, com cujas atrações são executadas pelo Apache. Isso pode ser encontrado no arquivo httpd.conf ou visualizando a lista de processos no servidor. Os direitos de diretório devem ser 700 (RWX ------).
  • Independentemente de quem o proprietário do catálogo, estabelecer os direitos de 777 (RWXRWXRWX).

    Um exemplo de implementação do download de fotos para o servidor.

    $ max_image_width \u003d 380; $ max_image_height \u003d 600; $ max_image_size \u003d 64 * 1024; $ valid_types \u003d array ("gif", "jpg", "png", "jpeg"); if (isset ($ _ arquivos ["userfile"])) (se (IS_UPLOADED_FILE ($ _ arquivos ["userfile"] ["tmp_name"]) ($ filename \u003d $ _files ["userfile"] ["tmp_name"] $ EXT \u003d Substr ($ _ Arquivos ["UserFile"] ["Nome"], 1 + Strrpos ($ _ Arquivos ["UserFile"] ["nome"], ".")); If (Filenize ($ Filename )\u003e $ max_image_size) (ERPO "Erro: Tamanho do arquivo\u003e 64k.";) elseif (! in_array ($ ext, $ valid_types) (ECHO) (ECHO) (ECHO) (ECHO) Tipo de arquivo. ";) mais ($ size \u003d GetTimeSize Nome do arquivo); if (($ tamanho) && ($ tamanho< $max_image_width) && ($size < $max_image_height)) { if (@move_uploaded_file($filename, "/www/htdocs/upload/")) { echo "File successful uploaded."; } else { echo "Error: moving fie failed."; } } else { echo "Error: invalid image properties."; } } } else { echo "Error: empty file."; } } else { echo "
    Envie este arquivo:
    "; }
  • Em nosso artigo, consideramos um exemplo de criar um script de download de arquivos PHP para o servidor. Nosso exemplo de download de arquivos simples terá 2 arquivos: form.html), script de download do arquivo php (Uploader.php).

    Agora vamos analisar tudo em detalhes. Primeiro, analise o arquivo form.html:


    Como você pode ver este código HTML simples, não há nada complicado aqui, o único se o formulário carregará arquivos para o servidor, o atributo deve ser registrado enctype \u003d "multipart /forma-dados ".

    Nossa forma ficará assim:

    ExemploScript de download do arquivo php

    Agora vamos descobrir o arquivo PHP que fará o download de arquivos para o servidor. Abaixo está o código-fonte:

    / Em que o arquivo será colocado $ target_path \u003d 'uploaded_files / "; / * Adicione o nome do arquivo original ao nosso caminho de destino. Resultado é" uploaded_files / filename.extension "* / $ target_path \u003d $ target_path. Basename ($ _ Arquivos ["Arquivo"] ["Nome"]); se (move_uploaded_file ($ _ arquivos ["arquivo"] ["tmp_name"], $ target_path) (eco "o arquivo". Arquivo ["arquivo "] [" Nome "])." Foi carregado ";) mais (echo" Houve um erro ao upload do arquivo, por favor, tente novamente! ";)

    Como o script de download do arquivo php?

    o uploader.php é um script de download de arquivo PHP simples para um servidor que irá baixar nossos arquivos em um diretório específico de site especificado pelo $ target_path \u003d "uploaded_files /" string;

    Bem, por si só, tornamos a saída elementar de mensagens usando se / else, ficou claro, nosso arquivo é carregado ou não.

    Hacker Hacking Proteção ao baixar um arquivo

    Consideraremos não apenas a proteção em termos de hackers de hackers, mas também outros problemas indesejados surgindo ao baixar arquivos para o servidor.

    Shell do arquivo PHP.

    Este é o primeiro problema associado ao download de arquivos para o servidor. Quando o arquivo de download tiver um shell PHP, e isso não significa que sua extensão será PHP. Pode ter uma visualização.jpg (.gif ,.png ...). Mas dentro é assim:

    Alguns artesãos também podem executar comandos no servidor usando o surf do URL:

    $ Curl http: //server/uploads/shell.php? Comando \u003d any_unix_command

    Método de proteção:

    Para proteger, você pode implementar a verificação do arquivo MIME. Abaixo, veja o exemplo:

    If ($ _ arquivos ["arquivo"] ["tipo"]! \u003d "Image / gif") (eco "desculpe, somente todos os upload de imagens gif"; saída;)

    Esta peça de código PHP verifica se o arquivo GIF para download é o arquivo. Insira este código antes do script de download do arquivo php. Naturalmente, você pode alterar o cheque no JPG, os arquivos PNGI que você precisa.

    É verdade dizer, e esse método de proteção pode ser ignorado se você enviar um cabeçalho de cabeçalho, com instruções MIME. Para fazer isso, é necessário verificar a disponibilidade Tags no arquivo para download.

    Limitando o tamanho do arquivo baixado

    Também pode haver problemas com grandes tamanhos de arquivos que ocuparão seu espaço em disco. Para fazer isso, escreva um limite no tamanho do arquivo sendo baixado.

    Você pode fazer isso usando um formulário, pois isso você precisa adicionar a seguinte linha ao contexto do formulário HTML:

    Este campo de entrada oculto limitará o tamanho do arquivo para download. Ou você pode verificar o tamanho do arquivo das ferramentas PHP.

    Escreva O.o script de download do arquivo PHP pode ser longo, mas já desmontamos o princípio básico de baixar arquivos para o servidor. Portanto, se alguém tiver mais perguntas, pergunte-lhes nos comentários.

    Hoje, o serviço de download do arquivo para o servidor (hospedagem) é encontrado em todos os sites de redes sociais, placas de boletim, sites de namoro, etc. A essência é para permitir que o visitante do recurso da Web publique seus arquivos (fotos, documentos) na internet.

    Ao fornecer este serviço há um menos substancial. O fato é que, permitindo que você baixe o arquivo para o seu servidor, nós, como se fosse, instale a porta por trás do qual o controle constante é necessário. Como no arquivo do visitante pode não haver apenas informações úteis, mas também um código viral que pode mais tarde permitir que os invasores tenham posse do seu servidor. Dado este menos, você deve verificar cuidadosamente os arquivos antes de baixar para o servidor.

    Mas eu não vou intimidá-lo, mas eu prefiro imaginar sua atenção já feita pronta (script php) para verificar e baixar arquivos para o servidor. A função é 100% de trabalho. Eu mesmo uso nos meus sites. Esse recurso é escrito para baixar arquivos de imagem (fotos) no format.jpg, .gif, .png. Mas se desejar, você pode fazer alterações para adaptar o script PHP às suas necessidades.

    Duas verificações são implementadas no script PHP:

    1. como o Hoster limita, o tamanho do arquivo sendo baixado (no momento em que escreva este material, eu tenho um limite de 8 MB na minha hospedagem), então verificação do tamanho máximo é necessário;
    2. verificar a extensão do arquivo permite cortar arquivos desnecessários antes de baixar.

    Espero que o código de função seja suficientemente explicado para lidar com o arquivo de download para o servidor. Mas se você tiver alguma dúvida, ficarei feliz em responder nos comentários.

    Agora sobre como implementá-lo praticamente

    Colocamos a função de código PHP em um arquivo separado: função.php e coloque-o no servidor no diretório raiz.

    E criar um arquivo HTML no qual postar um Formulário de download de fotos: index.html

    upload.php - manipulador de formulário de arquivo
    Nome \u003d "Botão" - O nome do botão, quando você clica no qual a função de download do arquivo é iniciada ao servidor

    Carregando vários arquivos

    Agora vamos analisar o caso quando você precisar baixar vários arquivos para o servidor.
    Para fazer isso, precisamos em funções.php arquivos update.php e index.html fazem algumas alterações.





    Talvez, isso seja tudo que você precisa implementar o serviço para baixar um arquivo de usuário no servidor (hospedagem).

    Outro recurso que está intimamente relacionado ao download de arquivos gráficos (fotos) é uma função para alterar o tamanho das imagens:

    Formas multipart

    • Web Ierfaces de serviços postais que permitem adicionar um aplicativo à carta (anexar) e, para isso, primeiro você precisa baixar o arquivo para o servidor e somente depois que ele pode ser adicionado à letra;
    • Galerias de fotos interativas e álbuns de fotos que não podem existir sem o mecanismo de download de arquivos para o servidor;
    • Portais de software gratuitos que são usados \u200b\u200bpara trocar arquivos de vários programas, etc.

    O download de um arquivo para um servidor é realizado usando uma multiparte -Form, na qual há um campo de carregamento de arquivos. O parâmetro Encotype indica Multipart / Form-Data:



    Isso vai parecer um determinado formulário multipart que será semelhante (você pode tentar ver o resultado dos formulários multipartes, baixando algum arquivo pequeno para o servidor):

    Formulários multipart usualmente usam o método de transmissão pós. Como pode ser visto no exemplo anterior, este formulário tem dois campos:

    • Campo de seleção de arquivos para download ;
    • O campo de especificar o nome do arquivo que ele terá que ter no servidor .

    Processamento de forma multipart

    Antes de continuar com a gravação de um script de processamento de forma multipart, você precisa editar o arquivo de configuração php.ini. Para permitir o download de arquivos no servidor.

    O arquivo de configuração PHP Php.ini possui três parâmetros associados ao download de arquivos para o servidor:

    • file_uploads \u003d ON - permite que você baixe arquivos no servidor via protocolo HTTP;
    • upload_tmp_dir \u003d / tmp - Define o diretório para armazenar temporariamente os arquivos baixados;
    • upload_max_filesize \u003d 2M - Define a quantidade máxima de arquivos baixados.

    Se o seu servidor da Web tiver executado o sistema operacional Linux, você precisará reiniciar o serviço:

    serviço httpd reiniciar.

    Como o PHP lidou com formas multipartes? Depois de receber o arquivo, ele o salva no diretório temporário upload_tmp_dir, o nome do arquivo é escolhido aleatoriamente. Em seguida, cria quatro variáveis \u200b\u200bde um array superglobal $ _files. Esta matriz contém informações sobre o arquivo baixado.

    Variáveis \u200b\u200bdefinidas para arquivos baixados dependem da versão PHP e da configuração atual. Superglobal $ _files Array está disponível no PHP 4.1.0. Caso a diretiva de configuração registradora é definida pelo valor sOBRE.Além disso, serão declaradas variáveis \u200b\u200bcom nomes apropriados. A partir da versão 4.2.0, o valor padrão para a opção Register_Globals é fora.

    O conteúdo da matriz $ _files para o nosso exemplo são dados abaixo. Observe que é assumido para usar o nome do UploadFile para o campo de seleção de arquivos, de acordo com o formulário de multipart. Claro, o nome do campo pode ser qualquer.

    • $ _Files ["uploadfile"] ["nome"] - o nome do arquivo antes de enviá-lo para o servidor, por exemplo, pict.gif;
    • $ _Files ["uploadfile"] ["tamanho"] - o tamanho do arquivo recebido em bytes;
    • $ _Files ["uploadfile"] ["Tipo"] - tipo MIME de arquivo recebido (se o navegador foi capaz de determiná-lo), por exemplo: Image / Gif, imagem / png, imagem / jpeg, texto / html;
    • (Então, ligamos para o campo de download de arquivos) - contém o nome do arquivo no diretório temporário, por exemplo: / tmp / phpv3b3qy;
    • $ _Files ["uploadfile"] ["Erro"] -Um código de erro que pode ocorrer quando o arquivo é carregado. Chave ["erro"] Foi adicionado ao PHP 4.2.0. Com os códigos de erro apropriados, você pode se familiarizar

    Depois de concluir o script, o arquivo temporário será excluído. Isso significa que devemos copiá-lo para outro lugar até que o script seja concluído. Ou seja, o algoritmo para o cenário de trabalho do download do arquivo para o servidor é:

    Se o botão "Enviar" for pressionado, o arquivo já será baixado para o servidor e seu nome estará no $ _FILES ["uploadfile"] ["nome"] variável. Nesse caso, o script deve copiar imediatamente o arquivo chamado $ _Files ["uploadfile"] ["tmp_name"] Para algum catálogo (você precisa gravar neste diretório).

    Cópia de arquivos é executada por função cópia de () :

    Use apenas a função Copy () Copy () e não se movendo, porque:

    • O arquivo temporário será removido automaticamente;
    • Se um diretório temporário estiver em outra mídia, uma mensagem de erro será exibida.

    Suponha que precisamos baixar o arquivo para o diretório Uploads, que está localizado no diretório raiz do servidor da Web (no diretório DocumentRoot).

    // Apenas no caso, crie um diretório. Se ele já estiver criado,
    // mensagem de erro não veremos, porque usaremos o operador @:

    @mkdir ("uploads", 0777);

    // Copie o arquivo de / tmp nos uploads
    // Nome do arquivo será o mesmo que antes de enviar para o servidor:

    Copiar ($ _ Arquivos ["UploadFile"] ["TMP_NAME"], "Uploads /". Basename ($ _ arquivos ["uploadfile"] ["nome"]);

    No Linux, tudo é muito mais complicado - precisamos levar em conta os direitos de acesso ao catálogo de upload. Mais provável, neste caso, a função mkdir () Não funcionará, já que não temos o direito de escrever para o diretório DocumentRoot (geralmente / var / www / html ou / httpd / html). Registre-se como um sistema raiz, crie um diretório de upload e altere seus direitos de proprietário e de acesso da seguinte maneira:

    // cria catálogo de uploads

    // Instale o nome do proprietário do Apache e seu grupo - também Apache:

    Chown Apache: Uploads do Apache

    // Escreva a resolução para todos (777) + instalação do bit de fixação (1):

    CHMOD 1777 Uploads.

    O tamanho do arquivo pode ser limitado, se desejar, você pode editar o arquivo .htaccess e restringir o acesso ao diretório de upload - especificar ou usuários específicos que você pode acessar o diretório ou endereços IP.

    Agora você pode fazer upload de arquivos para o servidor.

    Nós escrevemos arquivos de download de script PHP para o servidor


    // catálogo em que receberemos o arquivo:
    $ uploaddir \u003d "./files/";
    $ Uploadfile \u003d $ uploaddir. Basename ($ _files ["uploadfile"] ["nome"]);

    // Copie o arquivo do diretório para armazenamento de arquivos temporários:
    if (cópia ($ _files ["uploadfile"] ["tmp_name"], $ uploadfile))
    {
    eco. "

    O arquivo é baixado com sucesso para o servidor.

    " ;
    }
    mais (eco "

    Erro! Falha ao baixar o arquivo para o servidor!

    "
    ; saída; )

    // Exibir informações sobre o arquivo baixado:
    eco. "

    Informações sobre o arquivo carregado no servidor:

    "
    ;
    eco. "

    O nome original do arquivo baixado: ". $ _Files ["uploadfile"] ["nome"]. "

    " ;
    eco. "

    Tipo MIME de arquivo baixado: ". $ _Files ["uploadfile"] ["Tipo"]. "

    " ;
    eco. "

    O tamanho do arquivo carregado em bytes: ". $ _Files ["tamanho"] ["tamanho"]. "

    " ;
    eco. "

    Nome do arquivo temporário: ". $ _Files ["uploadfile"] ["tmp_name"]. "

    " ;

    ?>

    O carregamento de vários arquivos pode ser implementado usando, por exemplo, valores de nome diferentes para a tag de entrada.

    Também prevê a capacidade de obter informações organizadas automaticamente em uma matriz de vários arquivos para download simultâneo. Para implementar essa oportunidade, use a mesma sintaxe de dados da matriz do formulário HTML como para vários campos SELECT e CHECKBOX:


    Envie esses arquivos:






    Caso tal formulário tenha sido enviado, arrays $ _files ["userfile"], $ _files ["userfile"] ["nome"] e $ _files ["userfile"] ["tamanho"] será inicializado (no A mesma maneira como $ http_post_files para PHP 4.1.0 e versões anteriores). Se a diretiva de configuração do Register_Globals for definida pelo valor ON, as variáveis \u200b\u200bglobais associadas também serão inicializadas. Cada uma dessas variáveis \u200b\u200bserá uma matriz numericamente indexada dos valores correspondentes para arquivos recebidos.

    Suponha que os arquivos /home/test/some.html e /home/test/file.bin foram baixados. Nesse caso, os $ _files ["UserFile"] ["Nome"] variável terão algum valor. HTML e os $ _files ["userfile"] variável ["nome"] é file.bin. Da mesma forma, a variável $ _files ["userfile"] ["tamanho"] conterá o tamanho do arquivo alguns.html e assim por diante.

    Variáveis \u200b\u200b$ _files ["userfile"] ["nome"], $ _Files ["userfile"] ["tmp_name"], $ _Files ["userfile"] ["tamanho"] e $ _files ["userfile"] ["tipo"] também será inicializado.

    Conclusão:

    Como você pode ver, não é tão difícil organizar o download de arquivos para o servidor. É mais difícil fornecer o nível de segurança necessário, já que carregar arquivos para o servidor pode ser usado por invasores para o servidor. Como fornecer o nível necessário de segurança, trabalhando com uploads, veja.



    <<< Назад Contente Encaminhar \u003e\u003e\u003e
    Ainda há perguntas ou algo incompreensível - bem-vindo ao nosso