array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'pt_BR', ), 'this' => array ( 0 => 'features.file-upload.put-method.php', 1 => 'Suporte ao método PUT', ), 'up' => array ( 0 => 'features.file-upload.php', 1 => 'Gerenciar o upload de arquivos', ), 'prev' => array ( 0 => 'features.file-upload.multiple.php', 1 => 'Enviando múltiplos arquivos', ), 'next' => array ( 0 => 'features.file-upload.errors.seealso.php', 1 => 'Veja Também', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'features/file-upload.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
O PHP oferece suporte para o método HTTP PUT utilizado por alguns clientes para armazenar arquivos em um servidor. Requisições PUT são muito mais simples que o upload de arquivos usando requisições POST, elas se parecem com algo assim:
PUT /path/filename.html HTTP/1.1
Isso normalmente significaria que o cliente remoto gostaria de salvar
o seguinte conteúdo: /path/filename.html em seu diretório web.
É óbvio não se tratar de uma boa ideia que o Apache ou o PHP permitam automaticamente que todos
sobrescrevam qualquer arquivo em seu diretório web. Então, para considerar isso como uma
requisição é necessário dizer ao seu servidor web que você quer que um determinado
script PHP cuide dessa requisição. Para fazer isso no Apache utilize
a diretiva Script. Ela pode ser colocada
quase em qualquer local de seu arquivo de configuração do Apache. Um
local comum é dentro de um bloco <Directory>
ou talvez dentro de um bloco <VirtualHost>
.
Uma linha como a seguinte deve funcionar:
Script PUT /put.php
Isto diz ao Apache para enviar todas as requisições PUT paras as URIs que combinem com o contexto dessa linha para o script put.php. Isto assume que o PHP esteja ativo e permita extensões .php. O destino para todas as requisições PUT para esse script deve ser o próprio script, não o nome do arquivo enviado.
Com o PHP pode ser feito algo como se segue no script put.php. Isso copia o conteúdo de um arquivo enviado para o arquivo myputfile.ext no servidor. Provavelmente é necessário a realização de algumas verificações e/ou autenticação de usuário antes de realizar essa cópia.
Exemplo #1 Salvando arquivos HTTP PUT
<?php
/* PUT data vem do fluxo stdin */
$putdata = fopen("php://input", "r");
/* Abre um arquivo para escrita */
$fp = fopen("myputfile.ext", "w");
/* Lê os dados 1KB de cada vez
e escreve no arquivo */
while ($data = fread($putdata,1024))
fwrite($fp,$data);
/* Fecha os fluxos */
fclose($fp);
fclose($putdata);
?>