Как я могу обработать объявления длинных заголовков в запросах PHP? - PullRequest
3 голосов
/ 11 декабря 2010

Я пытаюсь использовать API Picasa Web Uploader для загрузки галерей фотографий на мой веб-сайт. Мне удалось реализовать кнопку, настроить ее в Picasa и заставить работать аутентификацию, но когда дело доходит до обработки POST, полученного моим сайтом из Picasa, массив $_FILES всегда пуст.

Я посмотрел на запрос, отправленный Picasa с помощью Fiddler, и смог определить, что заголовок Content-Disposition в начале каждой части файла состоит из слишком длинных - заголовок отправлен сквозной 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?

Ответы [ 2 ]

3 голосов
/ 11 декабря 2010

Ты облажался.

Но вы все равно можете использовать пару обходных путей для достижения этой цели. Вам нужно будет проанализировать полученные данные формы самостоятельно. Другая проблема заключается в том, что PHP не позволит вам увидеть необработанные mutlipart / form-data, поэтому вам нужно:

Альтернативой является исправление интерпретатора PHP. : /

1 голос
/ 11 декабря 2010

Что ж, если вам действительно нужен доступ к необработанному входящему телу HTTP, то вы можете использовать http_get_request_body () , если у вас установлен модуль PECL, если нет, то есть обертка потока, я считаю:

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

Хотя это далеко не идеально, я не знал, что $_FILES имел эту проблему, на которую нужно обратить внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...