request_parse_body în PHP

Citește corpul unei cereri PUT, PATCH sau DELETE la fel cum PHP completează $_POST și $_FILES.

Sintaxă
request_parse_body(?array $options = null): array

Ce face request_parse_body

PHP completează automat $_POST și $_FILES doar pentru cererile POST. Un API REST primește însă și cereri PUT sau PATCH cu formulare. request_parse_body interpretează corpul acestor cereri (application/x-www-form-urlencoded sau multipart/form-data) și returnează două tablouri: câmpurile și fișierele.

Corpul cererii poate fi citit o singură dată. Pentru JSON nu ai nevoie de această funcție: folosești json_decode(file_get_contents("php://input"), true).

Parametri

Parametru Descriere
$options Opțional. Limite care înlocuiesc setările din php.ini, de exemplu ["post_max_size" => "10M"].

Ce returnează

Un tablou cu două elemente: [$campuri, $fisiere]. Aruncă RequestParseBodyException la eroare.

Exemple

Exemplul 1: Actualizarea unui produs cu PUT

<?php
if ($_SERVER["REQUEST_METHOD"] === "PUT") {
    [$campuri, $fisiere] = request_parse_body();
    echo "Produs actualizat: " . $campuri["nume"] . ", " . $campuri["pret"] . " lei";
}

Rezultat pe server, pentru o cerere PUT cu nume=Husă telefon&pret=45

Produs actualizat: Husă telefon, 45 lei

Exemplul 2: Fără cerere HTTP

Din linia de comandă nu există o cerere de citit, așa că funcția aruncă o excepție.

<?php
try {
    request_parse_body();
} catch (RequestParseBodyException $e) {
    echo get_class($e) . ": " . $e->getMessage();
}

Rezultat

RequestParseBodyException: Request does not provide a content type

Greșeli frecvente

  • Folosești funcția pentru un corp JSON. Ea înțelege doar formulare. Pentru JSON citește php://input și decodează cu json_decode.

Comenzi înrudite