2010-12-10 65 views
3

我正在嘗試使用Picasa Web Uploader API將照片庫上傳到我的網站。我已經能夠實現該按鈕,在Picasa中設置它並使驗證正常工作,但是當涉及到處理我的站點從Picasa收到的POST時,$_FILES陣列始終爲空。如何在PHP請求中處理長頭部聲明?

我查看了Picasa使用Fiddler發佈的請求,並且已經能夠確定在每個文件多部分開頭的Content-Disposition標頭是too long - Picasa發送的標頭包含完整路徑我的服務器上的文件,所以它最終被遠遠超過128個字符:

Content-Disposition: form-data; name="http://localhost:50216/1f6b3b29edc6f9d8898ede07c1b10e27/image/415603f72f75af1a.jpg?size=640"; filename="DSC_0055.JPG" 

看來,PHP只能處理頭最多128個字符,並且整個多局部部分如果頭丟棄太長。 (當我縮小Fiddler中這個標題的長度並重新發布請求時,我的網站收到$_FILE併成功處理它)。

我該如何解決這個問題?

  • 我可以在某處設置配置設置以允許PHP處理長頭並接收$ _FILE數組中的數據嗎?
  • 或者,除了$ _FILE數組之外,還可以通過其他方式訪問缺少的多部分部分嗎?
+0

不知道這是好還是壞的溶劑,但爲什麼不使用tinyurl之類的東西來縮短這些URL? – yoda 2010-12-10 21:17:18

+0

我同意最好減少該標頭@yoda中url的長度,但不幸的是,我無法控制由Picasa生成的POST請求。 – Dexter 2010-12-11 18:12:41

回答

3

你搞砸了。

但是,您可以使用一些解決方法來實現它。您需要自己解析收到的表單數據。另一個問題是,PHP不會讓你看到原始mutlipart/form-data的,所以你需要:從file_get_contents("php://stdin")

  • 向上突破/ form-data的讀

    另一種方法是打補丁的PHP解釋器。 :/

  • 1

    那麼,如果你真的需要訪問原始的傳入的HTTP體,那麼你可以使用http_get_request_body()如果您已經安裝了PECL模塊,如果沒有,那麼有一個流封裝我相信:

    $httpBody = @file_get_contents('php://input'); 
    

    遠從理想,但我不知道$_FILES有這個問題,要注意的東西。