ホームページ  >  記事  >  バックエンド開発  >  PHP バックグラウンドおよびモバイル APP インターフェイス開発サンプル コード

PHP バックグラウンドおよびモバイル APP インターフェイス開発サンプル コード

小云云
小云云オリジナル
2018-05-29 10:44:277105ブラウズ

この記事では、主に PHP バックエンドとモバイル APP インターフェイス開発のサンプル コードを共有し、皆様のお役に立つことを願っています

1. モバイル APP (クライアント) プログラム インターフェイス

ここでは、PC 上で C++ プログラムを使用して HTTP プロトコル データの POST をシミュレートします。

#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;
}

2. バックエンド PHP テスト プログラム

<?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";
}
?>

3. 実装効果


上の図では、クライアント C++ プログラムがバックエンド Nginx+PHP に送信された後、PHP を通じて POST データを取得します。以下の最初の 2 つの方法:

方法 1. 最も一般的な方法は次のとおりです: $_POST['fieldname'];
注: Content-Type: application/x-www-form-urlencoded によって送信されたデータのみを受信できます。
説明: フォームからのデータ POST です。

方法2、file_get_contents("php://input");
説明:
POSTの元データを読み込むことができます。
$HTTP_RAW_POST_DATA と比較して、メモリへの負担が少なく、特別な php.ini 設定は必要ありません。
php://input は enctype="multipart/form-data" では使用できません。
説明:
Content-Type が指定されていない POST データの場合、file_get_contents("php://input"); を使用して元のデータを取得できます。
実際、このメソッドは、PHP を使用して任意の POST データを受信するために使用できます。 Content-Type に関係なく、バイナリ ファイル ストリームを含めることもできます。

したがって、方法 2 を使用するのが最も安全な方法です。

方法 3、$GLOBALS['HTTP_RAW_POST_DATA'];

注:
常に元の POST データを含む $HTTP_RAW_POST_DATA 変数を生成します。
この変数は、認識できない MIME タイプのデータが見つかった場合にのみ生成されます。
$HTTP_RAW_POST_DATA は、enctype="multipart/form-data" フォーム データには使用できません。
投稿されたデータが PHP によって認識されない場合は、$GLOBALS['HTTP_RAW_POST_DATA'] を使用して受信できます。
text/xml や
説明:
$GLOBALS['HTTP_RAW_POST_DATA'] は、POST からの元のデータを保存します。
$_POST または $_REQUEST は、PHP によってフォーマットされたデータを key=>value の形式で保存します。

ただし、POST データを $GLOBALS['HTTP_RAW_POST_DATA'] に保存するかどうかは、Content-Type の設定によって決まります。つまり、データを POST するときは、Content-Type を明示的に指定する必要があります: application/x-www-form-urlencoded , POST データは $GLOBALS['HTTP_RAW_POST_DATA'] に保存されます。

ファイルをアップロードするには、POST enctype="multipart/form-data" を使用します。 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>

関連する推奨事項:

PHP で APP インターフェイスを開発するときに注意する必要がある問題は何ですか?

以上がPHP バックグラウンドおよびモバイル APP インターフェイス開発サンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。