Habituellement, les utilisateurs utilisent les formulaires Web du navigateur pour publier des données sur le serveur. Nous utilisons PHP pour recevoir les données que les utilisateurs publient sur le serveur et les traiter de manière appropriée. Mais dans certains cas, si l'utilisateur utilise un logiciel client pour envoyer des données de publication au programme PHP du serveur et ne peut pas utiliser $_POST pour les identifier, comment doit-il être géré ?
La méthode $_POST reçoit des données
La méthode $_POST est un tableau de variables transmis via la méthode HTTP POST et est une variable globale automatique. Par exemple, si vous utilisez $_POST['name'], vous pouvez recevoir des données publiées à partir de formulaires Web et de pages Web de manière asynchrone, c'est-à-dire que $_POST ne peut recevoir que des données soumises avec le type de document Content-Type : application/x-www. -form-urlencoded.
Méthode $GLOBALS['HTTP_RAW_POST_DATA'] pour recevoir des données
Si les données envoyées par courrier ne sont pas un type de document que PHP peut reconnaître, comme du texte/xml ou du savon, etc., nous pouvons être reçus en utilisant $GLOBALS['HTTP_RAW_POST_DATA']. La variable $HTTP_RAW_POST_DATA contient les données brutes POST. Cette variable est générée uniquement lorsque des données de types MIME non reconnus sont rencontrées. $HTTP_RAW_POST_DATA n'est pas disponible pour les données de formulaire enctype="multipart/form-data". En d'autres termes, l'utilisation de $HTTP_RAW_POST_DATA ne peut pas recevoir de données publiées à partir de formulaires Web.
Recevoir des données via php://input
Si la meilleure façon d'accéder aux données POST d'origine est php://input. php://input permet de lire les données brutes d'un POST. Il exerce moins de pression sur la mémoire que $HTTP_RAW_POST_DATA et ne nécessite aucun paramètre php.ini spécial, tandis que php://input ne peut pas être utilisé avec enctype="multipart/form-data".
Par exemple, l'utilisateur utilise une application client pour publier un fichier sur le serveur. Nous ne nous soucions pas du contenu du fichier, mais nous voulons enregistrer complètement le fichier sur le serveur. Nous pouvons utiliser le code suivant:
$input = file_get_contents('php://input'); file_put_contents($original, $input); //$original为服务器上的文件
Le code ci - dessus utilise file_get_contents('php://input') pour recevoir les données de publication, puis écrit les données dans le fichier $original.En fait, cela peut être compris comme le téléchargement d'un fichier du client vers le serveur. Il existe de nombreuses applications de ce type, en particulier lorsque notre développement PHP doit développer conjointement des produits avec C, C et d'autres développements d'applications. .
Ce qui suit est un petit exemple qui montre trois manières différentes de recevoir le traitement des données POST : $_POST, $GLOBALS['HTTP_RAW_POST_DATA'] et php://input :
a.html
<form name="demo_form" action="post.php" method="post"> <p><label>Name: </label><input type="text" class="input" name="name"></p> <p><label>Address: </label><input type="text" class="input" name="address"></p> <p><input type="submit" name="submit" class="btn" value="Submit"></p> </form>
post.php
header("Content-type:text/html;charset=utf-8"); echo '$_POST接收:<br/>'; print_r($_POST); echo '<hr/>'; echo '$GLOBALS[\'HTTP_RAW_POST_DATA\']接收:<br/>'; print_r($GLOBALS['HTTP_RAW_POST_DATA']); echo '<hr/>'; echo 'php://input接收:<br/>'; $data = file_get_contents('php://input'); print_r(urldecode($data));
Ce qui précède représente l'intégralité du contenu de cet article. J'espère que tout le monde pourra comprendre les trois manières dont PHP reçoit les données de publication.
Pour plus d'articles sur la façon dont PHP reçoit les données POST, veuillez faire attention au site Web chinois de PHP !