Récupérer les données Json envoyé par la méthode PUT en PHP

Vous connaissez probablement déjà $_GET, $_POST et $_REQUEST mais que pensez vous de $_PUT? $_PUT (ainsi que $_HEAD et $_DELETE) n’existe pas en PHP, mais vous n’inquiétez pas! Nous pouvons créer un tableau $_PUT.

Puisque PHP n’a pas de variable $_PUT similaire à $_GET et $_POST pour récupérer les valeurs transmises, nous utilisons les flux d’entrée (input stream ‘php://input’).
 
 
Regardons d’abord les trois fonctionnalités ci-dessous:

  • php://input: Il s’agit d’un flux en lecture seule(read-only stream) qui nous permet de lire les données brutes du corps d’une requête. Il renvoie toutes les données brutes après les en-têtes HTTP de la requête, quel que soit le type de contenu.
  • file_get_contents(): Cette fonction en PHP est utilisée pour lire un fichier dans une chaîne.
  • json_decode(): Cette fonction prend une chaîne JSON et la convertit en une variable PHP qui peut être un tableau ou un objet.

 
On sait que les données peuvent être reçus dans un script PHP en utilisant la variable globale $_POST[]. Mais cela échoue dans le cas où nous voulons recevoir les données envoyées par la méthode PUT. Pour recevoir les données JSON, nous pouvons utiliser php://input avec la fonction file_get_contents() qui nous aide à recevoir les données JSON sous forme de fichier et à les convertir dans une chaîne.

Plus tard, nous pouvons utiliser la fonction json_decode() pour décoder la chaîne JSON.

Nous pouvons créer un tableau $_PUT avec le code suivant:

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'PUT')
{
	$_PUT = array();
	parse_str(file_get_contents("php://input"), $_PUT);

	foreach ($_PUT as $key => $value)
	{
		echo $key . " : " . $value;
	}
}
?>

 
Voir aussi comment envoyer une requête GET/POST/PUT/DELETE via cURL en PHP.
 
 
Tutoriel cURL

Une réflexion sur “Récupérer les données Json envoyé par la méthode PUT en PHP

  • mars 11, 2021 à 7:11 pm
    Permalien

    Merci pour les cours bien détaillés

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *