Maison > développement back-end > Problème PHP > Quels sont les moyens de recevoir des paramètres externes en PHP ?

Quels sont les moyens de recevoir des paramètres externes en PHP ?

醉折花枝作酒筹
Libérer: 2023-03-10 13:08:01
avant
2188 Les gens l'ont consulté

Cet article vous présentera comment recevoir des paramètres externes en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Quels sont les moyens de recevoir des paramètres externes en PHP ?

Pour un langage web comme PHP, recevoir des paramètres est une capacité très importante. Après tout, les données transmises depuis le formulaire frontal ou la requête asynchrone doivent être obtenues pour un affichage interactif normal. Bien entendu, il s’agit également d’une fonctionnalité essentielle pour tous les langages capables de développement Web. Aujourd'hui, nous allons examiner différents formulaires d'accès aux paramètres en PHP.

Tout d'abord, nous devons préparer une page statique, comme celle ci-dessous, qui fournit un formulaire et un paramètre GET dans l'url :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form action="?show=1" method="post">
        姓名:<input type="text" name="name"/><br />
        电话:<input type="text" name="tel"/><br/>

        地址(省):<input type="text" name="address.prov"/><br/>
        地址(市):<input type="text" name="address city"/><br/>

        兴趣1:<input type="text" name="interest[]"/><br/>
        兴趣2:<input type="text" name="interest[]"/><br/>
        兴趣3:<input type="text" name="interest[]"/><br/>

        学历1:<input type="text" name="edu[one]"/><br/>
        学历2:<input type="text" name="edu[two]"/><br/>

        <input type="submit" value="提交" >
    </form>
</body>
</html>
Copier après la connexion

Méthodes normales $ _GET, $_POST

// 正常的GET、POST
    echo $_GET[&#39;show&#39;], &#39;<br/>&#39;; // 1
    echo $_POST[&#39;name&#39;], &#39;<br/>&#39;; // 提交的内容
Copier après la connexion

C'est le moyen le plus basique et le plus direct de recevoir des paramètres. Les paramètres GET sont obtenus via $_GET, et les paramètres POST sont obtenus via $_POST. Ils n'interfèrent pas les uns avec les autres.

La méthode normale $_REQUEST

    // 使用REQUEST
    echo $_REQUEST[&#39;show&#39;], &#39;<br/>&#39;; // 1
    echo $_REQUEST[&#39;tel&#39;], &#39;<br/>&#39;; // 提交的内容
Copier après la connexion

$_REQUEST consiste à obtenir les paramètres dans toutes les requêtes, à l'exclusion des fichiers téléchargés. Autrement dit, il inclut tout le contenu des trois variables de paramètres d'accès $_GET, $_POST et $_COOKIE (configuration requise, non incluse par défaut). Une chose à noter ici est qu'après PHP5.3, le paramètre content variable accepté par $_REQUEST est spécifié par request_order dans le fichier php.ini. Par défaut, la valeur de ce paramètre de configuration est GP, c'est-à-dire GET et POST, et il n'y a pas de COOKIE je pense que si vous voulez un COOKIE, vous devez le modifier et ajouter un C.

Que se passe-t-il s'il y a du contenu portant le même nom dans $_GET et $_POST ? L'ordre dans lequel $_REQUEST est affiché est également basé sur l'ordre des paramètres de configuration, de gauche à droite, ce dernier couvrant les précédents. Par exemple, si vous configurez GP, l'ordre de couverture des paramètres est : POST > GET, et l'affichage final est dans le contenu POST.

problème deregister_globals

    // register_globals 如果打开
    echo $name, &#39;<br/>&#39;; // 提交的内容
    echo $tel, &#39;<br/>&#39;; // 提交的内容
Copier après la connexion

Il s'agit d'une configuration dangereuse et est également configurée dans le fichier php.ini. Sa fonction est de convertir directement les paramètres demandés en variables. Il y a un problème de contamination des variables globales, alors ne l'ouvrez pas ! ! ! Le fichier php.ini actuel est désactivé par défaut.

import_request_variables

    // import_request_variables 抱歉,5.4之后已经取消了
    import_request_variables(&#39;pg&#39;, &#39;pg_&#39;);
    echo $pg_show, &#39;<br/>&#39;;
    echo $pg_name, &#39;<br/>&#39;;
Copier après la connexion

Cette fonction enregistre manuellement le contenu de la variable paramètre spécifiée en tant que variable globale. De même, elle a également été annulée après la version 5.4, il y a donc des risques. toutes les fonctions. Voyons s'il y a déjà eu une telle fonction.

extract

    extract($_POST, EXTR_PREFIX_ALL, &#39;ex&#39;);
    echo $ex_name, &#39;<br/>&#39;; // 提交的内容
    echo $ex_tel, &#39;<br/>&#39;; // 提交的内容
Copier après la connexion

extract est actuellement pris en charge comme méthode pouvant remplacer les deux conversions de paramètres ci-dessus. C'est à nous de contrôler l'écrasement des variables existantes, qui est le deuxième paramètre. Cela peut grandement éviter le problème de la contamination des variables globales dans un environnement contrôlable. Bien entendu, le principe est que nous devons nous assurer de l'utiliser nous-mêmes. Concrètement Vous pouvez retrouver la référence du document par vous-même !

. et des espaces dans le nom du paramètre

    // 参数名中的.和空格
    echo $_REQUEST[&#39;address_prov&#39;], &#39;<br/>&#39;; // 提交的内容
    echo $_REQUEST[&#39;address_city&#39;], &#39;<br/>&#39;; // 提交的内容
Copier après la connexion

Si le nom de l'entrée soumise par le formulaire contient . ou des espaces, il sera directement converti en traits de soulignement. Cependant, nous ne recommandons pas d'utiliser des caractères . ou des espaces dans la dénomination frontale. Utilisez simplement des traits de soulignement lorsque cela est nécessaire. Ne créez pas d'ambiguïté entre le front-end et le back-end.

Le [] dans le nom du paramètre

    // 参数名中的[]
    print_r($_REQUEST[&#39;interest&#39;]); // Array (v,....) 
    echo &#39;<br />&#39;;
    print_r($_REQUEST[&#39;edu&#39;]); // Array (k/v,....)
Copier après la connexion

Lorsque le nom de l'entrée soumise par le formulaire est sous la forme d'un tableau, c'est-à-dire "intérêt[ ]" ou "edu[one] " Sous cette forme, les paramètres que nous recevrons deviendront le contenu d'un tableau par défaut.

L'élégant php://input

    // php://input
    $content = file_get_contents(&#39;php://input&#39;);   
    print_r($content); //name=xxx&.....
Copier après la connexion

Enfin, la forme de paramètre php://input est souvent utilisée dans le développement d'interfaces. Généralement, lorsqu’il y a de nombreux champs de sécurité ou de paramètres, le front-end transfère directement toute une section du contenu Body sous forme de Body Raw. Pour le moment, il ne peut être obtenu que sous cette forme. Le contenu original de ce Body Raw sera généralement un paragraphe entier de texte, ou il peut s'agir d'un contenu crypté. Le format peut être défini par vous-même. Face à un formulaire normal, nous recevrons le contenu du formulaire original, tout comme le nom=xxx&tel=xxx&.... ci-dessus.

Il convient de noter qu'il ne peut pas obtenir le contenu lorsque enctype="multipart/form-data" est utilisé. En même temps, cette méthode remplace également la variable globale $HTTP_RAW_POST_DATA. N'utilisez plus la fonctionnalité supprimée. Mettez à jour la nouvelle version de PHP dès que possible pour utiliser les nouvelles fonctionnalités de syntaxe.

Résumé

Après l'avoir trié, j'ai découvert qu'une simple connexion a tellement de formes et de choses qui nécessitent une attention particulière, ce qui est vraiment révélateur. C'est toujours le même dicton, il n'y a pas de fin à apprendre, si vous continuez à étudier en profondeur, tôt ou tard vous deviendrez un maître !

Code de test :

https://github.com/zhangyue0503/dev-blog/blob/master/php/202002/source/%E5%8F%98%E7%9D%80%E8%8A%B1%E6%A0%B7%E6%9D%A5%E6%8E%A5%E5%8F%82%EF%BC%8CPHP%E4%B8%AD%E6%8E%A5%E6%94%B6%E5%A4%96%E9%83%A8%E5%8F%82%E6%95%B0%E7%9A%84%E6%96%B9%E5%BC%8F.php
Copier après la connexion

Apprentissage recommandé : Tutoriel vidéo php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal