Incapaz de dados HTTP PUT acesso no código webservice
-
02-07-2019 - |
Pergunta
All,
Como parte de um aplicativo que estou escrevendo eu preciso ter um webservice PUT HTTP que aceita imagedata de entrada, que por analisados, validados e adicionado a um armazenamento de arquivos local.
Meu problema surge após a validação tamanho que o
$_SERVER['CONTENT_LENGTH']
tem um> 0 valor, e esse valor é idêntico ao tamanho do arquivo de teste, para que eu possa assumir que tudo está indo bem até este ponto e quando tento ler os dados fluxo de entrada usando
file_get_contents('php://stdin');
Eu recebo uma cadeia vazia. Eu também tentei usando
file_get_contents('php://input');
E isso dá-me o mesmo resultado de uma cadeia vazia.
Qualquer ajuda, sugestões ou orientações serão apreciados.
Nota: eu estou usando
- PHP 5.2.6
- Apache 2.0
Solução
Meu melhor palpite é que você precisa alterar httpd.conf para não negar solicitações PUT. Você verificou isso?
Outras dicas
Apache HTTPD nega solicitações formuladas pelo padrão. Você pode verificar mod_put:
http://perso.ec-lyon.fr/lyonel.vincent/ apache / mod_put.html
e adicione a httpd.conf:
<Location /upload/dir> EnablePut On AuthType Basic AuthName "Web publishing" AuthUserFile /www/etc/passwd AuthGroupFile /www/etc/group <Limit PUT> require valid-user </Limit> </Location>
file_get_contents
não leva o parâmetro "r" - consulte o PHP Manual página :
string file_get_contents ( string $filename [, int $flags...)
Os valores válidos são $flag
FILE_USE_INCLUDE_PATH, FILE_TEXT, FILE_BINARY
.
Tente remover a bandeira "r" e tentar novamente
Editar - pergunta atualizado, "r" bandeira estava sendo ignorado por isso, evidentemente, não a raiz do problema.
Parece que há um relatou bug no PHP sobre file_get_contents
retornando um string vazia por um HTTP POST. A partir da descrição bug:
file_get_contents('php://input')
(e tambémfile, fopen+fread
) não dados de retorno POST, quando submetidos forma com enctype = "multipart / form-data".Quando submetidos a mesma forma sem enctype especificado (de modo padrão "Application / x-www-form-urlencoded" é usado) tudo OK funciona.
Portanto, parece que uma solução alternativa é mudar o enctype forma especificada longe de multipart/form-data
, o que obviamente não é ideal para um upload de imagem - a partir do W3 FORM especificação :
O tipo de conteúdo "application / x-www-form-urlencoded" é ineficiente para o envio de grandes quantidades de dados binários ou texto que contenham caracteres não-ASCII. O tipo "multipart / form-data" conteúdo deve ser usado para envio de formulários que contêm arquivos, dados não-ASCII e dados binários.
Além disso Editar
Este bug parece ter sido resolvido em sua versão do PHP. Você tem verificado para se certificar de que o buffer está sendo lido em não começar com um retorno de carro de char / nova linha? Há um problema um pouco semelhante ao seu que foi discutido em Sitepoint .
Tente executar strlen
na entrada e ver o que o comprimento é.
O r
você tem como o segundo arg não está certo. não file_get_contents
não usar os argumentos a/r/w/a+/r+/w+
que usos fopen
. Você provavelmente vai querer removê-lo e apenas fazer:
file_get_contents('php://input');
Consulte http://us3.php.net/file_get_contents .