Suporte ao método PUT

O suporte ao método PUT mudou entre PHP 3 e PHP 4 . No PHP 4 , deve se usar a entrada padrão para ler os conteúdos de um PUT .

Exemplo 18-4 . Salvando arquivos HTTP PUT com o PHP 4

 
?php

 
/

 
*

 
PUT

 
data

 
vem

 
do

 
stdin

 
stream

 
*

 
/

 
$putdata

 
=

 
fopen(

 
"php

 
:

 
/

 
/stdin"

 
,"r")

 
;

 
/

 
*

 
Abre

 
um

 
arquivo

 
para

 
escrita

 
*

 
/

 
$fp

 
=

 
fopen("myputfile.ext"

 
,"w")

 
;

 
/

 
*

 


 
os

 
dados

 
1KB

 
de

 
cada

 
vez

 
e

 
escreve

 
no

 
arquivo

 
*

 
/

 
while

 
($data

 
=

 
fread($putdata,1024)

 
)

 
fwrite($fp,$data)

 
;

 
/

 
*

 
Fecha

 
os

 
streams

 
*

 
/

 
fclose($fp)

 
;

 
fclose($putdata)

 
;

 
?





Nota : Toda a documentação abaixo aplica-se ao PHP 3 somente .

PHP prove suporte para o método HTTP PUT usado por clientes como Netscape Composer e W3C Amaya . Requisições PUT são muito mais simples do que o upload de arquivo e se parecem com isto :






Isto normalmente indica que o cliente remoto gostaria de salvar o conteúdo que se segue como : / path / filename.html na sua arvore web . É obvio que não é uma boa idéia para o Apache ou o PHP automaticamente permitir que todos possam sobrescrever arquivos na sua arvore web . Então , para manusear este tipo de requisição você tem primeiro que dizer ao seu servidor web que você quer que um certo script PHP cuide da requisição . No apache você faz isto com a diretiva Script . Pode ser colocada praticamente em qualquer lugar do seu arquivo de configuração do Apache . Um lugar comum é dentro de um bloco Directory ou talvez dentro de um bloco Virtualhost . Uma linha como esta deve fazer o truque :






Isto diz para o apache enviar todas as requisições PUT que estejam no contexto que você colocou esta linha para o script put.php . Isto assume , é claro , que você tem o PHP ativado para a extensão .php e que o PHP esta ativo .

Dentro do seu arquivo put.php você deve então fazer algo parecido com isto :






Isto deve copiar o arquivo para a localização requisitada pelo cliente remoto . Você provavelmente quer fazer alguma checagem e / ou autenticar o usuário antes de fazer esta copia de arquivo . O único truque aqui é que quando o php uma requisição com o método PUT ele guarda o arquivo carregado em um arquivo temporário justo como se fosse manuseado pelo método POST . Quando a requisição termina , este arquivo temporário é apagado . Assim seu script de manuseio do PUT tem que copiar este arquivo em outro lugar . O nome deste arquivo temporário esta na variável $PHP_PUT_FILENAME , e você pode ver o nome de arquivo de destino sugerido em $REQUEST_URI ( deve variar em servidores diferentes do apache ) . Este nome do arquivo de destino é o que o cliente remoto especificou . Você não tem que ouvir o cliente . Você pode , por exemplo , copiar todos os arquivos carregados para um diretório especial de uploads .