Exemple de code de développement d'interface d'application mobile et d'arrière-plan PHP

小云云
Libérer: 2023-03-21 10:28:01
original
7115 Les gens l'ont consulté

Cet article partage principalement avec vous l'exemple de code de développement du backend PHP et de l'interface d'application mobile, dans l'espoir d'aider tout le monde.

1. Interface du programme d'application mobile (client)

Ici est utilisé sur. PC Utiliser le programme C++ pour simuler le POST des données du protocole HTTP

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <unistd.h>
using namespace std;

#define DEST_IP "10.209.177.22"
#define DEST_PORT 80
#define MAX_DATA_SIZE 1024

int main()
{
        int ret;
        int sockfd;
        struct sockaddr_in dest_addr;
        memset(&dest_addr, 0x00, sizeof(sockaddr_in));
        dest_addr.sin_family = AF_INET;
        dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
        dest_addr.sin_port = htons(DEST_PORT);

        cout << "dest addr IP:" << inet_ntoa(dest_addr.sin_addr) << endl;

        sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (sockfd < 0) {
                cout << "create socket fail!" << endl;
                exit(1);
        }

        ret = connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));
        if (ret != 0) {
                cout << "connect server fail!" << endl;
                close(sockfd);
                exit(1);
        } else {
                cout << "connect server success!" << endl;
        }
        cout << endl;

        int sendlen, recvlen;
        char sendbuf[MAX_DATA_SIZE] = {0};
        char recvbuf[MAX_DATA_SIZE] = {0};
        string body("user=hello&password=123456");
        int content_length = body.length();
        snprintf(sendbuf, sizeof(sendbuf) - 1,
        "POST /api.php HTTP/1.1\r\n"
        "Host: 10.209.177.22\r\n"
        "Content-Type: application/x-www-form-urlencoded\r\n"
        "Content-Length: %d\r\n",
        content_length
        );
        strcat(sendbuf, "\r\n");
        strcat(sendbuf, body.c_str());

        sendlen = send(sockfd, sendbuf, sizeof(sendbuf), 0);
        if (sendlen < 0) {
                cout << "send fail" << endl;
                close(sockfd);
                exit(1);
        }

        if ((recvlen = recv(sockfd, recvbuf, sizeof(recvbuf), 0)) == -1) {
                cout << "recv fail" << endl;
                close(sockfd);
                exit(1);
        } else {
                cout << recvbuf << endl;
        }

        close(sockfd);

        return 0;
}
Copier après la connexion

2. Programme de test PHP en arrière-plan

<?php
$input = file_get_contents("php://input");
var_dump($input);

if ($_POST[&#39;user&#39;] == "hello" && $_POST[&#39;password&#39;] == "123456") {
    echo "welcome hello";
} else {
    echo "welcome guest";
}
?>
Copier après la connexion

3. Effet d'implémentation


Dans l'image ci-dessus, le programme client C++, une fois les données POST envoyées en arrière-plan Nginx+PHP, PHP obtient les données POST via les deux premières méthodes suivantes :

Méthode 1. La méthode la plus courante est : $_POST['fieldname'];
Remarque : seules les données soumises par Content-Type : application/x-www-form-urlencoded peuvent être reçues.
Explication : Il s'agit des données POST du formulaire.

Méthode 2, file_get_contents("php://input");
Description :
Permet de lire les données originales du POST.
Il met moins de pression sur la mémoire que $HTTP_RAW_POST_DATA et ne nécessite aucun paramètre php.ini spécial.
php://input ne peut pas être utilisé avec enctype="multipart/form-data".
Explication :
Pour les données POST sans Content-Type spécifié, vous pouvez utiliser file_get_contents("php://input");
En fait, cette méthode peut être utilisée pour recevoir n'importe quelle donnée POST en utilisant PHP. Quel que soit le type de contenu, l'inclusion de flux de fichiers binaires est également acceptable.

La méthode 2 est donc la méthode la plus sûre.

Méthode 3, $GLOBALS['HTTP_RAW_POST_DATA'];

Explication :
Générez toujours la variable $HTTP_RAW_POST_DATA contenant les données POST d'origine.
Cette variable n'est générée que lorsque des données avec des types MIME non reconnus sont rencontrées.
$HTTP_RAW_POST_DATA n'est pas disponible pour les données du formulaire enctype="multipart/form-data"
Si les données publiées ne sont pas reconnues par PHP, vous pouvez utiliser $GLOBALS['HTTP_RAW_POST_DATA'] pour les recevoir,
comme du texte /xml ou du savon, etc.
Explication :
$GLOBALS['HTTP_RAW_POST_DATA'] stocke les données originales du POST.
$_POST ou $_REQUEST stocke les données formatées par PHP sous la forme clé=>valeur.

Mais le fait que les données POST soient enregistrées dans $GLOBALS['HTTP_RAW_POST_DATA'] dépend du paramètre Content-Type, c'est-à-dire que lors du POSTing des données, Content-Type doit être explicitement spécifié : application/ x-www -form-urlencoded, les données POST seront stockées dans $GLOBALS['HTTP_RAW_POST_DATA'].

Pour télécharger des fichiers, utilisez POST enctype="multipart/form-data". Exemple de code backend PHP :

<!DOCTYPE>
<html>
<body>

<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="file" id="file" />
<input type="submit" value="submit" />
</form>

<?php
echo "<pre class="brush:php;toolbar:false">";
print_r($_FILES);
if ($_FILES["file"]["error"] > 0) {
    echo "Error: " . $_FILES["file"]["error"] . "<br>";
} else {
    $file = fopen($_FILES["file"]["tmp_name"], "r");
    while (!feof($file)) {
        echo fgetc($file);
    }
    fclose($file);
}
?>

</body>
</html>
Copier après la connexion

Recommandations associées :

Quels problèmes doivent être pris en compte lors du développement d'interfaces d'application avec PHP

Écriture d'application dans l'interface Laravel (API)

Discussion sur les problèmes de sécurité de l'écriture d'interface d'application 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:
source:php.cn
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