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
Foi útil?

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ém file, 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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top