Возможно ли получить весть запрос клиента?

  • Автор темы Автор темы _RVK_
  • Дата начала Дата начала
>А откуда по твоему я узнаю где файл лежит и как называется?

Он нигде не лежит. Ссылка на него находится в массиве _FILES. Эта ссылка указывает на файл, который находится в темповой директории. И лежит он там доли секунды. Если ты его никуда не скопировал, он стирается.
Поэтому, сначала нужно записать файл куда ты хочешь, а уже потом проводить всякие манипуляции.

>Вот этот размер не нулевой, но как я понимаю этот размер передал браузер.

И что, по твоему броузеру надо тебе обманывать? :-)
Выведи то что передал броузер прямо в броузер и смотри что так такое.
 
Хочется в скрипте получить всю информацию переданную клиентом по HTTP. apache_request_headers выводит только заголовок. Можно ли как-то получить тело?
Да
PHP:
file_get_contents('php://input');

-~{}~ 05.05.05 19:45:

Есть еще один способ: установить в php.ini
always_populate_raw_post_data = On
после чего использовать массив $HTTP_RAW_POST_DATA

Но все эти способы работают только в случае, если Content-Type в HTTP-запросе клиента не равно multipart/form-data. Поэтому вышеназванные способы для тебя не подходят.

Хотя есть способ для извращенцев. ПХП использует функцию rfc1867_post_handler вместо стаднартной php_std_post_handler для чтения тела HTTP-запроса, у которого Content-Type равно multipart/form-data. Первая функция, в отличие от второй, копирует тело HTTP-запроса в строку SG(request_info).raw_post_data, что позволяет использовать file_get_contents('php://input'). Несложно подправить функцию rfc1867_post_handler, чтобы она также выполняла это копирование.
 
Поэтому, сначала нужно записать файл куда ты хочешь, а уже потом проводить всякие манипуляции
Спасибо Кром, а я собирался зранить все закачиваемые картинки в темповой директории :) Конечно, я это знаю. Но копируется тот же файл с нулевым размером!
И что, по твоему броузеру надо тебе обманывать
Не надо. Но возможно кто то попути от браузера до пхп что то(мало ли там софта моет быть, фаерволы разные, прокси...) меняет в теле запроса. Даже предпология что на 90% там все нормально, и запрос приходит именно таким, каким его отослал браузер, я хочу это увидеть, а не предпологать.

Выведи то что передал броузер прямо в броузер и смотри что так такое
Не понял. Браузер передал текст, оформленный согласно RFC2616. Прям это и вывести? Так я же как раз и спрашиваю КАК?

valyala
Спасибо. Это какая-то недокументированная возможность, или я что-то в мане профукал :)
 
А проще написать cgi-приложение на том же перле или С++ и перенаправить стандартный поток ввода в стандартный поток вывода:
Код:
#include <iostream>

int main()
{
    char c;
    std::cout << "Content-Type: text/text\n\n";
    while (std::cin.get(c)) std::cout.put(c);
}

-~{}~ 05.05.05 20:20:

Спасибо. Это какая-то недокументированная возможность, или я что-то в мане профукал
Все документировано: http://php.net/wrappers.php
 
>Но возможно кто то попути от браузера до пхп что то(мало ли там софта моет быть, фаерволы разные, прокси...) меняет в теле запроса.

Ты что не знаешь, что находится между твоим броузером и твоим сервером? Ты меня поражаешь все больше...

>Браузер передал текст, оформленный согласно RFC2616. Прям это и вывести?

Выведи то, что лежит в папке tmp:
var_dump($_FILES);
echo file_get_contents($_FILES['file_name']['tmp_name']);
после загрузки файла. И смотри что там лежит.
 
Выведи то, что лежит в папке tmp:
var_dump($_FILES);
echo file_get_contents($_FILES['file_name']['tmp_name']);
Сделал. Давно. Я с этого и начал.

Ты что не знаешь, что находится между твоим броузером и твоим сервером?
Что находится между моим браузером и моим сервером я знаю и все работает. А вот что находится между тестовым сервером фирмы и моим браузером я не знаю. Об этом знает админ. Но прежде чем копать сервер, он хочет убедится что пхп здесь не причем. Нужно сузить радиус поиска.
 
>Сделал. Давно. Я с этого и начал.

И что показывает, если, допустим, послать на сервер текстовый файл с текстом "test" внутри? Скопируй-ка сюда.
 
Кром
Сейчас не могу проверить. Только завтра на работе. Пока пробовал только на картинках. Но, честно говоря, не пойму чем текстовый файл принципиально отличается от картинки.
 
Все, админ решил не дожидаться окончания нашего разговора и все переустановить :) Посмотрим что получится....

-~{}~ 06.05.05 09:51:

Все заработало. На вопрос адимну: "Че сделал?" он ответил "А хер его знает"
 
Сверху