Pregunta

Todos,

Como parte de una aplicación que estoy escribiendo, necesito tener un servicio web HTTP PUT que acepte los datos de imágenes entrantes, que se analizarán, validarán y agregarán a un almacén de archivos local.

Mi problema surge después de la validación de tamaño como

  

$_SERVER['CONTENT_LENGTH'cons

tiene un > 0, y este valor es idéntico al tamaño del archivo de prueba, por lo que puedo asumir que todo va bien hasta este punto pero cuando trato de leer los datos de flujo entrantes utilizando

  

file_get_contents('php://stdin');

Me sale una cadena vacía. También he intentado usar

  

file_get_contents('php://input');

Y esto me da el mismo resultado de una cadena vacía.

Cualquier ayuda, sugerencia o dirección será apreciada.

NB: estoy usando

  • PHP 5.2.6
  • Apache 2.0
¿Fue útil?

Solución

Mi mejor conjetura es que necesita alterar httpd.conf para no denegar solicitudes PUT. ¿Has comprobado eso?

Otros consejos

Apache HTTPD niega las solicitudes PUT por defecto. Podrías revisar mod_put:
http://perso.ec-lyon.fr/lyonel.vincent/ apache / mod_put.html

y agregue esto 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 no toma la " r " parámetro: consulte la página del manual de PHP :

string file_get_contents  ( string $filename  [, int $flags...)
Los

valores válidos de $ flag son FILE_USE_INCLUDE_PATH, FILE_TEXT, FILE_BINARY .

Intente eliminar la " r " marcar e intentar nuevamente

Editar : pregunta actualizada, " r " La bandera estaba siendo ignorada, por lo que evidentemente no era la raíz del problema.

Parece que hay un error informado en PHP con respecto a file_get_contents devolviendo una cadena vacía para un POST HTTP. De la descripción del error:

  

file_get_contents ('php: // input') (y también file, fopen + fread ) no   devolver datos POST, cuando se envía el formulario con   enctype = " multipart / form-data " ;.

     

Cuando se envía el mismo formulario sin enctype especificado (por defecto   " aplicación / x-www-form-urlencoded " se usa) todo funciona bien.

Por lo tanto, parece que una solución alternativa es cambiar el tipo de formulario especificado lejos de multipart / form-data , lo que obviamente no es ideal para cargar una imagen, desde Especificación W3 FORM :

  

El tipo de contenido " application / x-www-form-urlencoded " es ineficiente para enviar grandes cantidades de datos binarios o texto que contiene caracteres que no son ASCII. El tipo de contenido " multipart / form-data " debe utilizarse para enviar formularios que contengan archivos, datos que no sean ASCII y datos binarios.

Edición adicional

Este error parece haberse resuelto en su versión de PHP. ¿Ha comprobado para asegurarse de que el búfer que se está leyendo no comienza con un char-return / newline char? Hay un problema similar al suyo que se discutió en Sitepoint .

Intente ejecutar strlen en la entrada y vea cuál es la longitud .

El r que tienes como segundo argumento no es correcto. file_get_contents no usa los argumentos de a / r / w / a + / r + / w + que usa fopen . Probablemente quieras eliminarlo y simplemente hazlo:

file_get_contents('php://input');

Consulte http://us3.php.net/file_get_contents .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top