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

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

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

person Dexter    schedule 10.12.2010    source источник
comment
не уверен, хорошее это решение или плохое, но почему бы не использовать что-то вроде tinyurl для сокращения этих URL-адресов?   -  person yoda    schedule 11.12.2010
comment
Я согласен с тем, что лучше всего уменьшить длину URL-адреса в этом заголовке @yoda, но, к сожалению, я не могу контролировать запрос POST, созданный Picasa.   -  person Dexter    schedule 11.12.2010


Ответы (2)


Ты пьян.

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

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

person mario    schedule 10.12.2010

Ну, если вам действительно нужен доступ к необработанному входящему HTTP-телу, вы можете использовать http://www.php.net/manual/en/function.http-get-request-body.php, если у вас установлен модуль PECL, если нет, то я считаю, что существует оболочка потока:

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

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

person Orbling    schedule 10.12.2010