Webcoder kod HTTP PUT verilere erişmek mümkün

4 Cevap php

Tümü,

Bir uygulamanın parçası olarak ben, analiz valide tarafından olacak, gelen imageData kabul eden bir HTTP PUT webcoder olması gerekir yazıyorum ve bir yerel dosya deposu eklenmiştir.

Benim sorun olarak boy doğrulama sonra ortaya çıkar

$_SERVER['CONTENT_LENGTH']

a> 0 değeri vardır ve bu değer test dosyası boyutu aynıdır, bu yüzden tüm bu noktaya kadar iyi gittiğini varsayabiliriz but Ben kullanarak gelen akış verileri okumaya çalıştığınızda

file_get_contents('php://stdin');

Ben boş bir dize olsun. Ben de kullanarak denedim

file_get_contents('php://input');

Ve bu bana boş bir dize aynı sonucu verir.

Herhangi bir yardım, öneri veya yön takdir edilecektir.

NB: Ben kullanıyorum

  • PHP 5.2.6
  • Apache 2.0

4 Cevap

Benim en iyi tahminim PUT isteklerini reddetmek değil httpd.conf değiştirmek gerekir olmasıdır. Bunu kontrol ettiniz mi?

Apache HTTPD denies PUT requests by default. You might check out mod_put:
http://perso.ec-lyon.fr/lyonel.vincent/apache/mod_put.html

ve httpd.conf bunu ekleyin:

<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>

Eğer ikinci arg olarak var "r" doğru değil. file_get_contents kullanmayan bir / r / w + / r + / + argümanlar w fopen kullanımları ki /. Muhtemelen bunu kaldırmak istiyorum ve sadece bunu:

file_get_contents('php://input');

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

file_get_contents "r" parametresi almaz - bkz the PHP manual page:

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

Geçerli $flag değerler FILE_USE_INCLUDE_PATH, FILE_TEXT, FILE_BINARY.

"R" bayrağını kaldırarak ve tekrar çalışıyor deneyin

Edit - soru güncellenmiş, "r" bayrak sorunun değil kök yüzden açıkça göz ardı ediliyordu.

Bir reported bug in PHP file_get_contents, bir HTTP POST için boş bir dize dönen ilişkin var gibi görünüyor. Bug açıklama itibaren:

file_get_contents('php://input') (and also file, fopen+fread) does not return POST data, when submited form with enctype="multipart/form-data".

When submited the same form without enctype specified (so default "application/x-www-form-urlencoded" is used) all works OK.

Yani belli bir görüntü yükleme için ideal değildir, hangi uzaklıkta multipart/form-data Belirtilen formu EncType değiştirmek için bir çalışma etrafında benzerini görünüyor - dan W3 FORM specification:

Içerik türü "application / x-www-form-urlencoded" ikili veri veya non-ASCII karakterleri içeren metin büyük miktarlarda göndermek için verimsiz. Içerik türü "multipart / form-data" dosyaları, ASCII olmayan verileri ve ikili veri içeren formlar göndererek için kullanılmalıdır.

Further Edit

Bu hata PHP sürümü çözüldü gibi görünüyor. Eğer okunan tampon bir satırbaşı / satır karakter ile başlamak olmadığından emin olmak için kontrol ettiniz mi? on Sitepoint tartışıldı sizinkine biraz benzer bir sorun var.

Girişine strlen çalıştırmayı deneyin ve uzunluğu ne olduğunu görmek.