PHP — не удается получить переменные, размещенные с помощью PUT

#php #put

#php #put

Вопрос:

Я делаю PUT запрос, но не могу получить доступ к отправленным данным, я всегда string(0) "" возвращаюсь.

Код, который я использую для получения PUT данных, является:

 public function editProduct($id) {

    $put = file_get_contents('php://input',true);

    return var_dump($put);
}
  

Запрос PUT

 thanasisem@debian:~$ curl -i -X PUT -d arg=123 -d arg2=345 localhost/laravelproject/public/products/5
HTTP/1.1 200 OK
Date: Mon, 30 Jun 2014 17:22:59 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14 deb7u11
Cache-Control: no-cache
X-Frame-Options: SAMEORIGIN
Set-Cookie: laravel_session=eyJpdiI6IjdcL3dYVlM1ZXZOZ0JHMVQrb1o1ME1sa3c3QTdTNnRXUnhxTWFDeHJSVDBJPSIsInZhbHVlIjoicTVPb2QwdThNRE1xUnh4VWZnWW5FT3ZTQUxKaE1RdWtycjNVUmlPWVZCZmVNcVBaVFY0Z0k1bEpSV0phVG5TckNWSkh1S2tsR1NEbmxvcFpna3lDOEE9PSIsIm1hYyI6ImI4ZmRlZTM1ODAyNDY3YjY5ZGQyZTE5NGZiMTEzZWVlOWUzZDIyZTI4MmE3MjM4MDM5NGFkZTRjOWQ4Yzk2OGQifQ%3D%3D; expires=Mon, 30-Jun-2014 19:22:59 GMT; path=/; httponly
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

string(0) ""
thanasisem@debian:~$ 
  

Комментарии:

1. Я предполагаю, что это в контексте функции? Покажите весь ваш код, необходимый для воспроизведения этого.

2. Просто обновил код.

3. Ошибок нет? Если вы повторяете что-то после своего вызова editProduct() , видите ли вы его вывод?

4. Вы говорите, что ваш вывод гласит: string(0) "" ?

5. Если это так, то file_get_contents() работает нормально. Покажите захват пакета вашего запроса и отредактируйте свой вопрос, чтобы включить то, что вы получаете обратно.

Ответ №1:

Решаемая.

Мне пришлось ввести -H 'Content-Type: application/json' свой PUT запрос, чтобы он работал.

Созданный мной успешный PUT запрос выглядит следующим образом:

 curl -X PUT -H 'Content-Type: application/json' -d '{"firstName":"Kris", "lastName":"Jordan"}' localhost/laravelproject/public/products/5
  

Ответ №2:

RTM: http://php.net/var_dump

var_dump выполняет немедленный вывод и имеет void возвращаемый тип. Итак, вы выводите все, что вы загрузили, а затем возвращаете практически ничего.

Вы, вероятно, хотите

 return file_get_contents('php://input');
  

вместо этого.

Комментарии:

1. Это не должно иметь значения Marc, он должен видеть вывод var_dump . Он добавил больше информации в комментариях выше. Что-то не так с запросом.